Creatify Music API
Access the background-music library - list music categories (GET /music_categories/) and tracks (GET /musics/) - to attach soundtracks to generated videos. Read-only catalog endpoints; no credit cost to browse.
Access the background-music library - list music categories (GET /music_categories/) and tracks (GET /musics/) - to attach soundtracks to generated videos. Read-only catalog endpoints; no credit cost to browse.
openapi: 3.0.3
info:
title: Creatify API
description: >-
The Creatify API generates AI avatar and marketing videos programmatically.
It turns product URLs, scripts, images, and text into short-form video ads
narrated by ultra-realistic AI avatars. All endpoints are REST over HTTPS
under https://api.creatify.ai/api and are authenticated with two headers,
X-API-ID and X-API-KEY, issued from the in-app API Dashboard at
app.creatify.ai (API access requires an active paid subscription).
Media generation is asynchronous: a POST creates a job and returns an id
with a status ("pending"), and the caller polls GET /{resource}/{id}/ until
status is "done" (or "error"). Some endpoints additionally accept a
webhook_url and POST a status update to the caller on completion. There is
no WebSocket or SSE surface. Usage is metered in credits (roughly 5 credits
per 30 seconds of video and 1 credit per 30 seconds of audio).
Endpoints tagged with x-modeled: true below are inferred from Creatify's
documented product areas plus the platform's consistent
/api/{resource}/ + /api/{resource}/{id}/ convention, because a fully
published reference page for the exact path was not available at authoring
time. Verify their request/response schemas against docs.creatify.ai.
version: '1.0'
contact:
name: Creatify
url: https://creatify.ai
servers:
- url: https://api.creatify.ai/api
description: Creatify API
security:
- apiId: []
apiKey: []
tags:
- name: AI Avatar
description: Lipsync v1/v2 and Aurora avatar video generation.
- name: Link-to-Video
description: Turn a URL into a short-form video ad.
- name: AI Shorts
description: Convert a text script into a short-form video (deprecated).
- name: Custom Templates
description: Generate videos from customizable templates (modeled).
- name: Product-to-Video
description: Generate video ads from product images (modeled).
- name: Text-to-Speech
description: Generate voiceovers from text.
- name: Personas
description: Catalog of 1500+ AI avatars/personas.
- name: Voices
description: Catalog of AI voices and accents.
- name: Music
description: Background-music categories and tracks (modeled).
- name: AI Editing
description: Enhance and stylize existing videos (modeled).
paths:
/links/:
post:
operationId: createLink
tags:
- Link-to-Video
summary: Create a link from a URL
description: >-
Create a Creatify link by scraping a product or landing-page URL. The
resulting link id is used to generate a link-to-video job.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- url
properties:
url:
type: string
format: uri
description: The product or landing-page URL to convert.
responses:
'200':
description: The created link.
content:
application/json:
schema:
$ref: '#/components/schemas/Link'
'401':
$ref: '#/components/responses/Unauthorized'
/link_to_videos/:
get:
operationId: listLinkToVideos
tags:
- Link-to-Video
summary: List link-to-video jobs
responses:
'200':
description: A list of link-to-video jobs.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createLinkToVideo
tags:
- Link-to-Video
summary: Create a link-to-video job
description: >-
Create a video-generation job from a link. Returns immediately with a
job id and status; poll GET /link_to_videos/{id}/ for progress.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
link:
type: string
description: The link id to build the video from.
target_platform:
type: string
example: Facebook
language:
type: string
example: en
video_length:
type: integer
example: 30
aspect_ratio:
type: string
example: 9x16
script_style:
type: string
visual_style:
type: string
webhook_url:
type: string
format: uri
nullable: true
responses:
'200':
description: The created link-to-video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/link_to_videos/{id}/:
get:
operationId: getLinkToVideo
tags:
- Link-to-Video
summary: Get a link-to-video job
description: Poll the status and progress of a link-to-video job.
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The link-to-video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/link_to_videos/{id}/render/:
post:
operationId: renderLinkToVideo
tags:
- Link-to-Video
summary: Render a link-to-video job
description: >-
Render a previewed link-to-video job to final video. Billed 4 credits
per 30 seconds (Standard 5 credits/30s; Aurora 1 credit/second; Aurora
fast 0.5 credit/second).
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The rendering link-to-video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/lipsyncs/:
post:
operationId: createLipsync
tags:
- AI Avatar
summary: Create an AI avatar video (Lipsync v1)
description: >-
Convert text or an audio file plus a chosen avatar into a single-scene
talking-head video. Async - poll GET /lipsyncs/{id}/.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
text:
type: string
creator:
type: string
description: The persona/avatar id.
accent:
type: string
description: The voice/accent id.
aspect_ratio:
type: string
example: 9x16
webhook_url:
type: string
format: uri
nullable: true
responses:
'200':
description: The created avatar video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/lipsyncs/preview/:
post:
operationId: previewLipsync
tags:
- AI Avatar
summary: Preview an AI avatar video (Lipsync v1)
description: Generate a low-cost preview of an avatar video before full render.
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The preview job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/lipsyncs/{id}/:
get:
operationId: getLipsync
tags:
- AI Avatar
summary: Get an AI avatar video (Lipsync v1)
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The avatar video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/lipsyncs/{id}/render/:
post:
operationId: renderLipsync
tags:
- AI Avatar
summary: Render an AI avatar video (Lipsync v1)
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The rendering avatar video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/lipsyncs_v2/:
post:
operationId: createLipsyncV2
tags:
- AI Avatar
summary: Create a multi-scene AI avatar video (Lipsync v2)
description: >-
Generate a video with multiple scenes, each with its own character,
voice, background, and captions. Async - poll GET /lipsyncs_v2/{id}/.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
video_inputs:
type: array
description: Array of scene objects.
items:
type: object
additionalProperties: true
aspect_ratio:
type: string
example: 9x16
model_version:
type: string
example: aurora_v1_fast
webhook_url:
type: string
format: uri
nullable: true
responses:
'200':
description: The created multi-scene avatar video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/lipsyncs_v2/{id}/:
get:
operationId: getLipsyncV2
tags:
- AI Avatar
summary: Get a multi-scene AI avatar video (Lipsync v2)
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The multi-scene avatar video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/ai_shorts/:
post:
operationId: createAiShort
tags:
- AI Shorts
summary: Create an AI short video
description: >-
Convert a text script into a short-form video. Billed 5 credits. Note -
documented by Creatify as deprecated in favor of Link-to-Video and AI
Avatar.
deprecated: true
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
script:
type: string
aspect_ratio:
type: string
example: 9x16
style:
type: string
example: 4K realistic
responses:
'200':
description: The created AI short job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
get:
operationId: listAiShorts
tags:
- AI Shorts
summary: List AI short videos
deprecated: true
responses:
'200':
description: A list of AI short jobs.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/ai_shorts/{id}/:
get:
operationId: getAiShort
tags:
- AI Shorts
summary: Get an AI short video
deprecated: true
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The AI short job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/custom_templates/:
post:
operationId: createCustomTemplateVideo
tags:
- Custom Templates
summary: Create a video from a custom template
description: >-
Generate a video from a customizable template by supplying template
variables. Modeled path - verify against docs.creatify.ai.
x-modeled: true
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The created template video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/custom_templates/{id}/:
get:
operationId: getCustomTemplateVideo
tags:
- Custom Templates
summary: Get a custom template video
x-modeled: true
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The template video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/product_to_video/:
post:
operationId: createProductToVideo
tags:
- Product-to-Video
summary: Create a video ad from product images
description: >-
Generate a studio-quality video ad from product images. Billed per
image and per 30 seconds of footage. Modeled path - verify against
docs.creatify.ai.
x-modeled: true
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The created product-to-video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/product_to_video/{id}/:
get:
operationId: getProductToVideo
tags:
- Product-to-Video
summary: Get a product-to-video job
x-modeled: true
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The product-to-video job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/text_to_speech/:
post:
operationId: createTextToSpeech
tags:
- Text-to-Speech
summary: Generate speech from text
description: >-
Generate an ultra-realistic voiceover from text (up to 8000 characters).
Billed 1 credit per 30 seconds of audio. Supports a webhook_url for
completion notification.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- script
properties:
script:
type: string
maxLength: 8000
description: Text to be converted to speech.
accent:
type: string
format: uuid
nullable: true
description: Accent/voice to be used for the speech.
webhook_url:
type: string
format: uri
maxLength: 200
nullable: true
description: Webhook URL for status updates.
responses:
'200':
description: The created text-to-speech job.
content:
application/json:
schema:
$ref: '#/components/schemas/AudioJob'
'401':
$ref: '#/components/responses/Unauthorized'
/text_to_speech/{id}/:
get:
operationId: getTextToSpeech
tags:
- Text-to-Speech
summary: Get a text-to-speech job
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The text-to-speech job.
content:
application/json:
schema:
$ref: '#/components/schemas/AudioJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/personas/:
get:
operationId: listPersonas
tags:
- Personas
summary: Get all available avatars
description: List the catalog of 1500+ realistic AI avatars/personas.
responses:
'200':
description: A list of personas.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Persona'
'401':
$ref: '#/components/responses/Unauthorized'
/personas/paginated/:
get:
operationId: listPersonasPaginated
tags:
- Personas
summary: Get all available avatars with pagination
parameters:
- name: page
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of personas.
content:
application/json:
schema:
type: object
properties:
count:
type: integer
next:
type: string
nullable: true
previous:
type: string
nullable: true
results:
type: array
items:
$ref: '#/components/schemas/Persona'
'401':
$ref: '#/components/responses/Unauthorized'
/personas/{id}/:
get:
operationId: getPersona
tags:
- Personas
summary: Get avatar by id
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The persona.
content:
application/json:
schema:
$ref: '#/components/schemas/Persona'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/voices/:
get:
operationId: listVoices
tags:
- Voices
summary: Get all available voices
responses:
'200':
description: A list of voices.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Voice'
'401':
$ref: '#/components/responses/Unauthorized'
/voices/paginated/:
get:
operationId: listVoicesPaginated
tags:
- Voices
summary: Get voices with pagination
parameters:
- name: page
in: query
schema:
type: integer
responses:
'200':
description: A paginated list of voices.
content:
application/json:
schema:
type: object
properties:
count:
type: integer
next:
type: string
nullable: true
previous:
type: string
nullable: true
results:
type: array
items:
$ref: '#/components/schemas/Voice'
'401':
$ref: '#/components/responses/Unauthorized'
/music_categories/:
get:
operationId: listMusicCategories
tags:
- Music
summary: Get music categories
description: List background-music categories. Modeled path - verify against docs.creatify.ai.
x-modeled: true
responses:
'200':
description: A list of music categories.
content:
application/json:
schema:
type: array
items:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/musics/:
get:
operationId: listMusics
tags:
- Music
summary: Get musics
description: List background-music tracks. Modeled path - verify against docs.creatify.ai.
x-modeled: true
responses:
'200':
description: A list of music tracks.
content:
application/json:
schema:
type: array
items:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
/ai_editing/:
post:
operationId: createAiEditing
tags:
- AI Editing
summary: Create an AI editing job
description: >-
Enhance and stylize an existing video with professional templates.
Async - poll GET /ai_editing/{id}/.
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The created AI editing job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
/ai_editing/{id}/:
get:
operationId: getAiEditing
tags:
- AI Editing
summary: Get an AI editing job
x-modeled: true
parameters:
- $ref: '#/components/parameters/Id'
responses:
'200':
description: The AI editing job.
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJob'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/inspiration_jobs/:
get:
operationId: listInspirationJobs
tags:
- AI Shorts
summary: List inspiration jobs
responses:
'200':
description: A list of inspiration jobs.
content:
application/json:
schema:
type: array
items:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
post:
operationId: createInspirationJob
tags:
- AI Shorts
summary: Create an inspiration job
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: true
responses:
'200':
description: The created inspiration job.
content:
application/json:
schema:
type: object
additionalProperties: true
'401':
$ref: '#/components/responses/Unauthorized'
components:
securitySchemes:
apiId:
type: apiKey
in: header
name: X-API-ID
description: Your unique Creatify API identifier from the in-app API Dashboard.
apiKey:
type: apiKey
in: header
name: X-API-KEY
description: Your secret Creatify API key. Keep it server-side.
parameters:
Id:
name: id
in: path
required: true
description: The UUID of the resource.
schema:
type: string
format: uuid
responses:
Unauthorized:
description: Missing or invalid X-API-ID / X-API-KEY headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Link:
type: object
properties:
id:
type: string
format: uuid
url:
type: string
format: uri
title:
type: string
description:
type: string
image_urls:
type: array
items:
type: string
format: uri
video_urls:
type: array
items:
type: string
format: uri
VideoJob:
type: object
description: A generic asynchronous video-generation job.
properties:
id:
type: string
format: uuid
status:
type: string
enum:
- pending
- in_queue
- running
- done
- error
progress:
type: string
failed_reason:
type: string
nullable: true
credits_used:
type: number
duration:
type: integer
video_output:
type: string
format: uri
nullable: true
video_thumbnail:
type: string
format: uri
nullable: true
output:
type: string
format: uri
nullable: true
aspect_ratio:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
AudioJob:
type: object
description: A text-to-speech audio-generation job.
properties:
id:
type: string
format: uuid
status:
type: string
enum:
- pending
- running
- done
- error
output:
type: string
format: uri
nullable: true
credits_used:
type: number
duration:
type: integer
failed_reason:
type: string
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Persona:
type: object
description: An AI avatar/persona in the catalog.
properties:
id:
type: string
format: uuid
creator_name:
type: string
gender:
type: string
age_range:
type: string
style:
type: string
preview_image_1_1:
type: string
format: uri
preview_video_1_1:
type: string
format: uri
is_active:
type: boolean
Voice:
type: object
description: An AI voice / accent.
properties:
id:
type: string
format: uuid
name:
type: string
gender:
type: string
language:
type: string
accents:
type: array
items:
type: object
additionalProperties: true
preview_url:
type: string
format: uri
Error:
type: object
properties:
detail:
type: string
code:
type: string