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