openapi: 3.0.1 info: title: Shotstack version: v1 description: | Shotstack is a video, image and audio editing service that allows for the automated generation of videos, images and audio using JSON and a RESTful API. You arrange and configure an edit and POST it to the API which will render your media and provide a file location when complete. For more details visit [shotstack.io](https://shotstack.io) or checkout our [getting started](https://shotstack.io/docs/guide/) documentation. There are three API's, one for editing and generating assets (Edit API), one for managing hosted assets (Serve API) and one for ingesting and transforming source assets (Ingest API). Each API has it's own base URL and collection of endpoints. Each API uses the same set of API keys. **[Edit API](#shotstack-edit)** - [https://api.shotstack.io/edit/{version}](#)
Edit videos, images and audio assets in the cloud using a simple JSON schema and templates. **[Serve API](#shotstack-serve)** - [https://api.shotstack.io/serve/{version}](#)
Inspect and manage the hosting of assets generated by the Edit and Ingest APIs. **[Ingest API](#shotstack-ingest)** - [https://api.shotstack.io/ingest/{version}](#)
Ingest (upload, store and transform) source footage, images, audio and fonts to be used by the Edit API. **[Create API](#shotstack-create)** - [https://api.shotstack.io/create/{version}](#)
Generate images, videos, voice overs and text using built in and third party generative AI providers. servers: - url: https://api.shotstack.io/edit/{version} variables: version: description: >- Set the stage to **v1** for production usage without watermarks. Set to **stage** to use the development sandbox. enum: - v1 - stage default: v1 - url: https://api.shotstack.io/serve/{version} variables: version: description: >- Set the stage to **v1** for production usage. Set to **stage** to use the development sandbox. enum: - v1 - stage default: v1 - url: https://api.shotstack.io/ingest/{version} variables: version: description: >- Set the stage to **v1** for production usage. Set to **stage** to use the development sandbox. enum: - v1 - stage default: v1 - url: https://api.shotstack.io/create/{version} variables: version: description: >- Set the stage to **v1** for production usage. Set to **stage** to use the development sandbox. enum: - v1 - stage default: v1 tags: - name: Edit description: >- The Edit API is used to edit videos, images and audio files in the cloud using a simple to understand JSON schema. Compose an edit using tracks, clips and assets and add transitions, filters, overlays and text. Finally send the JSON to the Edit API to be rendered. - name: Serve description: >- Assets generated by the Edit API or uploaded via the Ingest API are sent to the Serve API. The Serve API includes a simple hosting service with a CDN or you can send assets to third party services like AWS S3 or Mux. The Serve API includes endpoints to look up assets, where they are hosted and their status. - name: Ingest description: >- The Ingest API lets you upload and store your source footage and user generated content in close proximity to the Edit API. Instead of hosting your own assets or building your own uploader you can use the Ingest API. The Ingest API provides endpoints to fetch and upload files and check their status and URLs. All ingested files are available directly from an S3 bucket URL or via CDN (Serve API). - name: Create description: >- The Create API generates assets and media files using Generative AI services like text-to-speech and text-to-avatar. A native text-to-speech service is included as well as integrations with third party providers. Third party services include [HeyGen](https://www.heygen.com/) text-to-avatar, [ElevenLabs](https://elevenlabs.io/) text-to-speech and [D-ID](https://www.d-id.com/) text-to-avatar. Assets can be used with the Edit API or downloaded and used independently. paths: /render: $ref: "./paths/render.yaml" /render/{id}: $ref: "./paths/renderid.yaml" /templates: $ref: "./paths/templates.yaml" /templates/{id}: $ref: "./paths/templatesid.yaml" /templates/render: $ref: "./paths/templatesrender.yaml" /probe/{url}: $ref: "./paths/probe.yaml" /assets/{id}: $ref: "./paths/assetsid.yaml" /assets/render/{id}: $ref: "./paths/assetsrenderid.yaml" /assets: $ref: "./paths/assets.yaml" /sources: $ref: "./paths/sources.yaml" /sources/{id}: $ref: "./paths/sourcesid.yaml" /upload: $ref: "./paths/upload.yaml" # Because of the way we have our servers set up and Create and Serve share the same endpoint name and how yaml/swagger # can't have duplicate keys - we use a temporary path name here /path_alias_createassets and rename it at built time # to assets using sed. Better ideas welcomed! /path_alias_createassets: $ref: "./paths/generateasset.yaml" # Using path alias and sed for replacement. See above comment. /path_alias_createassets/{id}: $ref: "./paths/generateassetid.yaml" components: schemas: # Request schemas Edit: $ref: "./schemas/edit.yaml#/Edit" Timeline: $ref: "./schemas/timeline.yaml#/Timeline" Soundtrack: $ref: "./schemas/soundtrack.yaml#/Soundtrack" Font: $ref: "./schemas/font.yaml#/Font" Track: $ref: "./schemas/track.yaml#/Track" Clip: $ref: "./schemas/clip.yaml#/Clip" Asset: $ref: "./schemas/asset.yaml#/Asset" VideoAsset: $ref: "./schemas/videoasset.yaml#/VideoAsset" ImageAsset: $ref: "./schemas/imageasset.yaml#/ImageAsset" TitleAsset: $ref: "./schemas/titleasset.yaml#/TitleAsset" HtmlAsset: $ref: "./schemas/htmlasset.yaml#/HtmlAsset" AudioAsset: $ref: "./schemas/audioasset.yaml#/AudioAsset" LumaAsset: $ref: "./schemas/lumaasset.yaml#/LumaAsset" Transition: $ref: "./schemas/transition.yaml#/Transition" Offset: $ref: "./schemas/offset.yaml#/Offset" Crop: $ref: "./schemas/crop.yaml#/Crop" Transformation: $ref: "./schemas/transformation.yaml#/Transformation" RotateTransformation: $ref: "./schemas/rotatetransformation.yaml#/RotateTransformation" SkewTransformation: $ref: "./schemas/skewtransformation.yaml#/SkewTransformation" FlipTransformation: $ref: "./schemas/fliptransformation.yaml#/FlipTransformation" MergeField: $ref: "./schemas/mergefield.yaml#/MergeField" Output: $ref: "./schemas/output.yaml#/Output" Size: $ref: "./schemas/size.yaml#/Size" Range: $ref: "./schemas/range.yaml#/Range" Poster: $ref: "./schemas/poster.yaml#/Poster" Thumbnail: $ref: "./schemas/thumbnail.yaml#/Thumbnail" Destinations: $ref: "./schemas/destinations.yaml#/Destinations" ShotstackDestination: $ref: "./schemas/destinations/shotstackDestination.yaml#/ShotstackDestination" MuxDestination: $ref: "./schemas/destinations/muxDestination.yaml#/MuxDestination" MuxDestinationOptions: $ref: "./schemas/destinations/muxDestinationOptions.yaml#/MuxDestinationOptions" S3Destination: $ref: "./schemas/destinations/s3Destination.yaml#/S3Destination" S3DestinationOptions: $ref: "./schemas/destinations/s3DestinationOptions.yaml#/S3DestinationOptions" GoogleCloudStorageDestination: $ref: "./schemas/destinations/googleCloudStorageDestination.yaml#/GoogleCloudStorageDestination" GoogleCloudStorageDestinationOptions: $ref: "./schemas/destinations/googleCloudStorageDestinationOptions.yaml#/GoogleCloudStorageDestinationOptions" GoogleDriveDestination: $ref: "./schemas/destinations/googleDriveDestination.yaml#/GoogleDriveDestination" GoogleDriveDestinationOptions: $ref: "./schemas/destinations/googleDriveDestinationOptions.yaml#/GoogleDriveDestinationOptions" Template: $ref: "./schemas/template.yaml#/Template" TemplateRender: $ref: "./schemas/templaterender.yaml#/TemplateRender" # Ingest schemas Source: $ref: "./schemas/ingest/source.yaml#/Source" Outputs: $ref: "./schemas/ingest/outputs.yaml#/Outputs" Rendition: $ref: "./schemas/ingest/rendition.yaml#/Rendition" Transcription: $ref: "./schemas/ingest/transcription.yaml#/Transcription" Speed: $ref: "./schemas/ingest/speed.yaml#/Speed" Enhancements: $ref: "./schemas/ingest/enhancements.yaml#/Enhancements" AudioEnhancement: $ref: "./schemas/ingest/enhancements/audioEnhancement.yaml#/AudioEnhancement" DolbyEnhancement: $ref: "./schemas/ingest/enhancements/audio/dolbyEnhancement.yaml#/DolbyEnhancement" DolbyEnhancementOptions: $ref: "./schemas/ingest/enhancements/audio/dolbyEnhancementOptions.yaml#/DolbyEnhancementOptions" # Serve schemas Transfer: $ref: "./schemas/serve/transfer.yaml#/Transfer" # Create schemas GeneratedAsset: $ref: "./schemas/create/generatedAsset.yaml#/GeneratedAsset" ShotstackGeneratedAsset: $ref: "./schemas/create/shotstackGeneratedAsset.yaml#/ShotstackGeneratedAsset" ShotstackGeneratedAssetOptions: $ref: "./schemas/create/shotstackGeneratedAssetOptions.yaml#/ShotstackGeneratedAssetOptions" ShotstackTextToSpeechOptions: $ref: "./schemas/create/shotstackTextToSpeechOptions.yaml#/ShotstackTextToSpeechOptions" ShotstackTextToImageOptions: $ref: "./schemas/create/shotstackTextToImageOptions.yaml#/ShotstackTextToImageOptions" ShotstackImageToVideoOptions: $ref: "./schemas/create/shotstackImageToVideoOptions.yaml#/ShotstackImageToVideoOptions" ShotstackTextGeneratorOptions: $ref: "./schemas/create/shotstackTextGeneratorOptions.yaml#/ShotstackTextGeneratorOptions" DIDGeneratedAsset: $ref: "./schemas/create/didGeneratedAsset.yaml#/DIDGeneratedAsset" DIDGeneratedAssetOptions: $ref: "./schemas/create/didGeneratedAssetOptions.yaml#/DIDGeneratedAssetOptions" DIDTextToAvatarOptions: $ref: "./schemas/create/didTextToAvatarOptions.yaml#/DIDTextToAvatarOptions" ElevenLabsGeneratedAsset: $ref: "./schemas/create/elevenlabsGeneratedAsset.yaml#/ElevenLabsGeneratedAsset" ElevenLabsGeneratedAssetOptions: $ref: "./schemas/create/elevenlabsGeneratedAssetOptions.yaml#/ElevenLabsGeneratedAssetOptions" ElevenLabsTextToSpeechOptions: $ref: "./schemas/create/elevenlabsTextToSpeechOptions.yaml#/ElevenLabsTextToSpeechOptions" HeyGenGeneratedAsset: $ref: "./schemas/create/heygenGeneratedAsset.yaml#/HeyGenGeneratedAsset" HeyGenGeneratedAssetOptions: $ref: "./schemas/create/heygenGeneratedAssetOptions.yaml#/HeyGenGeneratedAssetOptions" HeyGenTextToAvatarOptions: $ref: "./schemas/create/heygenTextToAvatarOptions.yaml#/HeyGenTextToAvatarOptions" OpenAiGeneratedAsset: $ref: "./schemas/create/openaiGeneratedAsset.yaml#/OpenAiGeneratedAsset" OpenAiGeneratedAssetOptions: $ref: "./schemas/create/openaiGeneratedAssetOptions.yaml#/OpenAiGeneratedAssetOptions" OpenAiTextGeneratorOptions: $ref: "./schemas/create/openaiTextGeneratorOptions.yaml#/OpenAiTextGeneratorOptions" StabilityAiGeneratedAsset: $ref: "./schemas/create/stabilityAiGeneratedAsset.yaml#/StabilityAiGeneratedAsset" StabilityAiGeneratedAssetOptions: $ref: "./schemas/create/stabilityAiGeneratedAssetOptions.yaml#/StabilityAiGeneratedAssetOptions" StabilityAiTextToImageOptions: $ref: "./schemas/create/stabilityAiTextToImageOptions.yaml#/StabilityAiTextToImageOptions" # Edit response schemas QueuedResponse: $ref: "./schemas/responses/queuedresponse.yaml#/QueuedResponse" QueuedResponseData: $ref: "./schemas/responses/queuedresponsedata.yaml#/QueuedResponseData" RenderResponse: $ref: "./schemas/responses/renderresponse.yaml#/RenderResponse" RenderResponseData: $ref: "./schemas/responses/renderresponsedata.yaml#/RenderResponseData" TemplateResponse: $ref: "./schemas/responses/templateresponse.yaml#/TemplateResponse" TemplateResponseData: $ref: "./schemas/responses/templateresponsedata.yaml#/TemplateResponseData" TemplateDataResponse: $ref: "./schemas/responses/templatedataresponse.yaml#/TemplateDataResponse" TemplateDataResponseData: $ref: "./schemas/responses/templatedataresponsedata.yaml#/TemplateDataResponseData" TemplateListResponse: $ref: "./schemas/responses/templatelistresponse.yaml#/TemplateListResponse" TemplateListResponseData: $ref: "./schemas/responses/templatelistresponsedata.yaml#/TemplateListResponseData" TemplateListResponseItem: $ref: "./schemas/responses/templatelistresponseitem.yaml#/TemplateListResponseItem" ProbeResponse: $ref: "./schemas/responses/proberesponse.yaml#/ProbeResponse" AssetResponse: $ref: "./schemas/responses/assetresponse.yaml#/AssetResponse" AssetRenderResponse: $ref: "./schemas/responses/assetrenderresponse.yaml#/AssetRenderResponse" AssetResponseData: $ref: "./schemas/responses/assetresponsedata.yaml#/AssetResponseData" AssetResponseAttributes: $ref: "./schemas/responses/assetresponseattributes.yaml#/AssetResponseAttributes" # Serve response schemas TransferResponse: $ref: "./schemas/serve/responses/transferresponse.yaml#/TransferResponse" TransferResponseData: $ref: "./schemas/serve/responses/transferresponsedata.yaml#/TransferResponseData" TransferResponseAttributes: $ref: "./schemas/serve/responses/transferresponseattributes.yaml#/TransferResponseAttributes" # Ingest response schemas QueuedSourceResponse: $ref: "./schemas/ingest/responses/queuedsourceresponse.yaml#/QueuedSourceResponse" QueuedSourceResponseData: $ref: "./schemas/ingest/responses/queuedsourceresponsedata.yaml#/QueuedSourceResponseData" SourceListResponse: $ref: "./schemas/ingest/responses/sourcelistresponse.yaml#/SourceListResponse" SourceResponse: $ref: "./schemas/ingest/responses/sourceresponse.yaml#/SourceResponse" SourceResponseData: $ref: "./schemas/ingest/responses/sourceresponsedata.yaml#/SourceResponseData" SourceResponseAttributes: $ref: "./schemas/ingest/responses/sourceresponseattributes.yaml#/SourceResponseAttributes" OutputsResponse: $ref: "./schemas/ingest/responses/outputsresponse.yaml#/OutputsResponse" RenditionResponseAttributes: $ref: "./schemas/ingest/responses/renditionresponseattributes.yaml#/RenditionResponseAttributes" UploadResponse: $ref: "./schemas/ingest/responses/uploadresponse.yaml#/UploadResponse" UploadResponseData: $ref: "./schemas/ingest/responses/uploadresponsedata.yaml#/UploadResponseData" UploadResponseAttributes: $ref: "./schemas/ingest/responses/uploadresponseattributes.yaml#/UploadResponseAttributes" IngestErrorResponse: $ref: "./schemas/ingest/responses/ingesterrorresponse.yaml#/IngestErrorResponse" IngestErrorResponseData: $ref: "./schemas/ingest/responses/ingesterrorresponsedata.yaml#/IngestErrorResponseData" # Create response schemas GeneratedAssetResponse: $ref: "./schemas/create/responses/generatedAssetResponse.yaml#/GeneratedAssetResponse" GeneratedAssetResponseData: $ref: "./schemas/create/responses/generatedAssetResponseData.yaml#/GeneratedAssetResponseData" GeneratedAssetResponseAttributes: $ref: "./schemas/create/responses/generatedAssetResponseAttributes.yaml#/GeneratedAssetResponseAttributes" GeneratedAssetErrorResponse: $ref: "./schemas/create/responses/generatedAssetErrorResponse.yaml#/GeneratedAssetErrorResponse" GeneratedAssetErrorResponseData: $ref: "./schemas/create/responses/generatedAssetErrorResponseData.yaml#/GeneratedAssetErrorResponseData" responses: {} parameters: {} examples: {} requestBodies: {} headers: {} securitySchemes: DeveloperKey: description: >- Set the **x-api-key** header with your provided key for the correct environment (v1 or stage). Include the header in all calls to the API that are secured with a key. type: apiKey in: header name: x-api-key links: {} callbacks: {}