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.
openapi: 3.2.0
info:
title: Fattly Account 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: Account
paths:
/api/credits:
get:
tags:
- Account
operationId: getCredits
summary: Credit balance
responses:
'200':
description: Balance
content:
application/json:
schema:
type: object
properties:
credits:
type: integer
required:
- credits
'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/models:
get:
tags:
- Account
operationId: listModels
summary: Models and prices (public, no key)
security: []
responses:
'200':
description: Catalog of image, video and audio models with prices in credits
content:
application/json:
schema:
type: object
/api/upload:
post:
tags:
- Account
operationId: uploadImage
summary: Upload an image (free)
description: Uploads a JPG, PNG or WEBP image (max 10 MB) and returns a URL to use as an input image in other endpoints.
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
kind:
type: string
enum:
- image
default: image
required:
- file
responses:
'200':
description: Uploaded
content:
application/json:
schema:
type: object
properties:
url:
type: string
format: uri
description: Link to the finished file (signed, valid about 1 hour — download it or fetch a fresh link).
required:
- url
'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