Fattly AI Video API
The Video API from Fattly AI — 2 operation(s) for video.
The Video API from Fattly AI — 2 operation(s) for video.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/fattly-app:fattly-app-video-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Fattly Video API
version: 1.0.0
summary: UGC video ads, AI images, video and voiceovers from 40+ models.
description: 'REST API of fattly.app — the same engine as the web app, the CLI (`npm i -g fattly`) and the MCP server (`https://fattly.app/api/mcp`).
**Auth:** create a key at fattly.app → Dashboard → API keys and send `Authorization: Bearer gpx_live_...`.
**Billing:** every generation spends credits from the key owner''s account (GET /api/models lists prices). Failed generations are refunded automatically. Keys can have a daily spend limit.
**Async jobs:** video, video ads and other long jobs return an `id` — poll GET /api/video/status?id=... every 5-10 s until `completed` or `failed`.
**Inputs:** image inputs must be URLs returned by POST /api/upload.
**Content policy:** safe-for-work only, adults only, use only faces and voices you have the right to use.
**Ad presets and creator avatars:** preset ids (templateId) and avatars are listed by the MCP tools fattly_list_ad_presets and fattly_create_avatar (MCP server: https://fattly.app/api/mcp).'
contact:
name: Fattly
url: https://fattly.app
email: contact@fattly.app
termsOfService: https://fattly.app/regulamin
servers:
- url: https://fattly.app
security:
- bearerAuth: []
tags:
- name: Video
paths:
/api/video/generate:
post:
tags:
- Video
operationId: generateVideo
summary: Generate a video (async)
description: Text-to-video, image-to-video or reference-to-video. Returns a job id — poll /api/video/status.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
prompt:
type: string
description: Description of the video scene.
modelId:
type: string
description: Required. Video model id from GET /api/models, e.g. kling-3-standard | gemini-omni-flash | seedance-2-5.
duration:
type: integer
description: Clip length in seconds (model dependent).
aspectRatio:
type: string
description: 'Aspect ratio: 16:9, 9:16 or 1:1 (default 16:9). gemini-omni-flash supports 16:9 and 9:16 only; other values return 400.'
inputImageUrl:
type: string
description: Optional start image for image-to-video — must be a fal URL. Get one with POST /api/upload.
referenceImageUrls:
type: array
items:
type: string
maxItems: 50
description: Optional MULTIPLE reference images (fal URLs, 2-50) for reference-to-video models like seedance-2-5 — the model blends them into one video. With a single URL the video starts from that image (image-to-video). Get each URL with POST /api/upload.
consent:
type: boolean
description: REQUIRED (true) whenever you pass inputImageUrl or referenceImageUrls — animating a photo of a real person needs their consent. Must be true. By setting it you confirm that you have the rights to, and the consent of, every person who is visible or audible in the materials you provide.
required:
- prompt
- modelId
additionalProperties: false
responses:
'200':
description: Job started
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Job id — poll GET /api/video/status?id=... until completed or failed.
cost:
type: integer
description: Credits charged.
required:
- id
'400':
description: Invalid input or blocked content
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing, invalid or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Not enough credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit or daily key spend limit reached
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/api/video/status:
get:
tags:
- Video
operationId: getJobStatus
summary: Status of an async job (video, video ad)
parameters:
- name: id
in: query
required: true
schema:
type: string
description: Job id returned by an async endpoint.
responses:
'200':
description: Job status
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: completed or failed when finished; any other value means the job is still running.
url:
type: string
format: uri
description: Present when completed.
error:
type: string
description: Present when failed (credits refunded).
required:
- status
'400':
description: Invalid input or blocked content
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Missing, invalid or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'402':
description: Not enough credits
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit or daily key spend limit reached
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
properties:
error:
type: string
required:
- error
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: API key gpx_live_... from fattly.app → Dashboard → API keys.
externalDocs:
description: MCP / Claude setup
url: https://fattly.app/claude-mcp