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/vidplate-app:vidplate-app-templates-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: VidPlate Templates API
version: v1
summary: Render video and images from your own templates, on your own machines.
description: 'Server-to-server only: send your secret key as "Authorization: Bearer vpk_live_...". Requests from a browser are refused, and a secret key must never be put in a web page or an app.
Every response carries X-Request-Id. Errors use one shape (see the Error schema) with stable codes. Lists use cursor pagination: pass next_cursor as starting_after.
Rate limits are per key and per workspace, with RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers, and Retry-After on 429.
Renders run on your workspace''s own Browser Nodes (the render-nodes endpoints) and are not charged per render; paid API plans have a daily render limit and a monthly video-minutes allowance (429 quota_exceeded and 429 video_minutes_exceeded); Studio Pro has 10,000 static outputs and 2,000 video minutes a calendar month (429 static_outputs_exceeded and 429 video_minutes_exceeded) plus a daily safety limit (429 quota_exceeded); the Sandbox has one-off totals for its whole trial (402 sandbox_allowance_used). Webhooks are signed (VidPlate-Signature: t=..., v1=HMAC-SHA256 of "t.body") and carry IDs and statuses only.'
servers:
- url: https://api.vidplate.app/v1
description: VidPlate API
- url: https://vidplate.app/api/v1
description: Legacy base URL. It keeps working for existing integrations.
security:
- apiKey: []
tags:
- name: Templates
description: Your templates, their versions and each version's input schema.
paths:
/templates/by-code/{template_code}/fields:
get:
operationId: getTemplateFieldsByCode
tags:
- Templates
summary: Get a template code's field names, metadata and limits
description: Works for VidCanvas static and VidMotion video templates. template_code is the existing 24-hex template code copied from VidPlate; a tpl_ API ID is also accepted. Optional version selects latest or a pinned published version. Fields are projected from the same stored schema used to validate render inputs. Authored text placeholders are not defaults. Character max_length counts Unicode code points, as JSON Schema maxLength does. Key template/brand and workspace restrictions apply identically to template reads; an inaccessible code returns 404.
security:
- apiKey: []
x-required-scopes:
- templates:read
parameters:
- name: template_code
in: path
required: true
description: Existing 24-hex template code, or its tpl_ API ID.
schema:
type: string
example: 0123456789abcdef01234567
- name: version
in: query
required: false
description: latest or a published version number.
schema:
type: string
pattern: ^(latest|[1-9][0-9]*)$
default: latest
description: latest or a published version number.
responses:
'200':
description: The selected version's render field contract.
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateFields'
'400':
description: 'Error. Codes: schema_validation_failed.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: invalid_request
code: schema_validation_failed
message: '...'
request_id: req_0123456789abcdef01234567
'401':
description: 'Error. Codes: invalid_api_key.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: authentication_failed
code: invalid_api_key
message: '...'
request_id: req_0123456789abcdef01234567
'403':
description: 'Error. Codes: missing_scope, plan_not_eligible.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: permission_denied
code: missing_scope
message: '...'
request_id: req_0123456789abcdef01234567
'404':
description: 'Error. Codes: template_not_found, version_not_found.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: not_found
code: template_not_found
message: '...'
request_id: req_0123456789abcdef01234567
'429':
description: 'Error. Codes: too_many_requests.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: rate_limited
code: too_many_requests
message: '...'
request_id: req_0123456789abcdef01234567
'500':
description: 'Error. Codes: internal_error.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: api_error
code: internal_error
message: '...'
request_id: req_0123456789abcdef01234567
'503':
description: 'Error. Codes: versions_not_enabled.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: service_unavailable
code: versions_not_enabled
message: '...'
request_id: req_0123456789abcdef01234567
/templates:
get:
operationId: listTemplates
tags:
- Templates
summary: List templates
description: 'The workspace''s templates the API can use: VidCanvas statics (available) and VidMotion video templates (availability "coming_soon" until video renders open). Respects the key''s template and brand restrictions. Newest first.'
security:
- apiKey: []
x-required-scopes:
- templates:read
parameters:
- name: kind
in: query
required: false
schema:
enum:
- static
- video
- name: brand_id
in: query
required: false
description: Only templates of this brand.
schema:
type: string
pattern: ^brd_
description: Only templates of this brand.
- name: updated_since
in: query
required: false
description: Only templates changed since this time.
schema:
type: string
format: date-time
description: Only templates changed since this time.
- name: limit
in: query
required: false
description: Page size, 1 to 100.
schema:
type: integer
minimum: 1
maximum: 100
default: 20
description: Page size, 1 to 100.
- name: starting_after
in: query
required: false
description: 'Return items after this ID: the next_cursor of the previous page.'
schema:
type: string
pattern: ^tpl_
description: 'Return items after this ID: the next_cursor of the previous page.'
responses:
'200':
description: A page of templates.
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateList'
example:
object: list
data:
- object: template
id: tpl_6729c0a1b2c3d4e5f6a7b8c9
name: Price drop
description: null
kind: static
engine: vidcanvas
availability: available
brand_id: null
formats:
feed_4x5:
width: 1080
height: 1350
label: Feed
latest_version:
id: tv_6729c0a1b2c3d4e5f6a7b8ca
version: 4
status: active
schema_hash: sha256:9f1c...
created_at: '2026-10-30T12:00:00.000Z'
created_at: '2026-10-01T09:00:00.000Z'
updated_at: '2026-10-30T12:00:00.000Z'
has_more: false
next_cursor: null
'400':
description: 'Error. Codes: schema_validation_failed.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: invalid_request
code: schema_validation_failed
message: '...'
request_id: req_0123456789abcdef01234567
'401':
description: 'Error. Codes: invalid_api_key.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: authentication_failed
code: invalid_api_key
message: '...'
request_id: req_0123456789abcdef01234567
'403':
description: 'Error. Codes: missing_scope, plan_not_eligible.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: permission_denied
code: missing_scope
message: '...'
request_id: req_0123456789abcdef01234567
'429':
description: 'Error. Codes: too_many_requests.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: rate_limited
code: too_many_requests
message: '...'
request_id: req_0123456789abcdef01234567
'500':
description: 'Error. Codes: internal_error.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: api_error
code: internal_error
message: '...'
request_id: req_0123456789abcdef01234567
/templates/{template_id}:
get:
operationId: getTemplate
tags:
- Templates
summary: Get a template
security:
- apiKey: []
x-required-scopes:
- templates:read
parameters:
- name: template_id
in: path
required: true
description: Template ID.
schema:
type: string
pattern: ^tpl_
example: tpl_6729c0a1b2c3d4e5f6a7b8c9
responses:
'200':
description: The template, with its latest version summary.
content:
application/json:
schema:
$ref: '#/components/schemas/Template'
example:
object: template
id: tpl_6729c0a1b2c3d4e5f6a7b8c9
name: Price drop
description: null
kind: static
engine: vidcanvas
availability: available
brand_id: null
formats:
feed_4x5:
width: 1080
height: 1350
label: Feed
latest_version:
id: tv_6729c0a1b2c3d4e5f6a7b8ca
version: 4
status: active
schema_hash: sha256:9f1c...
created_at: '2026-10-30T12:00:00.000Z'
created_at: '2026-10-01T09:00:00.000Z'
updated_at: '2026-10-30T12:00:00.000Z'
'401':
description: 'Error. Codes: invalid_api_key.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: authentication_failed
code: invalid_api_key
message: '...'
request_id: req_0123456789abcdef01234567
'403':
description: 'Error. Codes: missing_scope, plan_not_eligible.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: permission_denied
code: missing_scope
message: '...'
request_id: req_0123456789abcdef01234567
'404':
description: 'Error. Codes: template_not_found.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: not_found
code: template_not_found
message: '...'
request_id: req_0123456789abcdef01234567
'429':
description: 'Error. Codes: too_many_requests.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: rate_limited
code: too_many_requests
message: '...'
request_id: req_0123456789abcdef01234567
'500':
description: 'Error. Codes: internal_error.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: api_error
code: internal_error
message: '...'
request_id: req_0123456789abcdef01234567
/templates/{template_id}/versions:
get:
operationId: listTemplateVersions
tags:
- Templates
summary: List a template's versions
description: Newest first. Every publish that changes the template creates a version; compare schema_hash to spot input changes.
security:
- apiKey: []
x-required-scopes:
- templates:read
parameters:
- name: template_id
in: path
required: true
description: Template ID.
schema:
type: string
pattern: ^tpl_
example: tpl_6729c0a1b2c3d4e5f6a7b8c9
responses:
'200':
description: The versions.
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateVersionList'
'401':
description: 'Error. Codes: invalid_api_key.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: authentication_failed
code: invalid_api_key
message: '...'
request_id: req_0123456789abcdef01234567
'403':
description: 'Error. Codes: missing_scope, plan_not_eligible.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: permission_denied
code: missing_scope
message: '...'
request_id: req_0123456789abcdef01234567
'404':
description: 'Error. Codes: template_not_found.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: not_found
code: template_not_found
message: '...'
request_id: req_0123456789abcdef01234567
'429':
description: 'Error. Codes: too_many_requests.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: rate_limited
code: too_many_requests
message: '...'
request_id: req_0123456789abcdef01234567
'500':
description: 'Error. Codes: internal_error.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: api_error
code: internal_error
message: '...'
request_id: req_0123456789abcdef01234567
'503':
description: 'Error. Codes: versions_not_enabled.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: service_unavailable
code: versions_not_enabled
message: '...'
request_id: req_0123456789abcdef01234567
/templates/{template_id}/versions/{version}:
get:
operationId: getTemplateVersion
tags:
- Templates
summary: 'Get a version: formats, durations and fields'
security:
- apiKey: []
x-required-scopes:
- templates:read
parameters:
- name: template_id
in: path
required: true
description: Template ID.
schema:
type: string
pattern: ^tpl_
example: tpl_6729c0a1b2c3d4e5f6a7b8c9
- name: version
in: path
required: true
description: A version number, or "latest".
schema:
type: string
example: latest
responses:
'200':
description: The version.
content:
application/json:
schema:
$ref: '#/components/schemas/TemplateVersion'
'401':
description: 'Error. Codes: invalid_api_key.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: authentication_failed
code: invalid_api_key
message: '...'
request_id: req_0123456789abcdef01234567
'403':
description: 'Error. Codes: missing_scope, plan_not_eligible.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: permission_denied
code: missing_scope
message: '...'
request_id: req_0123456789abcdef01234567
'404':
description: 'Error. Codes: template_not_found, version_not_found.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: not_found
code: template_not_found
message: '...'
request_id: req_0123456789abcdef01234567
'429':
description: 'Error. Codes: too_many_requests.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: rate_limited
code: too_many_requests
message: '...'
request_id: req_0123456789abcdef01234567
'500':
description: 'Error. Codes: internal_error.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: api_error
code: internal_error
message: '...'
request_id: req_0123456789abcdef01234567
/templates/{template_id}/versions/{version}/schema:
get:
operationId: getTemplateVersionSchema
tags:
- Templates
summary: Get the JSON Schema for a version's render input
description: 'A JSON Schema (draft 2020-12) for the body of POST /renders: fields (with limits, options, colours and media inputs), outputs (formats, durations), variants. x-vidplate extensions describe sections, placeholders, presence rules and format sizes. The ETag is the schema hash.'
security:
- apiKey: []
x-required-scopes:
- templates:read
parameters:
- name: template_id
in: path
required: true
description: Template ID.
schema:
type: string
pattern: ^tpl_
example: tpl_6729c0a1b2c3d4e5f6a7b8c9
- name: version
in: path
required: true
description: A version number, or "latest".
schema:
type: string
example: latest
responses:
'200':
description: The JSON Schema.
content:
application/json:
schema:
type: object
'401':
description: 'Error. Codes: invalid_api_key.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: authentication_failed
code: invalid_api_key
message: '...'
request_id: req_0123456789abcdef01234567
'403':
description: 'Error. Codes: missing_scope, plan_not_eligible.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: permission_denied
code: missing_scope
message: '...'
request_id: req_0123456789abcdef01234567
'404':
description: 'Error. Codes: template_not_found, version_not_found.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: not_found
code: template_not_found
message: '...'
request_id: req_0123456789abcdef01234567
'429':
description: 'Error. Codes: too_many_requests.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: rate_limited
code: too_many_requests
message: '...'
request_id: req_0123456789abcdef01234567
'500':
description: 'Error. Codes: internal_error.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error:
type: api_error
code: internal_error
message: '...'
request_id: req_0123456789abcdef01234567
components:
schemas:
TemplateVersionList:
type: object
properties:
object:
const: list
data:
type: array
items:
$ref: '#/components/schemas/TemplateVersion'
has_more:
type: boolean
next_cursor:
type:
- string
- 'null'
TemplateList:
type: object
properties:
object:
const: list
data:
type: array
items:
$ref: '#/components/schemas/Template'
has_more:
type: boolean
next_cursor:
type:
- string
- 'null'
TemplateVersion:
type: object
properties:
object:
const: template_version
id:
type: string
template_id:
type: string
version:
type: integer
kind:
enum:
- static
- video
engine:
enum:
- vidcanvas
- vidmotion
status:
enum:
- active
- deprecated
- archived
schema_hash:
type: string
compatibility:
enum:
- initial
- compatible
- breaking
changes:
type: array
items:
type: object
properties:
code:
type: string
field:
type:
- string
- 'null'
breaking:
type: boolean
message:
type: string
requires:
type: object
properties:
webgpu:
type: boolean
formats:
type: object
durations_seconds:
type: array
items:
type: number
fields:
type: array
items:
type: string
required_fields:
type: array
items:
type: string
created_at:
type:
- string
- 'null'
Error:
type: object
required:
- error
properties:
error:
type: object
required:
- type
- code
- message
- request_id
properties:
type:
enum:
- invalid_request
- payment_required
- authentication_failed
- permission_denied
- not_found
- conflict
- unprocessable
- rate_limited
- api_error
- service_unavailable
code:
type: string
description: Stable, documented code.
message:
type: string
param:
type: string
description: The request field the error is about, when there is one.
errors:
type: array
description: Every problem found (schema_validation_failed).
items:
type: object
properties:
param:
type: string
code:
type: string
message:
type: string
request_id:
type: string
description: Quote this when asking for help.
Template:
type: object
properties:
object:
const: template
id:
type: string
name:
type: string
description:
type:
- string
- 'null'
kind:
enum:
- static
- video
engine:
enum:
- vidcanvas
- vidmotion
availability:
enum:
- available
- coming_soon
brand_id:
type:
- string
- 'null'
formats:
type: object
additionalProperties:
type: object
properties:
width:
type: integer
height:
type: integer
label:
type: string
latest_version:
anyOf:
- $ref: '#/components/schemas/VersionSummary'
- type: 'null'
created_at:
type:
- string
- 'null'
updated_at:
type:
- string
- 'null'
VersionSummary:
type: object
properties:
id:
type: string
version:
type: integer
status:
enum:
- active
- deprecated
- archived
schema_hash:
type: string
created_at:
type:
- string
- 'null'
TemplateFields:
type: object
required:
- object
- template_id
- template_code
- kind
- version
- fields
properties:
object:
const: template_fields
template_id:
type: string
template_code:
type: string
description: The existing 24-hex template code; the corresponding template_id has a tpl_ prefix.
kind:
enum:
- static
- video
engine:
enum:
- vidcanvas
- vidmotion
version:
type: integer
status:
enum:
- active
- deprecated
- archived
schema_hash:
type: string
fields:
type: array
items:
type: object
required:
- name
- type
- label
- required
- default
- constraints
properties:
name:
type: string
type:
type: string
label:
type: string
description:
type:
- string
- 'null'
required:
type: boolean
default:
description: Actual schema default, or null when none. Text placeholders are not defaults.
placeholder:
type:
- string
- 'null'
section:
type:
- string
- 'null'
constraints:
type: object
description: The selected version schema constraints, including max_length in Unicode code points, enum, pattern, format, and media mime_types/max_bytes/max_pixels/max_duration_seconds when applicable.
option_labels:
type: object
additionalProperties:
type: string
timestamp_seconds:
type: number
font_role:
type: string
brand_asset_role:
type: string
controls_presence_of:
type: array
items:
type: string
drops_layers_when_empty:
type: boolean
ai_credits:
type: boolean
securitySchemes:
apiKey:
type: http
scheme: bearer
bearerFormat: vpk_live_...
description: 'Workspace keys, created by workspace admins in VidPlate under Admin, then API. Scopes: templates:read (List templates, versions and their input schemas.); uploads:write (Upload images and video to use in renders.); renders:write (Create, cancel and retry renders.); renders:read (Check render status and download outputs.); webhooks:manage (Register and change webhook endpoints.); assets:read (Use Asset Library files as render inputs.); ai:spend (Allow renders that use AI voiceover or AI Recipes. These spend your AI credits.); render_nodes:read (See whether your render nodes are online, busy or offline, and what they can render.); storage_destinations:manage (Add, change, test and delete your own buckets that outputs are delivered to (Growth and above).)'