Fattly AI Video API

The Video API from Fattly AI — 2 operation(s) for video.

GitHub OpenAPI

Operations 2

POST /api/video/generate Generate a video (async) #
GET /api/video/status Status of an async job (video, video ad) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fattly-app:fattly-app-video-api"
All apis
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.

Get an API 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 Specification

fattly-app-video-api-openapi.yml Raw ↑
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