REST API reference
Generate and manage characters, assets, canvases, and hosted runtime versions. Expand an endpoint to see its request and response fields.
Production base: https://api.masko.ai/v1. The paths below already include /v1. Local development uses http://localhost:3000/api/v1.
This reference uses the repository’s generated OpenAPI specification. For deployed availability, read the live specification. Start with REST quickstart or authentication. Shared response envelopes and pagination are covered in requests and responses.
157 endpoints
GET/v1/applicationsList applications in the selected workspace
Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Success
application/json
dataarray · requiredNested fields
idstring · uuid · requirednamestring · requiredpublishable_keystring · requiredcreated_atstring · date-time · requiredorganization_idstring · uuid · nullable · required400 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited; Retry-After: 60
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "listApplications",
"summary": "List applications in the selected workspace",
"tags": [
"Applications"
],
"description": "Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"publishable_key": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
}
},
"required": [
"id",
"name",
"publishable_key",
"created_at",
"organization_id"
]
}
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Rate limited; Retry-After: 60",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"parameters": [
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}POST/v1/applicationsCreate an application and publishable key
Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
application/jsonnamestring · requiredLength: 1 to 100 characters
Responses
201 Success
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requiredpublishable_keystring · requiredcreated_atstring · date-time · requiredorganization_idstring · uuid · nullable · required400 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited; Retry-After: 60
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createApplication",
"summary": "Create an application and publishable key",
"tags": [
"Applications"
],
"description": "Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"name"
],
"additionalProperties": false
}
}
}
},
"responses": {
"201": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"publishable_key": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
}
},
"required": [
"id",
"name",
"publishable_key",
"created_at",
"organization_id"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Rate limited; Retry-After: 60",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}GET/v1/applications/{id}Read application keys
Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Success
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requiredpublishable_keystring · requiredcreated_atstring · date-time · requiredorganization_idstring · uuid · nullable · requiredkeysarray · requiredNested fields
idstring · uuid · requiredkey_prefixstring · requiredcreated_atstring · date-time · required400 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited; Retry-After: 60
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getApplication",
"summary": "Read application keys",
"tags": [
"Applications"
],
"description": "Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"publishable_key": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"keys": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"key_prefix": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
}
},
"required": [
"id",
"key_prefix",
"created_at"
]
}
}
},
"required": [
"id",
"name",
"publishable_key",
"created_at",
"organization_id",
"keys"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Rate limited; Retry-After: 60",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
}
}POST/v1/applications/{id}/keysCreate a backend secret, returned only once
Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
application/jsonResponses
201 Success
application/json
dataobject · requiredNested fields
idstring · uuid · requiredkey_prefixstring · requiredcreated_atstring · date-time · requiredsecret_keystring · required400 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited; Retry-After: 60
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request denied or unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createApplicationKey",
"summary": "Create a backend secret, returned only once",
"tags": [
"Applications"
],
"description": "Responses use Cache-Control: no-store. Application management requires the personal owner or workspace owner/admin. Existing application identities and credentials are preserved. Character playback issuance has been retired; use a backend REST key to retrieve signed canvas release delivery.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {},
"additionalProperties": false
}
}
}
},
"responses": {
"201": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"key_prefix": {
"type": "string"
},
"created_at": {
"type": "string",
"format": "date-time"
},
"secret_key": {
"type": "string"
}
},
"required": [
"id",
"key_prefix",
"created_at",
"secret_key"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Rate limited; Retry-After: 60",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Request denied or unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
}
}GET/v1/canvasesList independently owned project canvases
Lists the canvases of one project, newest first. project_id is required. Without limit, offset or cursor every canvas is returned; with them, results are paged like other lists.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
project_idquery · requiredstring
Responses
200 Successful response
application/json
dataarray · requiredNested fields
objectstring · requiredValues: "canvas"
idstring · uuid · requiredproject_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullable · requirednamestring · requiredgraphobject · nullable · requiredgraph_content_hashstring · requiredcreated_atstring · nullable · requiredupdated_atstring · nullable · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "listProjectCanvases",
"tags": [
"Canvases"
],
"summary": "List independently owned project canvases",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "project_id",
"in": "query"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"object": {
"type": "string",
"enum": [
"canvas"
]
},
"id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"mascot_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"nullable": true,
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_at": {
"type": "string",
"nullable": true
},
"updated_at": {
"type": "string",
"nullable": true
}
},
"required": [
"object",
"id",
"project_id",
"mascot_id",
"name",
"graph",
"graph_content_hash",
"created_at",
"updated_at"
]
}
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Lists the canvases of one project, newest first. `project_id` is required. Without `limit`, `offset` or `cursor` every canvas is returned; with them, results are paged like other lists.",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvasesCreate a project canvas with an initial mascot reference
Creates an empty draft canvas in a project, bound to a mascot you own or acquired from Marketplace. Send project_id, mascot_id and name; optional variant_id selects the appearance. Save the graph next with PATCH /v1/canvases/{canvasId}.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonproject_idstring · uuid · requiredmascot_idstring · uuid · requirednamestring · requiredLength: 1 to 120 characters
variant_idstring · uuidResponses
201 Successful response
application/json
dataobject · requiredNested fields
objectstring · requiredValues: "canvas"
idstring · uuid · requiredproject_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullable · requirednamestring · requiredgraphobject · nullable · requiredgraph_content_hashstring · requiredcreated_atstring · nullable · requiredupdated_atstring · nullable · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createProjectCanvas",
"tags": [
"Canvases"
],
"summary": "Create a project canvas with an initial mascot reference",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"project_id": {
"type": "string",
"format": "uuid"
},
"mascot_id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"variant_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"project_id",
"mascot_id",
"name"
],
"additionalProperties": false
}
}
}
},
"responses": {
"201": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"object": {
"type": "string",
"enum": [
"canvas"
]
},
"id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"mascot_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"nullable": true,
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_at": {
"type": "string",
"nullable": true
},
"updated_at": {
"type": "string",
"nullable": true
}
},
"required": [
"object",
"id",
"project_id",
"mascot_id",
"name",
"graph",
"graph_content_hash",
"created_at",
"updated_at"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Creates an empty draft canvas in a project, bound to a mascot you own or acquired from Marketplace. Send `project_id`, `mascot_id` and `name`; optional `variant_id` selects the appearance. Save the graph next with `PATCH /v1/canvases/{canvasId}`.",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"x-masko-api-version": "2026-09-26"
}GET/v1/canvases/{canvasId}Read a canvas by its own project access
Returns the canvas draft: graph and its revision graph_content_hash. Send that hash as expected_graph_hash when you save. For generation progress use GET /v1/canvases/{canvasId}/status.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Responses
200 Successful response
application/json
dataobject · requiredNested fields
objectstring · requiredValues: "canvas"
idstring · uuid · requiredproject_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullable · requirednamestring · requiredgraphobject · nullable · requiredgraph_content_hashstring · requiredcreated_atstring · nullable · requiredupdated_atstring · nullable · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getProjectCanvas",
"tags": [
"Canvases"
],
"summary": "Read a canvas by its own project access",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"object": {
"type": "string",
"enum": [
"canvas"
]
},
"id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"mascot_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"nullable": true,
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_at": {
"type": "string",
"nullable": true
},
"updated_at": {
"type": "string",
"nullable": true
}
},
"required": [
"object",
"id",
"project_id",
"mascot_id",
"name",
"graph",
"graph_content_hash",
"created_at",
"updated_at"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Returns the canvas draft: `graph` and its revision `graph_content_hash`. Send that hash as `expected_graph_hash` when you save. For generation progress use `GET /v1/canvases/{canvasId}/status`.",
"x-masko-api-version": "2026-09-26"
}PATCH/v1/canvases/{canvasId}Save a draft with optimistic concurrency
Replaces the whole graph. Send the latest graph_content_hash as expected_graph_hash; if the canvas changed since you read it, the request returns 409 and you should read it again.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Request body
application/jsongraphobject · requiredexpected_graph_hashstring · requiredLength: 1 to unbounded characters
Responses
200 Successful response
application/json
dataobject · requiredNested fields
objectstring · requiredValues: "canvas"
idstring · uuid · requiredproject_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullable · requirednamestring · requiredgraphobject · nullable · requiredgraph_content_hashstring · requiredcreated_atstring · nullable · requiredupdated_atstring · nullable · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "updateProjectCanvas",
"tags": [
"Canvases"
],
"summary": "Save a draft with optimistic concurrency",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"graph": {
"type": "object",
"additionalProperties": {
"nullable": true
}
},
"expected_graph_hash": {
"type": "string",
"minLength": 1
}
},
"required": [
"graph",
"expected_graph_hash"
],
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"object": {
"type": "string",
"enum": [
"canvas"
]
},
"id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"mascot_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"nullable": true,
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_at": {
"type": "string",
"nullable": true
},
"updated_at": {
"type": "string",
"nullable": true
}
},
"required": [
"object",
"id",
"project_id",
"mascot_id",
"name",
"graph",
"graph_content_hash",
"created_at",
"updated_at"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Replaces the whole graph. Send the latest `graph_content_hash` as `expected_graph_hash`; if the canvas changed since you read it, the request returns 409 and you should read it again.",
"x-masko-api-version": "2026-09-26"
}DELETE/v1/canvases/{canvasId}Delete a canvas without retained history
Deletes a canvas that has no saved checkpoints or releases. A canvas with history returns 409.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Responses
204 Deleted
400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "deleteProjectCanvas",
"tags": [
"Canvases"
],
"summary": "Delete a canvas without retained history",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"204": {
"description": "Deleted",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Deletes a canvas that has no saved checkpoints or releases. A canvas with history returns 409.",
"x-masko-api-version": "2026-09-26"
}GET/v1/canvases/{canvasId}/statusRead canvas generation progress
Generation progress for a canvas. Poll it every 15 to 30 seconds after POST /v1/canvases/{canvasId}/generate-all. Read-only keys can call it, and it never changes the canvas. status.generation.nodes and status.generation.edges count total, completed, pending and failed parts. Pending means neither finished nor failed. Stop polling when status.generation.ready is true: every node image and edge video exists. The canvas plays in the editor once status.preview.ready is also true. If status.preview.waiting_edges is above 0, keep polling because derivatives are still being prepared. If status.preview.repairable is true, call POST /v1/canvases/{canvasId}/repair with dry_run: true first. If any failed count is above 0, read status.failed_nodes and status.failed_edges. Each entry has the part id, its job_id and a customer-safe error. A retry is a new paid attempt, so ask before retrying. Returns 409 when the canvas has no mascot generation context.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Responses
200 Successful response
application/json
dataobject · requiredNested fields
objectstring · requiredValues: "canvas_status"
canvas_idstring · uuid · requiredgraph_content_hashstring · requiredstatusobject · requiredNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
string · webm, hevc
failed_nodesarray · requiredNested fields
node_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requiredfailed_edgesarray · requiredNested fields
edge_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requirededge_mediaarrayNested fields
edge_idstring · requiredsourcestring · requiredtargetstring · requiredvideo_asset_idstring · uuid · nullable · requiredreuses_edge_idstringbaseobject · requiredNested fields
video_readyboolean · requiredwebm_readyboolean · requiredhevc_readyboolean · requiredpreview_readyboolean · requiredderivatives_in_flightboolean · requiredsource_job_idstring · uuidsource_job_statusstringmissingarray · requiredNested fields
string · webm, hevc
variantsobject · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getProjectCanvasStatus",
"tags": [
"Canvases"
],
"summary": "Read canvas generation progress",
"description": "Generation progress for a canvas. Poll it every 15 to 30 seconds after `POST /v1/canvases/{canvasId}/generate-all`. Read-only keys can call it, and it never changes the canvas. `status.generation.nodes` and `status.generation.edges` count total, completed, pending and failed parts. Pending means neither finished nor failed. Stop polling when `status.generation.ready` is true: every node image and edge video exists. The canvas plays in the editor once `status.preview.ready` is also true. If `status.preview.waiting_edges` is above 0, keep polling because derivatives are still being prepared. If `status.preview.repairable` is true, call `POST /v1/canvases/{canvasId}/repair` with `dry_run: true` first. If any `failed` count is above 0, read `status.failed_nodes` and `status.failed_edges`. Each entry has the part id, its `job_id` and a customer-safe `error`. A retry is a new paid attempt, so ask before retrying. Returns 409 when the canvas has no mascot generation context.",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"object": {
"type": "string",
"enum": [
"canvas_status"
]
},
"canvas_id": {
"type": "string",
"format": "uuid"
},
"graph_content_hash": {
"type": "string"
},
"status": {
"type": "object",
"properties": {
"generation": {
"type": "object",
"properties": {
"ready": {
"type": "boolean"
},
"nodes": {
"type": "object",
"properties": {
"total": {
"type": "number"
},
"completed": {
"type": "number"
},
"pending": {
"type": "number",
"description": "Incomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset."
},
"failed": {
"type": "number"
}
},
"required": [
"total",
"completed",
"pending",
"failed"
]
},
"edges": {
"type": "object",
"properties": {
"total": {
"type": "number"
},
"completed": {
"type": "number"
},
"pending": {
"type": "number"
},
"failed": {
"type": "number"
}
},
"required": [
"total",
"completed",
"pending",
"failed"
]
}
},
"required": [
"ready",
"nodes",
"edges"
]
},
"preview": {
"type": "object",
"properties": {
"ready": {
"type": "boolean"
},
"repairable": {
"type": "boolean"
},
"repairable_edges": {
"type": "number"
},
"waiting_edges": {
"type": "number"
},
"missing_edges": {
"type": "number"
},
"missing_formats": {
"type": "array",
"items": {
"type": "string",
"enum": [
"webm",
"hevc"
]
}
}
},
"required": [
"ready",
"repairable",
"repairable_edges",
"waiting_edges",
"missing_edges",
"missing_formats"
]
},
"variants": {
"type": "object",
"properties": {
"sizes": {
"type": "array",
"items": {
"type": "string"
}
},
"missing": {
"type": "array",
"items": {
"type": "object",
"properties": {
"edge_id": {
"type": "string"
},
"size": {
"type": "string"
},
"formats": {
"type": "array",
"items": {
"type": "string",
"enum": [
"webm",
"hevc"
]
}
}
},
"required": [
"edge_id",
"size",
"formats"
]
}
}
},
"required": [
"sizes",
"missing"
]
},
"failed_nodes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"node_id": {
"type": "string"
},
"job_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"error": {
"type": "string"
}
},
"required": [
"node_id",
"job_id",
"error"
]
}
},
"failed_edges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"edge_id": {
"type": "string"
},
"job_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"error": {
"type": "string"
}
},
"required": [
"edge_id",
"job_id",
"error"
]
}
},
"edge_media": {
"type": "array",
"items": {
"type": "object",
"properties": {
"edge_id": {
"type": "string"
},
"source": {
"type": "string"
},
"target": {
"type": "string"
},
"video_asset_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"reuses_edge_id": {
"type": "string"
},
"base": {
"type": "object",
"properties": {
"video_ready": {
"type": "boolean"
},
"webm_ready": {
"type": "boolean"
},
"hevc_ready": {
"type": "boolean"
},
"preview_ready": {
"type": "boolean"
},
"derivatives_in_flight": {
"type": "boolean"
},
"source_job_id": {
"type": "string",
"format": "uuid"
},
"source_job_status": {
"type": "string"
},
"missing": {
"type": "array",
"items": {
"type": "string",
"enum": [
"webm",
"hevc"
]
}
}
},
"required": [
"video_ready",
"webm_ready",
"hevc_ready",
"preview_ready",
"derivatives_in_flight",
"missing"
]
},
"variants": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"webm_ready": {
"type": "boolean"
},
"hevc_ready": {
"type": "boolean"
},
"missing": {
"type": "array",
"items": {
"type": "string",
"enum": [
"webm",
"hevc"
]
}
}
},
"required": [
"webm_ready",
"hevc_ready",
"missing"
]
}
}
},
"required": [
"edge_id",
"source",
"target",
"video_asset_id",
"base",
"variants"
]
}
}
},
"required": [
"generation",
"preview",
"variants",
"failed_nodes",
"failed_edges"
]
}
},
"required": [
"object",
"canvas_id",
"graph_content_hash",
"status"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}GET/v1/canvases/{canvasId}/historyRead draft, named checkpoints and immutable releases
Returns the current draft, named checkpoints and immutable releases of a canvas.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Responses
200 Successful response
application/json
dataobject · requiredNested fields
draftobject · requiredNested fields
objectstring · requiredValues: "canvas"
idstring · uuid · requiredproject_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullable · requirednamestring · requiredgraphobject · nullable · requiredgraph_content_hashstring · requiredcreated_atstring · nullable · requiredupdated_atstring · nullable · requiredcheckpointsarray · requiredNested fields
idstring · uuid · requiredcanvas_idstring · uuid · requirednamestring · requiredgraphobject · requiredgraph_content_hashstring · requiredcreated_bystring · uuid · requiredcreated_atstring · requiredreleasesarray · requiredNested fields
idstring · uuid · requiredcanvas_idstring · uuid · requirednumberinteger · requirednotesstring · requiredmascot_version_idstring · uuid · requiredcreated_bystring · uuid · requiredcreated_atstring · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getCanvasHistory",
"tags": [
"Canvases"
],
"summary": "Read draft, named checkpoints and immutable releases",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"draft": {
"type": "object",
"properties": {
"object": {
"type": "string",
"enum": [
"canvas"
]
},
"id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"mascot_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"nullable": true,
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_at": {
"type": "string",
"nullable": true
},
"updated_at": {
"type": "string",
"nullable": true
}
},
"required": [
"object",
"id",
"project_id",
"mascot_id",
"name",
"graph",
"graph_content_hash",
"created_at",
"updated_at"
]
},
"checkpoints": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"canvas_id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_by": {
"type": "string",
"format": "uuid"
},
"created_at": {
"type": "string"
}
},
"required": [
"id",
"canvas_id",
"name",
"graph",
"graph_content_hash",
"created_by",
"created_at"
]
}
},
"releases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"canvas_id": {
"type": "string",
"format": "uuid"
},
"number": {
"type": "integer"
},
"notes": {
"type": "string"
},
"mascot_version_id": {
"type": "string",
"format": "uuid"
},
"created_by": {
"type": "string",
"format": "uuid"
},
"created_at": {
"type": "string"
}
},
"required": [
"id",
"canvas_id",
"number",
"notes",
"mascot_version_id",
"created_by",
"created_at"
],
"additionalProperties": {
"nullable": true
}
}
}
},
"required": [
"draft",
"checkpoints",
"releases"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Returns the current draft, named checkpoints and immutable releases of a canvas.",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/historySave a checkpoint, restore as draft, or create a release
Restore atomically checkpoints current work first. No generation is run. A release requires complete media and does not activate Desktop or publish a listing.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonOption 1
actionstring · requiredValues: "checkpoint"
namestring · requiredLength: 1 to 120 characters
expected_graph_hashstring · requiredLength: 1 to unbounded characters
Option 2
actionstring · requiredValues: "restore"
checkpoint_idstring · uuid · requiredexpected_graph_hashstring · requiredLength: 1 to unbounded characters
Option 3
actionstring · requiredValues: "restore_release"
release_idstring · uuid · requiredexpected_graph_hashstring · requiredLength: 1 to unbounded characters
Option 4
actionstring · requiredValues: "copy_release"
release_idstring · uuid · requirednamestring · requiredLength: 1 to 120 characters
expected_graph_hashstring · requiredLength: 1 to unbounded characters
Option 5
actionstring · requiredValues: "release"
notesstringDefault: ""
Length: 0 to 4000 characters
operation_idstring · uuid · requiredexpected_graph_hashstring · requiredLength: 1 to unbounded characters
Responses
200 Successful response
application/json
dataobject · requiredNested fields
Option 1
idstring · uuid · requiredcanvas_idstring · uuid · requirednamestring · requiredgraphobject · requiredgraph_content_hashstring · requiredcreated_bystring · uuid · requiredcreated_atstring · requiredOption 2
idstring · uuid · requiredcanvas_idstring · uuid · requirednumberinteger · requirednotesstring · requiredmascot_version_idstring · uuid · requiredcreated_bystring · uuid · requiredcreated_atstring · requiredOption 3
objectstring · requiredValues: "canvas"
idstring · uuid · requiredproject_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullable · requirednamestring · requiredgraphobject · nullable · requiredgraph_content_hashstring · requiredcreated_atstring · nullable · requiredupdated_atstring · nullable · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "changeCanvasHistory",
"tags": [
"Canvases"
],
"summary": "Save a checkpoint, restore as draft, or create a release",
"description": "Restore atomically checkpoints current work first. No generation is run. A release requires complete media and does not activate Desktop or publish a listing.",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"checkpoint"
]
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"expected_graph_hash": {
"type": "string",
"minLength": 1
}
},
"required": [
"action",
"name",
"expected_graph_hash"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"restore"
]
},
"checkpoint_id": {
"type": "string",
"format": "uuid"
},
"expected_graph_hash": {
"type": "string",
"minLength": 1
}
},
"required": [
"action",
"checkpoint_id",
"expected_graph_hash"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"restore_release"
]
},
"release_id": {
"type": "string",
"format": "uuid"
},
"expected_graph_hash": {
"type": "string",
"minLength": 1
}
},
"required": [
"action",
"release_id",
"expected_graph_hash"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"copy_release"
]
},
"release_id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"expected_graph_hash": {
"type": "string",
"minLength": 1
}
},
"required": [
"action",
"release_id",
"name",
"expected_graph_hash"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"release"
]
},
"notes": {
"type": "string",
"maxLength": 4000,
"default": ""
},
"operation_id": {
"type": "string",
"format": "uuid"
},
"expected_graph_hash": {
"type": "string",
"minLength": 1
}
},
"required": [
"action",
"operation_id",
"expected_graph_hash"
],
"additionalProperties": false
}
]
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"anyOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"canvas_id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_by": {
"type": "string",
"format": "uuid"
},
"created_at": {
"type": "string"
}
},
"required": [
"id",
"canvas_id",
"name",
"graph",
"graph_content_hash",
"created_by",
"created_at"
]
},
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"canvas_id": {
"type": "string",
"format": "uuid"
},
"number": {
"type": "integer"
},
"notes": {
"type": "string"
},
"mascot_version_id": {
"type": "string",
"format": "uuid"
},
"created_by": {
"type": "string",
"format": "uuid"
},
"created_at": {
"type": "string"
}
},
"required": [
"id",
"canvas_id",
"number",
"notes",
"mascot_version_id",
"created_by",
"created_at"
],
"additionalProperties": {
"nullable": true
}
},
{
"type": "object",
"properties": {
"object": {
"type": "string",
"enum": [
"canvas"
]
},
"id": {
"type": "string",
"format": "uuid"
},
"project_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"mascot_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"name": {
"type": "string"
},
"graph": {
"type": "object",
"nullable": true,
"additionalProperties": {
"nullable": true
}
},
"graph_content_hash": {
"type": "string"
},
"created_at": {
"type": "string",
"nullable": true
},
"updated_at": {
"type": "string",
"nullable": true
}
},
"required": [
"object",
"id",
"project_id",
"mascot_id",
"name",
"graph",
"graph_content_hash",
"created_at",
"updated_at"
]
}
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/publicationRead selected customer publication and review status
Customer publication is separate from CDN hosting. GET state is null until action:start. state.visibility (unpublished/published/archived) is independent of state.changes_status (draft/pending/approved/rejected). save_draft requires the current draft_id and accepts incomplete listing details. Preview and submit require an editable draft; all submissions, including admin submissions, enter pending review. The project workspace owns the seller identity. GET includes seller with exactly one of user_id or organization_id and can_publish (whether this viewer may manage publication). Team owners/admins manage publishing; submission also retains the existing creator eligibility requirement. A team listing uses the team profile and credits earnings to the team wallet. The submitting member is recorded separately. Marketplace submissions require a handle on the selling workspace profile. Approval and restore enforce this rule, and a creator cannot make their profile private or unlisted while a library is published. Pending changes leave approved media, price and description unchanged. Approval atomically replaces the selected content; rejection preserves the draft and approved version. archive stops new acquisition; restore republishes only the approved version. Archiving during review prevents approval from making the listing visible. Submitting while archived requests publication after approval. remove stages a draft change and never modifies the live listing directly. Existing buyers retain acquired content. Preview returns plan_id, valid for ten minutes. Submit requires that plan and fails with 409 if source context or dependencies changed. Review uses the frozen submission. Removing discovery preserves retained uses. Marketplace offers require at least one generated image on the mascot and a selection containing at least one image and five animations. Optional offer.cover_asset_id selects an included gallery image as the listing thumbnail; videos and exports are rejected. If omitted, an included generated image is preferred automatically, otherwise the first included image. Include at least one image. The mascot name is frozen at submission and changes publicly only after approval; display names need not be unique. Delivery formats are grouped under gallery assets; GET includes signed transparent_url, webm_url and hevc_url when available, plus has_generated_image.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 Successful response
application/json
dataobject · requiredNested fields
ownerboolean · requiredValues: true
sellerobject · requiredNested fields
Option 1
user_idstring · uuid · requiredorganization_idobject · nullable · requiredcan_publishboolean · requiredOption 2
user_idobject · nullable · requiredorganization_idstring · uuid · requiredcan_publishboolean · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getMascotPublication",
"tags": [
"Mascots"
],
"summary": "Read selected customer publication and review status",
"description": "Customer publication is separate from CDN hosting. GET state is null until action:start. state.visibility (unpublished/published/archived) is independent of state.changes_status (draft/pending/approved/rejected). save_draft requires the current draft_id and accepts incomplete listing details. Preview and submit require an editable draft; all submissions, including admin submissions, enter pending review. The project workspace owns the seller identity. GET includes seller with exactly one of user_id or organization_id and can_publish (whether this viewer may manage publication). Team owners/admins manage publishing; submission also retains the existing creator eligibility requirement. A team listing uses the team profile and credits earnings to the team wallet. The submitting member is recorded separately. Marketplace submissions require a handle on the selling workspace profile. Approval and restore enforce this rule, and a creator cannot make their profile private or unlisted while a library is published. Pending changes leave approved media, price and description unchanged. Approval atomically replaces the selected content; rejection preserves the draft and approved version. archive stops new acquisition; restore republishes only the approved version. Archiving during review prevents approval from making the listing visible. Submitting while archived requests publication after approval. remove stages a draft change and never modifies the live listing directly. Existing buyers retain acquired content. Preview returns plan_id, valid for ten minutes. Submit requires that plan and fails with 409 if source context or dependencies changed. Review uses the frozen submission. Removing discovery preserves retained uses. Marketplace offers require at least one generated image on the mascot and a selection containing at least one image and five animations. Optional offer.cover_asset_id selects an included gallery image as the listing thumbnail; videos and exports are rejected. If omitted, an included generated image is preferred automatically, otherwise the first included image. Include at least one image. The mascot name is frozen at submission and changes publicly only after approval; display names need not be unique. Delivery formats are grouped under gallery assets; GET includes signed transparent_url, webm_url and hevc_url when available, plus has_generated_image.",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"owner": {
"type": "boolean",
"enum": [
true
]
},
"seller": {
"anyOf": [
{
"type": "object",
"properties": {
"user_id": {
"type": "string",
"format": "uuid"
},
"organization_id": {
"nullable": true
},
"can_publish": {
"type": "boolean"
}
},
"required": [
"user_id",
"organization_id",
"can_publish"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"user_id": {
"nullable": true
},
"organization_id": {
"type": "string",
"format": "uuid"
},
"can_publish": {
"type": "boolean"
}
},
"required": [
"user_id",
"organization_id",
"can_publish"
],
"additionalProperties": false
}
]
}
},
"required": [
"owner",
"seller"
],
"additionalProperties": {
"nullable": true
}
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/publicationStart, edit, review, archive or restore a mascot listing
Customer publication is separate from CDN hosting. GET state is null until action:start. state.visibility (unpublished/published/archived) is independent of state.changes_status (draft/pending/approved/rejected). save_draft requires the current draft_id and accepts incomplete listing details. Preview and submit require an editable draft; all submissions, including admin submissions, enter pending review. The project workspace owns the seller identity. GET includes seller with exactly one of user_id or organization_id and can_publish (whether this viewer may manage publication). Team owners/admins manage publishing; submission also retains the existing creator eligibility requirement. A team listing uses the team profile and credits earnings to the team wallet. The submitting member is recorded separately. Marketplace submissions require a handle on the selling workspace profile. Approval and restore enforce this rule, and a creator cannot make their profile private or unlisted while a library is published. Pending changes leave approved media, price and description unchanged. Approval atomically replaces the selected content; rejection preserves the draft and approved version. archive stops new acquisition; restore republishes only the approved version. Archiving during review prevents approval from making the listing visible. Submitting while archived requests publication after approval. remove stages a draft change and never modifies the live listing directly. Existing buyers retain acquired content. Preview returns plan_id, valid for ten minutes. Submit requires that plan and fails with 409 if source context or dependencies changed. Review uses the frozen submission. Removing discovery preserves retained uses. Marketplace offers require at least one generated image on the mascot and a selection containing at least one image and five animations. Optional offer.cover_asset_id selects an included gallery image as the listing thumbnail; videos and exports are rejected. If omitted, an included generated image is preferred automatically, otherwise the first included image. Include at least one image. The mascot name is frozen at submission and changes publicly only after approval; display names need not be unique. Delivery formats are grouped under gallery assets; GET includes signed transparent_url, webm_url and hevc_url when available, plus has_generated_image.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonOption 1
actionstring · requiredValues: "start"
Option 2
actionstring · requiredValues: "save_draft"
draft_idstring · uuid · requiredselectionobject · requiredNested fields
asset_idsarray · requiredItems: 0 to 500
Nested fields
string
identity_idsarray · requiredItems: 0 to 100
Nested fields
string
asset_identity_idsobjectofferobjectNested fields
cover_asset_idstring · uuidIncluded image used as the listing thumbnail; animations and exports are not supported.
price_creditsinteger · requiredRange: 0 to 100000
descriptionstring · requiredLength: 0 to 2000 characters
accept_creator_termsbooleanOption 3
actionstring · requiredValues: "archive"
Option 4
actionstring · requiredValues: "restore"
Option 5
actionstring · requiredValues: "withdraw"
Option 6
actionstring · requiredValues: "preview"
selectionobject · requiredNested fields
asset_idsarray · requiredItems: 0 to 500
Nested fields
string
identity_idsarray · requiredItems: 0 to 100
Nested fields
string
asset_identity_idsobjectofferobjectNested fields
cover_asset_idstring · uuidIncluded image used as the listing thumbnail; animations and exports are not supported.
price_creditsinteger · requiredRange: 0 to 100000
descriptionstringLength: 0 to 2000 characters
accept_creator_termsboolean · requiredValues: true
Option 7
actionstring · requiredValues: "submit"
selectionobject · requiredNested fields
asset_idsarray · requiredItems: 0 to 500
Nested fields
string
identity_idsarray · requiredItems: 0 to 100
Nested fields
string
asset_identity_idsobjectofferobjectNested fields
cover_asset_idstring · uuidIncluded image used as the listing thumbnail; animations and exports are not supported.
price_creditsinteger · requiredRange: 0 to 100000
descriptionstringLength: 0 to 2000 characters
accept_creator_termsboolean · requiredValues: true
plan_idstring · uuid · requiredOption 8
actionstring · requiredValues: "remove"
kindstring · requiredValues: "identity", "asset"
resource_idstring · requiredLength: 1 to unbounded characters
Option 9
actionstring · requiredValues: "duplicate"
variantobject · requiredNested fields
identity_idstring · requiredLength: 1 to unbounded characters
project_idstring · uuid · requirednamestring · requiredLength: 1 to 100 characters
Responses
200 Successful response
application/json
dataobject · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "changeMascotPublication",
"tags": [
"Mascots"
],
"summary": "Start, edit, review, archive or restore a mascot listing",
"description": "Customer publication is separate from CDN hosting. GET state is null until action:start. state.visibility (unpublished/published/archived) is independent of state.changes_status (draft/pending/approved/rejected). save_draft requires the current draft_id and accepts incomplete listing details. Preview and submit require an editable draft; all submissions, including admin submissions, enter pending review. The project workspace owns the seller identity. GET includes seller with exactly one of user_id or organization_id and can_publish (whether this viewer may manage publication). Team owners/admins manage publishing; submission also retains the existing creator eligibility requirement. A team listing uses the team profile and credits earnings to the team wallet. The submitting member is recorded separately. Marketplace submissions require a handle on the selling workspace profile. Approval and restore enforce this rule, and a creator cannot make their profile private or unlisted while a library is published. Pending changes leave approved media, price and description unchanged. Approval atomically replaces the selected content; rejection preserves the draft and approved version. archive stops new acquisition; restore republishes only the approved version. Archiving during review prevents approval from making the listing visible. Submitting while archived requests publication after approval. remove stages a draft change and never modifies the live listing directly. Existing buyers retain acquired content. Preview returns plan_id, valid for ten minutes. Submit requires that plan and fails with 409 if source context or dependencies changed. Review uses the frozen submission. Removing discovery preserves retained uses. Marketplace offers require at least one generated image on the mascot and a selection containing at least one image and five animations. Optional offer.cover_asset_id selects an included gallery image as the listing thumbnail; videos and exports are rejected. If omitted, an included generated image is preferred automatically, otherwise the first included image. Include at least one image. The mascot name is frozen at submission and changes publicly only after approval; display names need not be unique. Delivery formats are grouped under gallery assets; GET includes signed transparent_url, webm_url and hevc_url when available, plus has_generated_image.",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"start"
]
}
},
"required": [
"action"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"save_draft"
]
},
"draft_id": {
"type": "string",
"format": "uuid"
},
"selection": {
"type": "object",
"properties": {
"asset_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"maxItems": 500
},
"identity_ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 100
},
"asset_identity_ids": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"maxItems": 2
}
},
"offer": {
"type": "object",
"properties": {
"cover_asset_id": {
"type": "string",
"format": "uuid",
"description": "Included image used as the listing thumbnail; animations and exports are not supported."
},
"price_credits": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"description": {
"type": "string",
"maxLength": 2000
},
"accept_creator_terms": {
"type": "boolean"
}
},
"required": [
"price_credits",
"description"
],
"additionalProperties": false
}
},
"required": [
"asset_ids",
"identity_ids"
],
"additionalProperties": false
}
},
"required": [
"action",
"draft_id",
"selection"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"archive"
]
}
},
"required": [
"action"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"restore"
]
}
},
"required": [
"action"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"withdraw"
]
}
},
"required": [
"action"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"preview"
]
},
"selection": {
"type": "object",
"properties": {
"asset_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"maxItems": 500
},
"identity_ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 100
},
"asset_identity_ids": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"maxItems": 2
}
},
"offer": {
"type": "object",
"properties": {
"cover_asset_id": {
"type": "string",
"format": "uuid",
"description": "Included image used as the listing thumbnail; animations and exports are not supported."
},
"price_credits": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"description": {
"type": "string",
"maxLength": 2000
},
"accept_creator_terms": {
"type": "boolean",
"enum": [
true
]
}
},
"required": [
"price_credits",
"accept_creator_terms"
],
"additionalProperties": false
}
},
"required": [
"asset_ids",
"identity_ids"
],
"additionalProperties": false
}
},
"required": [
"action",
"selection"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"submit"
]
},
"selection": {
"type": "object",
"properties": {
"asset_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid"
},
"maxItems": 500
},
"identity_ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 100
},
"asset_identity_ids": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"maxItems": 2
}
},
"offer": {
"type": "object",
"properties": {
"cover_asset_id": {
"type": "string",
"format": "uuid",
"description": "Included image used as the listing thumbnail; animations and exports are not supported."
},
"price_credits": {
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"description": {
"type": "string",
"maxLength": 2000
},
"accept_creator_terms": {
"type": "boolean",
"enum": [
true
]
}
},
"required": [
"price_credits",
"accept_creator_terms"
],
"additionalProperties": false
}
},
"required": [
"asset_ids",
"identity_ids"
],
"additionalProperties": false
},
"plan_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"action",
"selection",
"plan_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"remove"
]
},
"kind": {
"type": "string",
"enum": [
"identity",
"asset"
]
},
"resource_id": {
"type": "string",
"minLength": 1
}
},
"required": [
"action",
"kind",
"resource_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"duplicate"
]
},
"variant": {
"type": "object",
"properties": {
"identity_id": {
"type": "string",
"minLength": 1
},
"project_id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"identity_id",
"project_id",
"name"
],
"additionalProperties": false
}
},
"required": [
"action",
"variant"
],
"additionalProperties": false
}
]
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"additionalProperties": {
"nullable": true
}
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/variants/duplicateCopy Original or a variant without generation or a canvas
Copies the Original appearance or a variant into a new variant without generating anything and without a canvas.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonidentity_idstring · requiredLength: 1 to unbounded characters
project_idstring · uuid · requirednamestring · requiredLength: 1 to 80 characters
Responses
200 Successful response
application/json
dataobject · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "duplicateMascotIdentity",
"tags": [
"Mascots"
],
"summary": "Copy Original or a variant without generation or a canvas",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"identity_id": {
"type": "string",
"minLength": 1
},
"project_id": {
"type": "string",
"format": "uuid"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"required": [
"identity_id",
"project_id",
"name"
],
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"additionalProperties": {
"nullable": true
}
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Copies the Original appearance or a variant into a new variant without generating anything and without a canvas.",
"x-masko-api-version": "2026-09-26"
}GET/v1/canvases/{canvasId}/releases/{releaseId}/deliveryGet signed playback media for one immutable release
Call from your backend with its API key and forward only delivery to website visitors. This response contains no authoring credentials, generation context or private identity references. Creating a release does not activate it.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
releaseIdpath · requiredstring
targetquerystring · web, desktop
Responses
200 Successful response
application/json
dataobject · requiredNested fields
release_idstring · uuid · requirednumberinteger · requireddeliveryobject · required400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getCanvasReleaseDelivery",
"tags": [
"Canvases"
],
"summary": "Get signed playback media for one immutable release",
"description": "Call from your backend with its API key and forward only delivery to website visitors. This response contains no authoring credentials, generation context or private identity references. Creating a release does not activate it.",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "releaseId",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"web",
"desktop"
],
"default": "web"
},
"required": false,
"name": "target",
"in": "query"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"release_id": {
"type": "string",
"format": "uuid"
},
"number": {
"type": "integer"
},
"delivery": {
"type": "object",
"additionalProperties": {
"nullable": true
}
}
},
"required": [
"release_id",
"number",
"delivery"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/published-libraryRead approved content through a project in the credential workspace
Requires a library license owned by the credential workspace, or a mascot authored in that workspace. A personal purchase does not grant an organization license. Organization purchases are shared with current members only within that organization. Retained purchase content is scoped to the same owner.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
project_idquery · requiredstring
Responses
200 Successful response
application/json
dataobject · requiredNested fields
mascot_idstring · uuid · requiredcontentarray · requiredNested fields
object
400 Invalid input
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write key required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Resource not found in credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Revision conflict or retained history
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Required release media unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getPublishedMascotLibrary",
"description": "Requires a library license owned by the credential workspace, or a mascot authored in that workspace. A personal purchase does not grant an organization license. Organization purchases are shared with current members only within that organization. Retained purchase content is scoped to the same owner.",
"tags": [
"Mascots"
],
"summary": "Read approved content through a project in the credential workspace",
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "project_id",
"in": "query"
}
],
"responses": {
"200": {
"description": "Successful response",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"mascot_id": {
"type": "string",
"format": "uuid"
},
"content": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": {
"nullable": true
}
}
}
},
"required": [
"mascot_id",
"content"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid input",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write key required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Resource not found in credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Revision conflict or retained history",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Required release media unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}POST/v1/auth/deviceStart device authorization for Masko CLI (remote terminals)
No bearer required. Show user_code and verification_uri_complete, then poll auth/token at interval seconds. Codes expire after 600 seconds. Explicit signed-in browser approval selects the workspace. Uses the Masko JSON envelope and device-grant semantics, not form-encoded OAuth transport.
No authentication required.
Request body (required)
application/jsonclient_idstring · requiredValues: "masko-cli"
device_namestring · requiredLength: 1 to 100 characters
Pattern: ^[^\u0000-\u001f\u007f]+$
scopestringValues: "read", "write"
Default: "write"
Responses
200 Success. Cache-Control: no-store.
application/json
dataobject · requiredNested fields
device_codestring · requireduser_codestring · requiredverification_uristring · uri · requiredverification_uri_completestring · uri · requiredexpires_innumber · requiredintervalnumber · required400 Validation or device-grant state error.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Authentication service unavailable.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createCLIDeviceGrant",
"tags": [
"Authentication"
],
"summary": "Start device authorization for Masko CLI (remote terminals)",
"description": "No bearer required. Show user_code and verification_uri_complete, then poll auth/token at interval seconds. Codes expire after 600 seconds. Explicit signed-in browser approval selects the workspace. Uses the Masko JSON envelope and device-grant semantics, not form-encoded OAuth transport.",
"security": [],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"client_id": {
"type": "string",
"enum": [
"masko-cli"
]
},
"device_name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"pattern": "^[^\\u0000-\\u001f\\u007f]+$"
},
"scope": {
"type": "string",
"enum": [
"read",
"write"
],
"default": "write"
}
},
"required": [
"client_id",
"device_name"
],
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "Success. Cache-Control: no-store.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"device_code": {
"type": "string"
},
"user_code": {
"type": "string"
},
"verification_uri": {
"type": "string",
"format": "uri"
},
"verification_uri_complete": {
"type": "string",
"format": "uri"
},
"expires_in": {
"type": "number"
},
"interval": {
"type": "number"
}
},
"required": [
"device_code",
"user_code",
"verification_uri",
"verification_uri_complete",
"expires_in",
"interval"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation or device-grant state error.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"429": {
"description": "Rate limited.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Authentication service unavailable.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}
}POST/v1/auth/tokenExchange a PKCE authorization code, poll a device code, or rotate a CLI refresh token
No bearer required. For authorization_code, send code, exact redirect_uri, and the original code_verifier; S256 must match the approved challenge. Codes expire after 120 seconds and are single-use. For device grants: authorization_pending: continue polling; slow_down: add 5 seconds to every subsequent interval; access_denied, expired_token, invalid_grant: stop. Access tokens last 900 seconds. Refresh tokens rotate once per use; reuse revokes the session. Serialize refreshes and save the returned pair atomically. Sessions expire after 90 days. Never log tokens.
No authentication required.
Request body (required)
application/jsonOption 1
client_idstring · requiredValues: "masko-cli"
grant_typestring · requiredValues: "authorization_code"
codestring · requiredPattern: ^masko_ac_[a-f0-9]{64}$
redirect_uristring · uri · requiredLength: 0 to 200 characters
code_verifierstring · requiredPattern: ^[A-Za-z0-9._~-]{43,128}$
Option 2
client_idstring · requiredValues: "masko-cli"
grant_typestring · requiredValues: "urn:ietf:params:oauth:grant-type:device_code"
device_codestring · requiredPattern: ^masko_dc_[a-f0-9]{64}$
Option 3
client_idstring · requiredValues: "masko-cli"
grant_typestring · requiredValues: "refresh_token"
refresh_tokenstring · requiredPattern: ^masko_rt_[a-f0-9]{64}$
Responses
200 Success. Cache-Control: no-store.
application/json
dataobject · requiredNested fields
access_tokenstring · requiredrefresh_tokenstring · requiredtoken_typestring · requiredValues: "Bearer"
expires_innumber · requiredsession_idstring · uuid · requiredsession_expires_atstring · required400 Validation or device-grant state error.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Authentication service unavailable.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "exchangeCLIToken",
"tags": [
"Authentication"
],
"summary": "Exchange a PKCE authorization code, poll a device code, or rotate a CLI refresh token",
"description": "No bearer required. For authorization_code, send code, exact redirect_uri, and the original code_verifier; S256 must match the approved challenge. Codes expire after 120 seconds and are single-use. For device grants: authorization_pending: continue polling; slow_down: add 5 seconds to every subsequent interval; access_denied, expired_token, invalid_grant: stop. Access tokens last 900 seconds. Refresh tokens rotate once per use; reuse revokes the session. Serialize refreshes and save the returned pair atomically. Sessions expire after 90 days. Never log tokens.",
"security": [],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"oneOf": [
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"enum": [
"masko-cli"
]
},
"grant_type": {
"type": "string",
"enum": [
"authorization_code"
]
},
"code": {
"type": "string",
"pattern": "^masko_ac_[a-f0-9]{64}$"
},
"redirect_uri": {
"type": "string",
"maxLength": 200,
"format": "uri"
},
"code_verifier": {
"type": "string",
"pattern": "^[A-Za-z0-9._~-]{43,128}$"
}
},
"required": [
"client_id",
"grant_type",
"code",
"redirect_uri",
"code_verifier"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"enum": [
"masko-cli"
]
},
"grant_type": {
"type": "string",
"enum": [
"urn:ietf:params:oauth:grant-type:device_code"
]
},
"device_code": {
"type": "string",
"pattern": "^masko_dc_[a-f0-9]{64}$"
}
},
"required": [
"client_id",
"grant_type",
"device_code"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"enum": [
"masko-cli"
]
},
"grant_type": {
"type": "string",
"enum": [
"refresh_token"
]
},
"refresh_token": {
"type": "string",
"pattern": "^masko_rt_[a-f0-9]{64}$"
}
},
"required": [
"client_id",
"grant_type",
"refresh_token"
],
"additionalProperties": false
}
]
}
}
}
},
"responses": {
"200": {
"description": "Success. Cache-Control: no-store.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"access_token": {
"type": "string"
},
"refresh_token": {
"type": "string"
},
"token_type": {
"type": "string",
"enum": [
"Bearer"
]
},
"expires_in": {
"type": "number"
},
"session_id": {
"type": "string",
"format": "uuid"
},
"session_expires_at": {
"type": "string"
}
},
"required": [
"access_token",
"refresh_token",
"token_type",
"expires_in",
"session_id",
"session_expires_at"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation or device-grant state error.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"429": {
"description": "Rate limited.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Authentication service unavailable.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}
}POST/v1/auth/revokeEnd a CLI browser session using its refresh token
Idempotent. Ends access immediately. Does not revoke API keys or other installations.
No authentication required.
Request body (required)
application/jsonrefresh_tokenstring · requiredPattern: ^masko_rt_[a-f0-9]{64}$
Responses
200 Success. Cache-Control: no-store.
application/json
dataobject · requiredNested fields
revokedboolean · required400 Validation or device-grant state error.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Authentication service unavailable.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "revokeCLISession",
"tags": [
"Authentication"
],
"summary": "End a CLI browser session using its refresh token",
"description": "Idempotent. Ends access immediately. Does not revoke API keys or other installations.",
"security": [],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"refresh_token": {
"type": "string",
"pattern": "^masko_rt_[a-f0-9]{64}$"
}
},
"required": [
"refresh_token"
],
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "Success. Cache-Control: no-store.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"revoked": {
"type": "boolean"
}
},
"required": [
"revoked"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation or device-grant state error.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"429": {
"description": "Rate limited.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Authentication service unavailable.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}
}GET/v1/auth/sessionIdentify the account, workspace, and credential in use
Returns the account, workspace and credential that authenticated this request. Use it to check which key an integration is using.
Bearer authentication. Access depends on credential scope and workspace membership.
Responses
200 Authenticated identity.
application/json
dataobject · requiredNested fields
user_idstring · uuid · requiredemailstringorganization_idstring · uuid · nullable · requiredpermissionsstring · requiredValues: "read", "write", "admin"
methodstring · requiredValues: "browser", "api_key"
session_idstring · uuid · nullable · required401 Expired, revoked, or missing credential.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Restricted credential.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Account unavailable.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getAuthSession",
"tags": [
"Authentication"
],
"summary": "Identify the account, workspace, and credential in use",
"security": [
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Authenticated identity.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"user_id": {
"type": "string",
"format": "uuid"
},
"email": {
"type": "string"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"permissions": {
"type": "string",
"enum": [
"read",
"write",
"admin"
]
},
"method": {
"type": "string",
"enum": [
"browser",
"api_key"
]
},
"session_id": {
"type": "string",
"nullable": true,
"format": "uuid"
}
},
"required": [
"user_id",
"organization_id",
"permissions",
"method",
"session_id"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Expired, revoked, or missing credential.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Restricted credential.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Account unavailable.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"description": "Returns the account, workspace and credential that authenticated this request. Use it to check which key an integration is using."
}GET/v1/auth/configDiscover Masko CLI browser authorization
The registered masko-cli client opens authorization_endpoint with response_type=code, client_id=masko-cli, device_name, scope read/write, redirect_uri, state, code_challenge, and code_challenge_method=S256. Only http://127.0.0.1:PORT/oauth/callback with port 1024..65535 is accepted. Use independent random verifier and state values with at least 32 random bytes; state is echoed and must be checked by the CLI. Browser sign-in and explicit workspace approval return a one-time code, never access or refresh tokens. This is Masko JSON transport, not general OAuth server discovery.
No authentication required.
Responses
200 Configuration. Cache-Control: no-store.
application/json
dataobject · requiredNested fields
authorization_endpointstring · uri · requiredcode_challenge_methods_supportedarray · requiredNested fields
string · S256
grant_types_supportedarray · requiredNested fields
string · authorization_code, urn:ietf:params:oauth:grant-type:device_code, refresh_token
OpenAPI operation
{
"operationId": "getCLIAuthConfig",
"tags": [
"Authentication"
],
"summary": "Discover Masko CLI browser authorization",
"security": [],
"description": "The registered masko-cli client opens authorization_endpoint with response_type=code, client_id=masko-cli, device_name, scope read/write, redirect_uri, state, code_challenge, and code_challenge_method=S256. Only http://127.0.0.1:PORT/oauth/callback with port 1024..65535 is accepted. Use independent random verifier and state values with at least 32 random bytes; state is echoed and must be checked by the CLI. Browser sign-in and explicit workspace approval return a one-time code, never access or refresh tokens. This is Masko JSON transport, not general OAuth server discovery.",
"responses": {
"200": {
"description": "Configuration. Cache-Control: no-store.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"authorization_endpoint": {
"type": "string",
"format": "uri"
},
"code_challenge_methods_supported": {
"type": "array",
"items": {
"type": "string",
"enum": [
"S256"
]
}
},
"grant_types_supported": {
"type": "array",
"items": {
"type": "string",
"enum": [
"authorization_code",
"urn:ietf:params:oauth:grant-type:device_code",
"refresh_token"
]
}
}
},
"required": [
"authorization_endpoint",
"code_challenge_methods_supported",
"grant_types_supported"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
}
}GET/v1/collections/{id}/canvases/{canvasId}/validateValidate the stored canvas graph
Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. GET requires read access. A structurally invalid graph still returns 200 with data.valid=false.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Responses
200 Graph validation result.
application/json
dataobject · requiredNested fields
validboolean · requiredissuesarray · requiredNested fields
severitystring · requiredValues: "error", "warning"
codestring · requiredmessagestring · requirednodeIdstringedgeIdstringsummaryobject · requiredNested fields
errorsnumber · requiredwarningsnumber · required401 Missing or invalid credential.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Insufficient credential permissions.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Collection or canvas not found in this workspace.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Validation could not be completed.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Validate the stored canvas graph",
"description": "Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. GET requires read access. A structurally invalid graph still returns 200 with data.valid=false.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Graph validation result.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"nodeId": {
"type": "string"
},
"edgeId": {
"type": "string"
}
},
"required": [
"severity",
"code",
"message"
]
}
},
"summary": {
"type": "object",
"properties": {
"errors": {
"type": "number"
},
"warnings": {
"type": "number"
}
},
"required": [
"errors",
"warnings"
]
}
},
"required": [
"valid",
"issues",
"summary"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Missing or invalid credential.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Insufficient credential permissions.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Collection or canvas not found in this workspace.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Validation could not be completed.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollectionCanvasValidate"
}POST/v1/collections/{id}/canvases/{canvasId}/validateValidate the stored canvas graph
Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. POST requires write access and accepts no body; prefer GET for read-only checks. A structurally invalid graph still returns 200 with data.valid=false.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Responses
200 Graph validation result.
application/json
dataobject · requiredNested fields
validboolean · requiredissuesarray · requiredNested fields
severitystring · requiredValues: "error", "warning"
codestring · requiredmessagestring · requirednodeIdstringedgeIdstringsummaryobject · requiredNested fields
errorsnumber · requiredwarningsnumber · required401 Missing or invalid credential.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Insufficient credential permissions.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Collection or canvas not found in this workspace.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Validation could not be completed.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Validate the stored canvas graph",
"description": "Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. POST requires write access and accepts no body; prefer GET for read-only checks. A structurally invalid graph still returns 200 with data.valid=false.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"responses": {
"200": {
"description": "Graph validation result.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"nodeId": {
"type": "string"
},
"edgeId": {
"type": "string"
}
},
"required": [
"severity",
"code",
"message"
]
}
},
"summary": {
"type": "object",
"properties": {
"errors": {
"type": "number"
},
"warnings": {
"type": "number"
}
},
"required": [
"errors",
"warnings"
]
}
},
"required": [
"valid",
"issues",
"summary"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Missing or invalid credential.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Insufficient credential permissions.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Collection or canvas not found in this workspace.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Validation could not be completed.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyValidateCollectionCanvas"
}GET/v1/canvases/{canvasId}/generation-estimateEstimate canvas generation without starting jobs
Read-only cost and work preview. Accepts read or write credentials in the canvas workspace. Always runs a dry run without charging credits, creating jobs or changing the graph. Returns estimated_cost, planned_jobs, plan_id and graph_content_hash. After approval, send identical options and the returned plan identifiers to POST /v1/canvases/{canvasId}/generate-all using a write credential.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
optionsqueryURL-encoded JSON object with animation_model (standard or premium, default standard), duration (default 5; standard 5–15, premium 4–30), targets (all, images, stickers or animations), include_stickers, skip_completed, and optional node_ids or edge_ids arrays. Execution controls such as dry_run, approved_plan_id and max_credits are rejected. This endpoint always estimates only.
string
Responses
200 Read-only generation plan
application/json
dataobject · requiredNested fields
plan_idstringStable identity of the exact graph, scope, prompts, and generation options. Return it as approved_plan_id when executing an approved dry-run plan.
graph_content_hashstringCanvas revision used by this plan. Return it as expected_graph_hash when executing an approved dry-run plan.
dry_runbooleancan_dispatchbooleantargetsstringValues: "all", "images", "stickers", "animations"
durationnumberinclude_stickersbooleanskip_completedbooleanselectionobjectNested fields
node_idsarray · nullable · requiredNested fields
string
edge_idsarray · nullable · requiredNested fields
string
jobsarray · requiredNested fields
job_idstring · uuid · requirededge_idstringnode_idstringtypestring · requiredValues: "image", "edit", "sticker", "loop", "transition"
sourcestringtargetstringitem_namestringcostnumber · requiredurlsobjectpoll_urlstringFollow this link to poll the job. On /v1/canvases routes it selects the mascot contract, so the job reports mascot_id.
generatedarray · requiredNested fields
object
planned_jobsarrayNested fields
object
planned_job_countnumberplanned_nodesarrayNested fields
object
planned_edgesarrayNested fields
object
planned_stickersarrayNested fields
object
skippednumber · requiredskipped_itemsarray · requiredNested fields
kindstring · requiredValues: "node", "edge"
idstring · requiredreasonstring · requiredasset_idstring · nullableasset_statusstringreverse_freearray · requiredNested fields
kindstring · requiredValues: "edge"
idstring · requiredreasonstring · requiredValues: "reverse_edge_free"
reverse_of_edge_idstring · nullable · requiredalready_completearray · requiredNested fields
kindstring · requiredValues: "node", "edge"
idstring · requiredasset_idstring · requiredestimated_costnumber · requiredactual_costnumber · requiredwould_charge_creditsnumberrefunded_creditsnumbertotal_jobsnumber · requiredtotal_costnumber · required400 Invalid options or canvas selection
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Credential is not allowed to use the public API
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Canvas or mascot not found in the credential workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Canvas has no mascot generation context
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "estimateCanvasGeneration",
"tags": [
"Canvases"
],
"summary": "Estimate canvas generation without starting jobs",
"description": "Read-only cost and work preview. Accepts read or write credentials in the canvas workspace. Always runs a dry run without charging credits, creating jobs or changing the graph. Returns estimated_cost, planned_jobs, plan_id and graph_content_hash. After approval, send identical options and the returned plan identifiers to POST /v1/canvases/{canvasId}/generate-all using a write credential.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string",
"default": "{}",
"description": "URL-encoded JSON object with animation_model (standard or premium, default standard), duration (default 5; standard 5–15, premium 4–30), targets (all, images, stickers or animations), include_stickers, skip_completed, and optional node_ids or edge_ids arrays. Execution controls such as dry_run, approved_plan_id and max_credits are rejected. This endpoint always estimates only."
},
"required": false,
"description": "URL-encoded JSON object with animation_model (standard or premium, default standard), duration (default 5; standard 5–15, premium 4–30), targets (all, images, stickers or animations), include_stickers, skip_completed, and optional node_ids or edge_ids arrays. Execution controls such as dry_run, approved_plan_id and max_credits are rejected. This endpoint always estimates only.",
"name": "options",
"in": "query"
}
],
"responses": {
"200": {
"description": "Read-only generation plan",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasGenerateAllResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid options or canvas selection",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Credential is not allowed to use the public API",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Canvas or mascot not found in the credential workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Canvas has no mascot generation context",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}POST/v1/credit-checkoutsCreate a hosted Stripe checkout for credits
Creates a payment link, not a charge. Requires write permission and an Idempotency-Key. Uses only the credential workspace; team purchases require the active owner. Amount is USD before checkout taxes and discounts. No payment data is accepted. Reuse identical inputs and the same key after an uncertain result. Successful responses replay for 24 hours; the checkout URL can expire sooner. Only a verified successful payment webhook grants credits.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-Keyheader · requiredstring
Request body (required)
application/jsonamount_centsinteger · requiredUSD purchase amount in whole cents, from $10 to $10,000, before checkout taxes or discounts. Workspace comes from authentication.
Range: 1000 to 1000000
Responses
201 Hosted checkout; no payment taken
application/json
dataobject · requiredNested fields
idstring · requiredLength: 0 to 255 characters
Pattern: ^cs_(?:test_|live_)?[A-Za-z0-9]+$
urlstring · uri · requiredamount_centsinteger · requiredcurrencystring · requiredValues: "usd"
creditsinteger · requiredorganization_idstring · uuid · nullable · requiredexpires_atinteger · requiredstatus_urlstring · required400 Invalid input or missing Idempotency-Key
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write permission or active team ownership required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Checkout not found for this user and workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Idempotency key reused with different input or request still in progress
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Checkout provider or database unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Idempotency receipt unavailable; retry only with the same key
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createCreditCheckout",
"tags": [
"Credits"
],
"summary": "Create a hosted Stripe checkout for credits",
"description": "Creates a payment link, not a charge. Requires write permission and an Idempotency-Key. Uses only the credential workspace; team purchases require the active owner. Amount is USD before checkout taxes and discounts. No payment data is accepted. Reuse identical inputs and the same key after an uncertain result. Successful responses replay for 24 hours; the checkout URL can expire sooner. Only a verified successful payment webhook grants credits.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"required": true,
"name": "Idempotency-Key",
"in": "header"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"amount_cents": {
"type": "integer",
"minimum": 1000,
"maximum": 1000000,
"description": "USD purchase amount in whole cents, from $10 to $10,000, before checkout taxes or discounts. Workspace comes from authentication."
}
},
"required": [
"amount_cents"
],
"additionalProperties": false
}
}
}
},
"responses": {
"201": {
"description": "Hosted checkout; no payment taken",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 255,
"pattern": "^cs_(?:test_|live_)?[A-Za-z0-9]+$"
},
"url": {
"type": "string",
"format": "uri"
},
"amount_cents": {
"type": "integer"
},
"currency": {
"type": "string",
"enum": [
"usd"
]
},
"credits": {
"type": "integer"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"expires_at": {
"type": "integer"
},
"status_url": {
"type": "string"
}
},
"required": [
"id",
"url",
"amount_cents",
"currency",
"credits",
"organization_id",
"expires_at",
"status_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid input or missing Idempotency-Key",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write permission or active team ownership required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Checkout not found for this user and workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Idempotency key reused with different input or request still in progress",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Checkout provider or database unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Idempotency receipt unavailable; retry only with the same key",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}
}GET/v1/credit-checkouts/{id}Read payment and credit delivery status
Read-only. Only the creating user in the same credential workspace may read the checkout; team ownership must still be active. A paid session does not guarantee credits have been delivered yet. credits_added is true only when the credit ledger contains the matching grant. Does not grant credits or return customer/payment credentials.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 Payment and credit delivery status
application/json
dataobject · requiredNested fields
idstring · requiredLength: 0 to 255 characters
Pattern: ^cs_(?:test_|live_)?[A-Za-z0-9]+$
statusstring · nullable · requiredValues: "open", "complete", "expired", null
payment_statusstring · requiredValues: "paid", "unpaid", "no_payment_required"
creditsinteger · requiredcredits_addedboolean · requiredorganization_idstring · uuid · nullable · requiredbalancenumber · requiredamount_totalinteger · nullable · requiredcurrencystring · nullable · required400 Invalid input or missing Idempotency-Key
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write permission or active team ownership required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Checkout not found for this user and workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Idempotency key reused with different input or request still in progress
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Checkout provider or database unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Idempotency receipt unavailable; retry only with the same key
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getCreditCheckout",
"tags": [
"Credits"
],
"summary": "Read payment and credit delivery status",
"description": "Read-only. Only the creating user in the same credential workspace may read the checkout; team ownership must still be active. A paid session does not guarantee credits have been delivered yet. credits_added is true only when the credit ledger contains the matching grant. Does not grant credits or return customer/payment credentials.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"maxLength": 255,
"pattern": "^cs_(?:test_|live_)?[A-Za-z0-9]+$"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Payment and credit delivery status",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 255,
"pattern": "^cs_(?:test_|live_)?[A-Za-z0-9]+$"
},
"status": {
"type": "string",
"nullable": true,
"enum": [
"open",
"complete",
"expired",
null
]
},
"payment_status": {
"type": "string",
"enum": [
"paid",
"unpaid",
"no_payment_required"
]
},
"credits": {
"type": "integer"
},
"credits_added": {
"type": "boolean"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"balance": {
"type": "number"
},
"amount_total": {
"type": "integer",
"nullable": true
},
"currency": {
"type": "string",
"nullable": true
}
},
"required": [
"id",
"status",
"payment_status",
"credits",
"credits_added",
"organization_id",
"balance",
"amount_total",
"currency"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid input or missing Idempotency-Key",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write permission or active team ownership required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Checkout not found for this user and workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Idempotency key reused with different input or request still in progress",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Checkout provider or database unavailable",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Idempotency receipt unavailable; retry only with the same key",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}
}POST/v1/credit-paymentsTest a direct Shared Payment Token credit purchase (local sandbox only)
Unavailable in production. Requires explicit sandbox configuration and local Supabase. Attempts a test payment using a payer-issued SPT and the same USD base credit pricing as Checkout; no taxes or discounts are calculated. Requires write permission and Idempotency-Key; team purchases require active ownership. Workspace comes from authentication. The caller must obtain user approval for this exact purchase before submitting the token over HTTPS (HTTP only on localhost). Never put payment tokens in prompts or URLs. Only the dedicated signature-verified sandbox webhook grants credits. This is not MPP, a Muse-specific payment contract, or a Managed Payments integration. Never retry an uncertain outcome with a new key or token.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-Keyheader · requiredstring
Request body (required)
application/jsonamount_centsinteger · requiredUSD purchase amount in whole cents, from $10 to $10,000, before checkout taxes or discounts. Workspace comes from authentication.
Range: 1000 to 1000000
shared_payment_tokenstring · requiredSandbox Shared Payment Token issued by the payer wallet for this approved purchase. Never put it in a prompt, URL, log or saved card field.
Length: 0 to 255 characters
Pattern: ^spt_[A-Za-z0-9_]+$
Responses
201 Sandbox payment status; credits_added is backed by the ledger
application/json
dataobject · requiredNested fields
idstring · requiredstatusstring · requiredValues: "requires_payment_method", "requires_confirmation", "requires_action", "processing", "requires_capture", "canceled", "succeeded"
amount_centsinteger · requiredcurrencystring · requiredValues: "usd"
creditsinteger · requiredcredits_addedboolean · requiredorganization_idstring · uuid · nullable · requiredlivemodeboolean · requiredValues: false
status_urlstring · required202 Sandbox payment status; credits_added is backed by the ledger
application/json
dataobject · requiredNested fields
idstring · requiredstatusstring · requiredValues: "requires_payment_method", "requires_confirmation", "requires_action", "processing", "requires_capture", "canceled", "succeeded"
amount_centsinteger · requiredcurrencystring · requiredValues: "usd"
creditsinteger · requiredcredits_addedboolean · requiredorganization_idstring · uuid · nullable · requiredlivemodeboolean · requiredValues: false
status_urlstring · required400 Invalid input or missing Idempotency-Key
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write permission or active team ownership required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Payment or token not found in this account/workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Operation conflict or unconfirmed execution
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Token rejected or payment needs unsupported customer action
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Invalid payment record
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Sandbox disabled, provider unavailable, or payment outcome unknown
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createCreditPayment",
"tags": [
"Credits"
],
"summary": "Test a direct Shared Payment Token credit purchase (local sandbox only)",
"description": "Unavailable in production. Requires explicit sandbox configuration and local Supabase. Attempts a test payment using a payer-issued SPT and the same USD base credit pricing as Checkout; no taxes or discounts are calculated. Requires write permission and Idempotency-Key; team purchases require active ownership. Workspace comes from authentication. The caller must obtain user approval for this exact purchase before submitting the token over HTTPS (HTTP only on localhost). Never put payment tokens in prompts or URLs. Only the dedicated signature-verified sandbox webhook grants credits. This is not MPP, a Muse-specific payment contract, or a Managed Payments integration. Never retry an uncertain outcome with a new key or token.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"required": true,
"name": "Idempotency-Key",
"in": "header"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"amount_cents": {
"type": "integer",
"minimum": 1000,
"maximum": 1000000,
"description": "USD purchase amount in whole cents, from $10 to $10,000, before checkout taxes or discounts. Workspace comes from authentication."
},
"shared_payment_token": {
"type": "string",
"maxLength": 255,
"pattern": "^spt_[A-Za-z0-9_]+$",
"description": "Sandbox Shared Payment Token issued by the payer wallet for this approved purchase. Never put it in a prompt, URL, log or saved card field."
}
},
"required": [
"amount_cents",
"shared_payment_token"
],
"additionalProperties": false
}
}
}
},
"responses": {
"201": {
"description": "Sandbox payment status; credits_added is backed by the ledger",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"requires_payment_method",
"requires_confirmation",
"requires_action",
"processing",
"requires_capture",
"canceled",
"succeeded"
]
},
"amount_cents": {
"type": "integer"
},
"currency": {
"type": "string",
"enum": [
"usd"
]
},
"credits": {
"type": "integer"
},
"credits_added": {
"type": "boolean"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"livemode": {
"type": "boolean",
"enum": [
false
]
},
"status_url": {
"type": "string"
}
},
"required": [
"id",
"status",
"amount_cents",
"currency",
"credits",
"credits_added",
"organization_id",
"livemode",
"status_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"202": {
"description": "Sandbox payment status; credits_added is backed by the ledger",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"requires_payment_method",
"requires_confirmation",
"requires_action",
"processing",
"requires_capture",
"canceled",
"succeeded"
]
},
"amount_cents": {
"type": "integer"
},
"currency": {
"type": "string",
"enum": [
"usd"
]
},
"credits": {
"type": "integer"
},
"credits_added": {
"type": "boolean"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"livemode": {
"type": "boolean",
"enum": [
false
]
},
"status_url": {
"type": "string"
}
},
"required": [
"id",
"status",
"amount_cents",
"currency",
"credits",
"credits_added",
"organization_id",
"livemode",
"status_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid input or missing Idempotency-Key",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write permission or active team ownership required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Payment or token not found in this account/workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Operation conflict or unconfirmed execution",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Token rejected or payment needs unsupported customer action",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Invalid payment record",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Sandbox disabled, provider unavailable, or payment outcome unknown",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}
}GET/v1/credit-payments/{id}Read a sandbox token payment and credit delivery status
Unavailable in production. Read-only; never grants credits. Requires the creating user and exact workspace, with active ownership for teams. Returns no token, client secret, payment method or customer information. A succeeded payment can precede webhook credit delivery. This endpoint uses the dedicated sandbox Stripe account, never the existing live Checkout client.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 Sandbox payment status; credits_added is backed by the ledger
application/json
dataobject · requiredNested fields
idstring · requiredstatusstring · requiredValues: "requires_payment_method", "requires_confirmation", "requires_action", "processing", "requires_capture", "canceled", "succeeded"
amount_centsinteger · requiredcurrencystring · requiredValues: "usd"
creditsinteger · requiredcredits_addedboolean · requiredorganization_idstring · uuid · nullable · requiredlivemodeboolean · requiredValues: false
status_urlstring · required400 Invalid input or missing Idempotency-Key
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write permission or active team ownership required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Payment or token not found in this account/workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Operation conflict or unconfirmed execution
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Token rejected or payment needs unsupported customer action
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Invalid payment record
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Sandbox disabled, provider unavailable, or payment outcome unknown
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "getCreditPayment",
"tags": [
"Credits"
],
"summary": "Read a sandbox token payment and credit delivery status",
"description": "Unavailable in production. Read-only; never grants credits. Requires the creating user and exact workspace, with active ownership for teams. Returns no token, client secret, payment method or customer information. A succeeded payment can precede webhook credit delivery. This endpoint uses the dedicated sandbox Stripe account, never the existing live Checkout client.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"maxLength": 255,
"pattern": "^pi_[A-Za-z0-9]+$"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Sandbox payment status; credits_added is backed by the ledger",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"requires_payment_method",
"requires_confirmation",
"requires_action",
"processing",
"requires_capture",
"canceled",
"succeeded"
]
},
"amount_cents": {
"type": "integer"
},
"currency": {
"type": "string",
"enum": [
"usd"
]
},
"credits": {
"type": "integer"
},
"credits_added": {
"type": "boolean"
},
"organization_id": {
"type": "string",
"nullable": true,
"format": "uuid"
},
"livemode": {
"type": "boolean",
"enum": [
false
]
},
"status_url": {
"type": "string"
}
},
"required": [
"id",
"status",
"amount_cents",
"currency",
"credits",
"credits_added",
"organization_id",
"livemode",
"status_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid input or missing Idempotency-Key",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Write permission or active team ownership required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Payment or token not found in this account/workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Operation conflict or unconfirmed execution",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"422": {
"description": "Token rejected or payment needs unsupported customer action",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Invalid payment record",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "Sandbox disabled, provider unavailable, or payment outcome unknown",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
}
}GET/v1/collections/{id}/variantsList named mascot variants
Lists the collection’s named generation contexts. Variant authoring follows collection project permissions, including authorized teammates; API keys must match the collection workspace. Create and approve variants through the API or web app, then pass the id as variant_id to /generate. Selecting a generation variant does not change active playback. A null approved_at means the variant is still a draft.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
Responses
200 Variants in creation order
application/json
dataarray · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · requiredmetaobject · requiredNested fields
paginationobject · requiredNested fields
totalnumber · requiredlimitnumber · requiredoffsetnumber · requiredhas_moreboolean · required401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot not found in this workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "legacyListCollectionVariants",
"tags": [
"Collections"
],
"summary": "List named mascot variants",
"description": "Lists the collection’s named generation contexts. Variant authoring follows collection project permissions, including authorized teammates; API keys must match the collection workspace. Create and approve variants through the API or web app, then pass the id as variant_id to /generate. Selecting a generation variant does not change active playback. A null approved_at means the variant is still a draft.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
}
],
"responses": {
"200": {
"description": "Variants in creation order",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MascotVariant"
}
},
"meta": {
"type": "object",
"properties": {
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number"
},
"limit": {
"type": "number"
},
"offset": {
"type": "number"
},
"has_more": {
"type": "boolean"
}
},
"required": [
"total",
"limit",
"offset",
"has_more"
]
}
},
"required": [
"pagination"
]
}
},
"required": [
"data",
"meta"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot not found in this workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true
}POST/v1/collections/{id}/variantsCreate a named mascot variant
Creates a draft from Original or source_variant_id. The source context and references are frozen. Supply reference_asset_id to use an existing collection image or your unassigned /v1/upload image and immediately approve the context, with no generation charge. Otherwise generate and approve a reference next. Reuse id for retries with the same inputs. This does not activate playback.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonidstring · uuid · requiredClient-generated UUID. Reuse it to safely retry creation.
namestring · requiredLength: 1 to 80 characters
descriptionstring · requiredThe desired change and generation guidance.
Length: 1 to 3000 characters
source_variant_idstring · uuidApproved variant to start from. Omit for Original. Its references and context are frozen on creation.
reference_asset_idstring · uuidCompleted image in this collection, or your unassigned POST /v1/upload image. Creates an approved context immediately; no generation charge. Omit to create a draft for reference generation.
Responses
201 Created variant
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Collection, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "legacyCreateCollectionVariant",
"tags": [
"Collections"
],
"summary": "Create a named mascot variant",
"description": "Creates a draft from Original or source_variant_id. The source context and references are frozen. Supply reference_asset_id to use an existing collection image or your unassigned /v1/upload image and immediately approve the context, with no generation charge. Otherwise generate and approve a reference next. Reuse id for retries with the same inputs. This does not activate playback.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateMascotVariantBody"
}
}
}
},
"responses": {
"201": {
"description": "Created variant",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/MascotVariant"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Collection, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true
}GET/v1/collections/{id}/variants/{variantId}Read a variant and its reference candidates
Returns one variant with its reference candidates and approval state.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Responses
200 Variant and candidate previews
application/json
dataobject · requiredNested fields
variantobject · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · requiredcandidatesarray · requiredNested fields
idstring · uuid · requiredasset_idstring · uuid · nullable · requiredjob_idstring · uuid · nullable · requiredcreated_atstring · requiredstatusstring · requirederrorstring · nullableurlstring · nullable · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Collection, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "legacyGetCollectionVariant",
"tags": [
"Collections"
],
"summary": "Read a variant and its reference candidates",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Variant and candidate previews",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/MascotVariantDetail"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Collection, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"description": "Returns one variant with its reference candidates and approval state."
}POST/v1/collections/{id}/variants/{variantId}/referenceGenerate a draft variant reference
Costs 1 credit. Uses the frozen source references and the requested variant description. Reuse operation_id to retry the same job. Poll the job, inspect candidates with GET variant, then approve the selected candidate.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonoperation_idstring · uuid · requiredClient-generated UUID. Reuse to retry the same candidate job without another charge.
Responses
202 Reference generation queued
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredcandidate_idstring · uuid · requiredvariant_idstring · uuid · requiredestimated_costnumber · requiredpoll_urlstring · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Not enough credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Collection, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "legacyCreateCollectionVariantReference",
"tags": [
"Collections"
],
"summary": "Generate a draft variant reference",
"description": "Costs 1 credit. Uses the frozen source references and the requested variant description. Reuse operation_id to retry the same job. Poll the job, inspect candidates with GET variant, then approve the selected candidate.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateVariantReferenceBody"
}
}
}
},
"responses": {
"202": {
"description": "Reference generation queued",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid"
},
"candidate_id": {
"type": "string",
"format": "uuid"
},
"variant_id": {
"type": "string",
"format": "uuid"
},
"estimated_cost": {
"type": "number"
},
"poll_url": {
"type": "string"
}
},
"required": [
"job_id",
"candidate_id",
"variant_id",
"estimated_cost",
"poll_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"402": {
"description": "Not enough credits",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Collection, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true
}POST/v1/collections/{id}/variants/{variantId}/approveApprove a generated variant reference
Select a completed candidate belonging to this variant. Creates its canvas and makes variant_id usable for generation. Does not generate poses or change active playback. Repeating approval of the same candidate is safe.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsoncandidate_idstring · uuid · requiredCompleted candidate from this variant to use as its reference.
Responses
200 Approved variant
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Collection, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "legacyApproveCollectionVariant",
"tags": [
"Collections"
],
"summary": "Approve a generated variant reference",
"description": "Select a completed candidate belonging to this variant. Creates its canvas and makes variant_id usable for generation. Does not generate poses or change active playback. Repeating approval of the same candidate is safe.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApproveMascotVariantBody"
}
}
}
},
"responses": {
"200": {
"description": "Approved variant",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/MascotVariant"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Collection, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true
}POST/v1/collections/{id}/interactiveGenerate a follow-cursor interaction
Creates nine 1024×1024 transparent gaze directions from one completed image. Requires a completed transparent source or transparent derivative in the same collection. Preserves the source variant automatically; no variant_id or name override. Costs 9 credits. Returns an asynchronous job receipt. Send once and poll the returned job URL; repeating POST creates and charges a new set. Hosted collections automatically publish a JSON manifest and nine lossless WebPs. Retrieve them with GET /v1/collections/{id}/cdn-export after completion. This interaction is independent of Canvas state machines.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsonsource_asset_idstring · uuid · requiredkindstring · requiredValues: "cursor-follower"
Responses
202 Nine-direction generation queued
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredasset_idstring · uuid · requiredasset_idsobject · requiredNested fields
interactivestring · uuid · requiredstatusstring · requiredValues: "pending"
estimated_costnumber · requiredvariant_idstring · uuid · nullable · requiredpoll_urlstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write access required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Collection or completed source not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Transparent image required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Could not queue generation
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "legacyCreateCollectionInteractive",
"tags": [
"Generate"
],
"summary": "Generate a follow-cursor interaction",
"description": "Creates nine 1024×1024 transparent gaze directions from one completed image. Requires a completed transparent source or transparent derivative in the same collection. Preserves the source variant automatically; no variant_id or name override. Costs 9 credits. Returns an asynchronous job receipt. Send once and poll the returned job URL; repeating POST creates and charges a new set. Hosted collections automatically publish a JSON manifest and nine lossless WebPs. Retrieve them with GET /v1/collections/{id}/cdn-export after completion. This interaction is independent of Canvas state machines.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateInteractionBody"
}
}
}
},
"responses": {
"202": {
"description": "Nine-direction generation queued",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InteractionGenerationResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Write access required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Collection or completed source not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"422": {
"description": "Transparent image required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"429": {
"description": "Rate limited",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"500": {
"description": "Could not queue generation",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true
}GET/v1/logo-stylesList logo style presets
Nine logo treatments shared with the dashboard, including preview URLs and full instructions. Use id as logo_style_id when generating a logo. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Responses
200 Logo styles
application/json
dataarray · requiredNested fields
idstring · requiredValues: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
namestring · requireddescriptionstring · requiredinstructionstring · requiredpreview_urlstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write access required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Source or collection not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request ID conflict or variant not approved
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Internal error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Generation unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "listLogoStyles",
"tags": [
"Styles"
],
"summary": "List logo style presets",
"description": "Nine logo treatments shared with the dashboard, including preview URLs and full instructions. Use id as logo_style_id when generating a logo. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Logo styles",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"enum": [
"graphic-app-icon",
"cut-paper",
"soft-depth",
"geometric",
"abstract-symbol",
"monoline-symbol",
"negative-space",
"retro-emblem",
"hand-drawn"
]
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"instruction": {
"type": "string"
},
"preview_url": {
"type": "string"
}
},
"required": [
"id",
"name",
"description",
"instruction",
"preview_url"
]
}
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Write access required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Source or collection not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Request ID conflict or variant not approved",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"429": {
"description": "Rate limited",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"500": {
"description": "Internal error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"503": {
"description": "Generation unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
}
}GET/v1/collections/{id}/logos/suggestionsSuggest logo directions and styles
Five directions, including face portrait and full body, plus three suggested styles. Each direction can include a style. A style can be custom; preset_id is present only when it exactly matches a built-in preset. Returns defaults if generation is unavailable, unless refresh=true, which returns 503. No image credits; does not change the collection.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variant_idquerystring
refreshquerystring · true, false
Responses
200 Logo ideas
application/json
dataobject · requiredNested fields
prompt_versionnumber · requiredcachedboolean · requireddescriptionsarray · requiredNested fields
namestring · requireddescriptionstring · requiredstyleobject · nullableNested fields
namestring · requiredinstructionstring · requiredpreset_idstringValues: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
stylesarray · requiredNested fields
namestring · requiredinstructionstring · requiredpreset_idstringValues: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write access required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Source or collection not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request ID conflict or variant not approved
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Internal error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Generation unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "legacyListCollectionLogoSuggestions",
"tags": [
"Suggestions"
],
"summary": "Suggest logo directions and styles",
"description": "Five directions, including face portrait and full body, plus three suggested styles. Each direction can include a style. A style can be custom; preset_id is present only when it exactly matches a built-in preset. Returns defaults if generation is unavailable, unless refresh=true, which returns 503. No image credits; does not change the collection.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": false,
"name": "variant_id",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
]
},
"required": false,
"name": "refresh",
"in": "query"
}
],
"responses": {
"200": {
"description": "Logo ideas",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"prompt_version": {
"type": "number"
},
"cached": {
"type": "boolean"
},
"descriptions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"style": {
"type": "object",
"nullable": true,
"properties": {
"name": {
"type": "string"
},
"instruction": {
"type": "string"
},
"preset_id": {
"type": "string",
"enum": [
"graphic-app-icon",
"cut-paper",
"soft-depth",
"geometric",
"abstract-symbol",
"monoline-symbol",
"negative-space",
"retro-emblem",
"hand-drawn"
]
}
},
"required": [
"name",
"instruction"
]
}
},
"required": [
"name",
"description"
]
}
},
"styles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"instruction": {
"type": "string"
},
"preset_id": {
"type": "string",
"enum": [
"graphic-app-icon",
"cut-paper",
"soft-depth",
"geometric",
"abstract-symbol",
"monoline-symbol",
"negative-space",
"retro-emblem",
"hand-drawn"
]
}
},
"required": [
"name",
"instruction"
]
}
}
},
"required": [
"prompt_version",
"cached",
"descriptions",
"styles"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Write access required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Source or collection not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Request ID conflict or variant not approved",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"429": {
"description": "Rate limited",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"500": {
"description": "Internal error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"503": {
"description": "Generation unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true
}POST/v1/assets/{id}/svgGenerate an SVG from a selected image or logo
Creates an editable vector derivative from this exact completed image, transparent image or sticker, attached to the same item. Uses the highest-quality configured vector model. Costs 30 credits; failures refund charged credits. Async: poll the returned job URL. Generation can take several minutes. Reuse request_id to retry the same submission without another charge; a new ID starts a new paid attempt. SVG details can differ from the source. Published logo items expose the newest completed vector at logos.svg in cdn-export. Download via the returned asset file_url or cdn_url.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
application/jsonrequest_idstring · uuid · requiredIdempotency ID. Reuse for retries of this source; use a new ID only for a new paid generation.
Responses
202 SVG job receipt
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredasset_idsobject · requiredNested fields
svgstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
estimated_costnumber · requiredpoll_urlstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write access required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Source or collection not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request ID conflict or variant not approved
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Internal error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Generation unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "generateAssetSvg",
"tags": [
"Assets"
],
"summary": "Generate an SVG from a selected image or logo",
"description": "Creates an editable vector derivative from this exact completed image, transparent image or sticker, attached to the same item. Uses the highest-quality configured vector model. Costs 30 credits; failures refund charged credits. Async: poll the returned job URL. Generation can take several minutes. Reuse request_id to retry the same submission without another charge; a new ID starts a new paid attempt. SVG details can differ from the source. Published logo items expose the newest completed vector at logos.svg in cdn-export. Download via the returned asset file_url or cdn_url.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"request_id": {
"type": "string",
"format": "uuid",
"description": "Idempotency ID. Reuse for retries of this source; use a new ID only for a new paid generation."
}
},
"required": [
"request_id"
],
"additionalProperties": false
}
}
}
},
"responses": {
"202": {
"description": "SVG job receipt",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid"
},
"asset_ids": {
"type": "object",
"properties": {
"svg": {
"type": "string",
"format": "uuid"
}
},
"required": [
"svg"
]
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"completed",
"failed"
]
},
"estimated_cost": {
"type": "number"
},
"poll_url": {
"type": "string"
}
},
"required": [
"job_id",
"asset_ids",
"status",
"estimated_cost",
"poll_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Invalid request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Write access required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Source or collection not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request ID conflict or variant not approved",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Rate limited",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Internal error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"503": {
"description": "Generation unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
}
}POST/v1/assets/{id}/exportsExport one image or video
Creates a derivative of this exact completed source asset. Image sources: image, transparent_image or sticker_image; formats PNG/WebP. Size is the maximum image dimension (32–2048), preserving aspect ratio and alpha without upscaling. Video sources: video/webm/hevc with an existing background-removal job; size is width (32–1920). Video formats: webm, hevc, prores (ProRes 4444 MOV with alpha for video editing), stacked_video, gif, lottie, dotlottie, png_sequence. Omit size for original. No generation credits. Reuses a pending/completed export for the same source/format/size; force requests a new file without changing old URLs. Poll the job, then GET this export list for signed downloads. Accepts Idempotency-Key.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
application/jsonformatstring · requiredValues: "png", "webp", "webm", "hevc", "prores", "stacked_video", "gif", "lottie", "dotlottie", "png_sequence"
sizeintegerMaximum image dimension, or video width. Omit for original size. Videos support up to 1920.
Range: 32 to 2048
forcebooleanDefault: false
Responses
200 Completed reusable export
application/json
dataobject · requiredNested fields
idstring · uuid · requiredsource_asset_idstring · uuid · requiredformatstring · requiredsizenumber · nullable · requiredjob_idstring · uuid · requiredasset_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
errorstring · nullable · requiredfile_urlstring · nullable · requiredmetadataobject · nullablepoll_urlstring · required202 Export queued
application/json
dataobject · requiredNested fields
idstring · uuid · requiredsource_asset_idstring · uuid · requiredformatstring · requiredsizenumber · nullable · requiredjob_idstring · uuid · requiredasset_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
errorstring · nullable · requiredfile_urlstring · nullable · requiredmetadataobject · nullablepoll_urlstring · required400 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createAssetExport",
"tags": [
"Assets"
],
"summary": "Export one image or video",
"description": "Creates a derivative of this exact completed source asset. Image sources: image, transparent_image or sticker_image; formats PNG/WebP. Size is the maximum image dimension (32–2048), preserving aspect ratio and alpha without upscaling. Video sources: video/webm/hevc with an existing background-removal job; size is width (32–1920). Video formats: webm, hevc, prores (ProRes 4444 MOV with alpha for video editing), stacked_video, gif, lottie, dotlottie, png_sequence. Omit size for original. No generation credits. Reuses a pending/completed export for the same source/format/size; force requests a new file without changing old URLs. Poll the job, then GET this export list for signed downloads. Accepts Idempotency-Key.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"format": {
"type": "string",
"enum": [
"png",
"webp",
"webm",
"hevc",
"prores",
"stacked_video",
"gif",
"lottie",
"dotlottie",
"png_sequence"
]
},
"size": {
"type": "integer",
"minimum": 32,
"maximum": 2048,
"description": "Maximum image dimension, or video width. Omit for original size. Videos support up to 1920."
},
"force": {
"type": "boolean",
"default": false
}
},
"required": [
"format"
],
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "Completed reusable export",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"source_asset_id": {
"type": "string",
"format": "uuid"
},
"format": {
"type": "string"
},
"size": {
"type": "number",
"nullable": true
},
"job_id": {
"type": "string",
"format": "uuid"
},
"asset_id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"completed",
"failed"
]
},
"error": {
"type": "string",
"nullable": true
},
"file_url": {
"type": "string",
"nullable": true
},
"metadata": {
"nullable": true
},
"poll_url": {
"type": "string"
}
},
"required": [
"id",
"source_asset_id",
"format",
"size",
"job_id",
"asset_id",
"status",
"error",
"file_url",
"poll_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"202": {
"description": "Export queued",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"source_asset_id": {
"type": "string",
"format": "uuid"
},
"format": {
"type": "string"
},
"size": {
"type": "number",
"nullable": true
},
"job_id": {
"type": "string",
"format": "uuid"
},
"asset_id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"completed",
"failed"
]
},
"error": {
"type": "string",
"nullable": true
},
"file_url": {
"type": "string",
"nullable": true
},
"metadata": {
"nullable": true
},
"poll_url": {
"type": "string"
}
},
"required": [
"id",
"source_asset_id",
"format",
"size",
"job_id",
"asset_id",
"status",
"error",
"file_url",
"poll_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"503": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
}
}GET/v1/assets/{id}/exportsList exports for one asset
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Current export files and jobs
application/json
dataarray · requiredNested fields
idstring · uuid · requiredsource_asset_idstring · uuid · requiredformatstring · requiredsizenumber · nullable · requiredjob_idstring · uuid · requiredasset_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
errorstring · nullable · requiredfile_urlstring · nullable · requiredmetadataobject · nullablepoll_urlstring · required400 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "listAssetExports",
"tags": [
"Assets"
],
"summary": "List exports for one asset",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"200": {
"description": "Current export files and jobs",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"source_asset_id": {
"type": "string",
"format": "uuid"
},
"format": {
"type": "string"
},
"size": {
"type": "number",
"nullable": true
},
"job_id": {
"type": "string",
"format": "uuid"
},
"asset_id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"pending",
"processing",
"completed",
"failed"
]
},
"error": {
"type": "string",
"nullable": true
},
"file_url": {
"type": "string",
"nullable": true
},
"metadata": {
"nullable": true
},
"poll_url": {
"type": "string"
}
},
"required": [
"id",
"source_asset_id",
"format",
"size",
"job_id",
"asset_id",
"status",
"error",
"file_url",
"poll_url"
]
}
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"503": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"description": "\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400."
}POST/v1/mascots/{id}/exportsGenerate missing image and video exports
Uses the mascot’s saved image_exports, prores_exports and animation_sizes settings. ProRes is opt-in and exports one original-delivery-size MOV per video. Disabled sections are skipped. Creates an asynchronous batch job which schedules individual export jobs. Batch completion means scheduling finished, not that every file is ready. Existing in-flight work is reused; force regenerates completed exports. No settings change and no generation credit charge.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsontypesarrayDefault: ["image","video"]
Items: 1 to 2
Nested fields
string · image, video
forcebooleanDefault: false
Responses
202 Batch job receipt
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredpoll_urlstring · required400 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "backfillMascotExports",
"tags": [
"Collections"
],
"summary": "Generate missing image and video exports",
"description": "Uses the mascot’s saved image_exports, prores_exports and animation_sizes settings. ProRes is opt-in and exports one original-delivery-size MOV per video. Disabled sections are skipped. Creates an asynchronous batch job which schedules individual export jobs. Batch completion means scheduling finished, not that every file is ready. Existing in-flight work is reused; force regenerates completed exports. No settings change and no generation credit charge.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"types": {
"type": "array",
"items": {
"type": "string",
"enum": [
"image",
"video"
]
},
"minItems": 1,
"maxItems": 2,
"default": [
"image",
"video"
]
},
"force": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false
}
}
}
},
"responses": {
"202": {
"description": "Batch job receipt",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid"
},
"poll_url": {
"type": "string"
}
},
"required": [
"job_id",
"poll_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"429": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"500": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"503": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"x-masko-api-version": "2026-09-26"
}POST/v1/projects/{id}/export-settingsApply export settings to project or folder mascots
Merges supplied settings into mascots currently in the selected project or folder. Does not establish inherited defaults for future mascots. Image settings apply to future completed assets; apply_to_existing explicitly queues backfill jobs for existing assets. Preserves omitted settings.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
application/jsonpublish_paramsobject · requiredNested fields
image_exportsobjectNested fields
enabledboolean · requiredsourcesarray · requiredItems: 1 to 3
Nested fields
string · original, transparent, sticker
formatsarray · requiredItems: 1 to 2
Nested fields
string · png, webp
sizesarray · requiredItems: 1 to 5
Nested fields
integer
prores_exportsobjectAutomatically create original-delivery-size ProRes 4444 MOV files with alpha after transparent animations finish. Disabled by default.
Nested fields
enabledboolean · requiredanimation_sizesobjectNested fields
enabledboolean · requiredsizesarray · requiredItems: 0 to 6
Nested fields
integer
custom_sizeintegerRange: 32 to 1920
folder_idstring · uuidapply_to_existingbooleanDefault: false
Responses
200 Applied settings and optional backfill jobs
application/json
dataobject · requiredNested fields
updated_countnumber · requiredjobsarray · requiredNested fields
job_idstring · uuid · requiredpoll_urlstring · required400 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "applyProjectExportSettings",
"tags": [
"Projects"
],
"summary": "Apply export settings to project or folder mascots",
"description": "Merges supplied settings into mascots currently in the selected project or folder. Does not establish inherited defaults for future mascots. Image settings apply to future completed assets; apply_to_existing explicitly queues backfill jobs for existing assets. Preserves omitted settings.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"publish_params": {
"type": "object",
"properties": {
"image_exports": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"sources": {
"type": "array",
"items": {
"type": "string",
"enum": [
"original",
"transparent",
"sticker"
]
},
"minItems": 1,
"maxItems": 3
},
"formats": {
"type": "array",
"items": {
"type": "string",
"enum": [
"png",
"webp"
]
},
"minItems": 1,
"maxItems": 2
},
"sizes": {
"type": "array",
"items": {
"type": "integer",
"minimum": 32,
"maximum": 2048
},
"minItems": 1,
"maxItems": 5
}
},
"required": [
"enabled",
"sources",
"formats",
"sizes"
],
"additionalProperties": false
},
"prores_exports": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
}
},
"required": [
"enabled"
],
"additionalProperties": false,
"description": "Automatically create original-delivery-size ProRes 4444 MOV files with alpha after transparent animations finish. Disabled by default."
},
"animation_sizes": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"sizes": {
"type": "array",
"items": {
"type": "integer",
"minimum": 32,
"maximum": 1920
},
"maxItems": 6
},
"custom_size": {
"type": "integer",
"minimum": 32,
"maximum": 1920
}
},
"required": [
"enabled",
"sizes"
],
"additionalProperties": false
}
},
"additionalProperties": false
},
"folder_id": {
"type": "string",
"format": "uuid"
},
"apply_to_existing": {
"type": "boolean",
"default": false
}
},
"required": [
"publish_params"
],
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "Applied settings and optional backfill jobs",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"updated_count": {
"type": "number"
},
"jobs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid"
},
"poll_url": {
"type": "string"
}
},
"required": [
"job_id",
"poll_url"
]
}
}
},
"required": [
"updated_count",
"jobs"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"429": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"500": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"503": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
}
}POST/v1/animationsAnimate an uploaded image
Animate a completed image without generating another pose. Send either mascot_id to reuse an existing mascot, or create_mascot: {project_id, name?} to explicitly create one from an unattached upload in the same request. Omit create_mascot.name for an AI-chosen character name; no character description is generated. Returns mascot_id, mascot_name and mascot_created alongside the normal job receipt. Reuse mascot_id for subsequent animations to avoid creating extra mascots. Non-square inputs are center-cropped to square before animation; source_image_crop overrides framing. Originals are preserved. Only animation credits are charged: Standard (default) 2/sec, Premium 6/sec, default 5 seconds. Use Idempotency-Key to retry the complete operation without creating another mascot or job. If generation fails after mascot creation, error.details.mascot_id identifies the saved mascot; reuse it in a corrected request with a new key. This endpoint uses the canonical mascot API contract automatically.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsonsource_image_asset_idstring · uuid · requiredCompleted image to animate. For a new mascot, use an unattached image from POST /v1/upload.
source_image_cropobjectSquare crop in pixels after EXIF orientation. Omit for a centered square crop. The original is preserved.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
mascot_idstring · uuidSave under this existing mascot. Reuse the ID returned by your first request.
create_mascotobjectExplicitly create a new mascot in this project. Send this or mascot_id, never both.
Nested fields
project_idstring · uuid · requirednamestringOptional mascot name. When omitted, AI chooses a short name from the image. No character description is generated.
Length: 1 to 80 characters
variant_idstring · uuidnamestringAnimation action name, separate from the mascot name.
Default: "Animation"
Length: 1 to 100 characters
animation_promptstring · requiredLength: 1 to 5000 characters
animation_modelstringStandard: 2 credits/sec, 5–15 seconds. Premium: 6 credits/sec, 4–30 seconds. Defaults to Standard.
Values: "standard", "premium"
Default: "standard"
durationintegerDefault: 5
Range: 4 to 30
loopbooleanDefault: true
Responses
202 Animation accepted
application/json
dataobject · requiredNested fields
GenerateAsyncData
job_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "image", "animation", "edit", "logo", "reverse"
item_idstring · uuid · requireditem_namestring · requiredestimated_costnumber · requiredasset_idsobjecturlsobjectestimateobjectTalking animations only.
Nested fields
speech_secondsnumber · requiredEstimated length of the spoken line.
durationinteger · requiredMost likely video length in seconds.
max_durationinteger · requiredThe longest the video could need; the charge is based on it.
creditsinteger · requiredCharged now: max_duration at 3 credits per second. Unused seconds are refunded once the voice is recorded.
too_longboolean · requiredscriptstringTalking animations only: the line with its movements, as performed.
poll_urlstring · requiredOption 2
mascot_idstring · uuid · requiredmascot_namestring · requiredmascot_createdboolean · required400 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Request failed
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"operationId": "createAnimation",
"tags": [
"Generate"
],
"summary": "Animate an uploaded image",
"description": "Animate a completed image without generating another pose. Send either mascot_id to reuse an existing mascot, or create_mascot: {project_id, name?} to explicitly create one from an unattached upload in the same request. Omit create_mascot.name for an AI-chosen character name; no character description is generated. Returns mascot_id, mascot_name and mascot_created alongside the normal job receipt. Reuse mascot_id for subsequent animations to avoid creating extra mascots. Non-square inputs are center-cropped to square before animation; source_image_crop overrides framing. Originals are preserved. Only animation credits are charged: Standard (default) 2/sec, Premium 6/sec, default 5 seconds. Use Idempotency-Key to retry the complete operation without creating another mascot or job. If generation fails after mascot creation, error.details.mascot_id identifies the saved mascot; reuse it in a corrected request with a new key. This endpoint uses the canonical mascot API contract automatically.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateAnimationBody"
}
}
}
},
"responses": {
"202": {
"description": "Animation accepted",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateAnimationResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"402": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"429": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"500": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"503": {
"description": "Request failed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"x-masko-api-version": "2026-09-26"
}GET/v1/collections/{id}/voiceGet the voice
Returns the voice the mascot speaks with in talking animations, or null. A marketplace copy speaks with its creator's voice (source creator). sample_url is a short recording.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 The voice, or null
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Get the voice",
"description": "Returns the voice the mascot speaks with in talking animations, or null. A marketplace copy speaks with its creator's voice (source creator). sample_url is a short recording.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "The voice, or null",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollectionVoice"
}PUT/v1/collections/{id}/voiceKeep a voice
Keeps one sample from POST /v1/collections/{id}/voice/samples as the voice of the mascot. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Request body (required)
application/jsonsample_idstring · uuid · requiredA sample from POST .../voice/samples.
namestringDefaults to "<name>'s voice".
Length: 1 to 80 characters
Responses
200 The kept voice
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Keep a voice",
"description": "Keeps one sample from POST /v1/collections/{id}/voice/samples as the voice of the mascot. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/KeepVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The kept voice",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyUpdateCollectionVoice"
}DELETE/v1/collections/{id}/voiceRemove the voice
Removes the mascot's voice. Talking animations already made keep their sound; new ones need a voice.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
204 Removed
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Remove the voice",
"description": "Removes the mascot's voice. Talking animations already made keep their sound; new ones need a voice.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"204": {
"description": "Removed",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyDeleteCollectionVoice"
}GET/v1/collections/{id}/voice/suggestionsSuggest voices
Returns voice ideas written for the mascot from its references and description. Each description is ready for POST /v1/collections/{id}/voice/samples. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
refreshqueryReturn other ideas than a plain request would.
string · true, false
avoidqueryComma-separated idea titles not to suggest again.
string
Responses
200 Voice ideas
application/json
dataobject · requiredNested fields
ideasarray · requiredNested fields
titlestring · requiredA few words, such as "Cozy and warm".
descriptionstring · requiredThe full description, ready for POST .../voice/samples.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Suggest voices",
"description": "Returns voice ideas written for the mascot from its references and description. Each description is ready for POST /v1/collections/{id}/voice/samples. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Return other ideas than a plain request would."
},
"required": false,
"description": "Return other ideas than a plain request would.",
"name": "refresh",
"in": "query"
},
{
"schema": {
"type": "string",
"maxLength": 500,
"description": "Comma-separated idea titles not to suggest again."
},
"required": false,
"description": "Comma-separated idea titles not to suggest again.",
"name": "avoid",
"in": "query"
}
],
"responses": {
"200": {
"description": "Voice ideas",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"ideas": {
"type": "array",
"items": {
"$ref": "#/components/schemas/VoiceIdea"
}
}
},
"required": [
"ideas"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollectionVoiceSuggestions"
}POST/v1/collections/{id}/voice/adjustAdjust a voice description
Rewrites a voice description in one direction, such as "Older" or "Slower", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredThe current voice description.
Length: 1 to 1000 characters
directionstringA direction such as "Older" or "A little grumpy". Omit it to only get directions for this description.
Length: 0 to 80 characters
Responses
200 The rewritten description
application/json
dataobject · requiredNested fields
descriptionstring · requiredThe rewritten description.
changesarray · requiredEach replaced or added passage. from is empty for added text.
Nested fields
fromstring · requiredtostring · requireddirectionsarray · requiredDirections that fit the new description.
Nested fields
string
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Adjust a voice description",
"description": "Rewrites a voice description in one direction, such as \"Older\" or \"Slower\", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdjustVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The rewritten description",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceAdjustment"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyAdjustCollectionVoice"
}POST/v1/collections/{id}/voice/samplesHear voice samples
Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/collections/{id}/voice within 24 hours.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredHow the voice sounds: age, pitch, pace, energy, texture, mood and accent.
Length: 20 to 1000 characters
sample_linestringThe line the samples read. Lines shorter than 100 characters are extended. Omit it for a line in the mascot's name.
Length: 0 to 500 characters
Responses
201 Three samples
application/json
dataobject · requiredNested fields
samplesarray · requiredNested fields
idstring · uuid · requiredPass it to PUT .../voice to keep this voice.
urlstring · uri · requireddurationnumber · nullable · requiredsample_linestring · requiredcost_creditsnumber · requiredexpires_atstring · requiredSamples not kept by then can no longer be kept.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Not enough credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Hear voice samples",
"description": "Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/collections/{id}/voice within 24 hours.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VoiceSamplesBody"
}
}
}
},
"responses": {
"201": {
"description": "Three samples",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceSamples"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"402": {
"description": "Not enough credits",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyCreateCollectionVoiceSample"
}GET/v1/collections/{id}/variants/{variantId}/voiceGet the voice of a variant
Returns the voice this variant speaks with: its own (source variant), the Original's until it gets one (source original), or null. sample_url is a short recording.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Responses
200 The voice, or null
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Get the voice of a variant",
"description": "Returns the voice this variant speaks with: its own (source variant), the Original's until it gets one (source original), or null. sample_url is a short recording.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"responses": {
"200": {
"description": "The voice, or null",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollectionVariantVoice"
}PUT/v1/collections/{id}/variants/{variantId}/voiceKeep a voice of a variant
Keeps one sample from POST /v1/collections/{id}/variants/{variantId}/voice/samples as the voice of an approved variant. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Request body (required)
application/jsonsample_idstring · uuid · requiredA sample from POST .../voice/samples.
namestringDefaults to "<name>'s voice".
Length: 1 to 80 characters
Responses
200 The kept voice
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Keep a voice of a variant",
"description": "Keeps one sample from POST /v1/collections/{id}/variants/{variantId}/voice/samples as the voice of an approved variant. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/KeepVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The kept voice",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyUpdateCollectionVariantVoice"
}DELETE/v1/collections/{id}/variants/{variantId}/voiceRemove the voice of a variant
Removes the variant's own voice; it speaks with the Original's voice again.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Responses
204 Removed
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Remove the voice of a variant",
"description": "Removes the variant's own voice; it speaks with the Original's voice again.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"responses": {
"204": {
"description": "Removed",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyDeleteCollectionVariantVoice"
}GET/v1/collections/{id}/variants/{variantId}/voice/suggestionsSuggest voices of a variant
Returns voice ideas written for an approved variant from its references and description. Each description is ready for POST /v1/collections/{id}/variants/{variantId}/voice/samples. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
refreshqueryReturn other ideas than a plain request would.
string · true, false
avoidqueryComma-separated idea titles not to suggest again.
string
Responses
200 Voice ideas
application/json
dataobject · requiredNested fields
ideasarray · requiredNested fields
titlestring · requiredA few words, such as "Cozy and warm".
descriptionstring · requiredThe full description, ready for POST .../voice/samples.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Suggest voices of a variant",
"description": "Returns voice ideas written for an approved variant from its references and description. Each description is ready for POST /v1/collections/{id}/variants/{variantId}/voice/samples. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Return other ideas than a plain request would."
},
"required": false,
"description": "Return other ideas than a plain request would.",
"name": "refresh",
"in": "query"
},
{
"schema": {
"type": "string",
"maxLength": 500,
"description": "Comma-separated idea titles not to suggest again."
},
"required": false,
"description": "Comma-separated idea titles not to suggest again.",
"name": "avoid",
"in": "query"
}
],
"responses": {
"200": {
"description": "Voice ideas",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"ideas": {
"type": "array",
"items": {
"$ref": "#/components/schemas/VoiceIdea"
}
}
},
"required": [
"ideas"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollectionVariantVoiceSuggestions"
}POST/v1/collections/{id}/variants/{variantId}/voice/adjustAdjust a voice description of a variant
Rewrites a voice description in one direction, such as "Older" or "Slower", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredThe current voice description.
Length: 1 to 1000 characters
directionstringA direction such as "Older" or "A little grumpy". Omit it to only get directions for this description.
Length: 0 to 80 characters
Responses
200 The rewritten description
application/json
dataobject · requiredNested fields
descriptionstring · requiredThe rewritten description.
changesarray · requiredEach replaced or added passage. from is empty for added text.
Nested fields
fromstring · requiredtostring · requireddirectionsarray · requiredDirections that fit the new description.
Nested fields
string
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Adjust a voice description of a variant",
"description": "Rewrites a voice description in one direction, such as \"Older\" or \"Slower\", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdjustVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The rewritten description",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceAdjustment"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyAdjustCollectionVariantVoice"
}POST/v1/collections/{id}/variants/{variantId}/voice/samplesHear voice samples of a variant
Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/collections/{id}/variants/{variantId}/voice within 24 hours.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredHow the voice sounds: age, pitch, pace, energy, texture, mood and accent.
Length: 20 to 1000 characters
sample_linestringThe line the samples read. Lines shorter than 100 characters are extended. Omit it for a line in the mascot's name.
Length: 0 to 500 characters
Responses
201 Three samples
application/json
dataobject · requiredNested fields
samplesarray · requiredNested fields
idstring · uuid · requiredPass it to PUT .../voice to keep this voice.
urlstring · uri · requireddurationnumber · nullable · requiredsample_linestring · requiredcost_creditsnumber · requiredexpires_atstring · requiredSamples not kept by then can no longer be kept.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Not enough credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Hear voice samples of a variant",
"description": "Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/collections/{id}/variants/{variantId}/voice within 24 hours.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VoiceSamplesBody"
}
}
}
},
"responses": {
"201": {
"description": "Three samples",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceSamples"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"402": {
"description": "Not enough credits",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyCreateCollectionVariantVoiceSample"
}GET/v1/projectsList projects
Returns all projects owned by the authenticated user, paginated. Projects are the top-level containers for mascots. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 List of projects
application/json
dataarray · requiredNested fields
objectstringResource type. Always "project".
Values: "project"
idstring · uuid · requirednamestring · requiredorganization_idstring · uuid · nullable · requiredcreated_atstring · requiredupdated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Projects"
],
"summary": "List projects",
"description": "Returns all projects owned by the authenticated user, paginated. Projects are the top-level containers for mascots. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"200": {
"description": "List of projects",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectListResponse"
},
"example": {
"data": [
{
"id": "04dae799-dd9a-4296-ba86-9e3913c2f8d1",
"name": "test",
"created_at": "2026-04-08T03:30:21.168491+00:00",
"updated_at": "2026-04-08T03:30:21.168491+00:00",
"organization_id": "bc5a4520-ee23-46e7-b714-2835bd3a7f80"
}
],
"meta": {
"pagination": {
"total": 2,
"limit": 5,
"offset": 0,
"has_more": false
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "listProjects"
}POST/v1/projectsCreate a project
Creates a new project under the authenticated user. Projects are lightweight containers - create one per product or per workspace. Returns 201 with the new project record. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
Request body
application/jsonnamestring · requiredProject display name. 1 to 255 characters.
Length: 1 to 255 characters
Responses
201 Created project
application/json
dataobject · requiredNested fields
objectstringResource type. Always "project".
Values: "project"
idstring · uuid · requirednamestring · requiredorganization_idstring · uuid · nullable · requiredcreated_atstring · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Projects"
],
"summary": "Create a project",
"description": "Creates a new project under the authenticated user. Projects are lightweight containers - create one per product or per workspace. Returns 201 with the new project record. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateProjectBody"
}
}
}
},
"responses": {
"201": {
"description": "Created project",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProjectResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "createProject",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}GET/v1/collectionsList collections
Returns all collections owned by the authenticated user, paginated. A collection is a single mascot character with its own style, references, and items. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
project_idqueryFilter to this project.
string
typequeryFilter by type, e.g. "mascot".
string
Responses
200 List of collections
application/json
dataarray · requiredNested fields
objectstringResource type. Always "mascot".
Values: "mascot"
idstring · uuid · requirednamestring · requiredtypestring · requiredproject_idstring · uuidconfigobjectNested fields
promptstring · requiredreference_asset_idsarray · requiredNested fields
string
style_cardobject · nullable · requiredcaution_listarray · requiredNested fields
string
is_publishedbooleanslugstring · nullableuser_prefixstring · nullablecdn_statusarrayNested fields
asset_idstring · uuid · requireditem_namestring · nullable · requiredtypestring · requiredcdn_urlstring · uri · requiredstatusstring · requiredfile_sizenumber · nullable · requiredcreated_atstring · requiredupdated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Collections"
],
"summary": "List collections",
"description": "Returns all collections owned by the authenticated user, paginated. A collection is a single mascot character with its own style, references, and items. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter to this project."
},
"required": false,
"description": "Filter to this project.",
"name": "project_id",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Filter by type, e.g. \"mascot\"."
},
"required": false,
"description": "Filter by type, e.g. \"mascot\".",
"name": "type",
"in": "query"
}
],
"responses": {
"200": {
"description": "List of collections",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CollectionListResponse"
},
"example": {
"data": [
{
"id": "f9503022-a991-46ea-bf8c-d628c921b6b0",
"name": "v1-api-test-cat-1776591403",
"type": "mascot",
"project_id": "04dae799-dd9a-4296-ba86-9e3913c2f8d1",
"project_name": "test",
"is_published": true,
"public_slug": "v1-api-test-cat-1776591403-rmau1uyd",
"user_prefix": "fda8417d",
"created_at": "2026-04-19T09:36:43.46139+00:00"
}
],
"meta": {
"pagination": {
"total": 6,
"limit": 5,
"offset": 0,
"has_more": true
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollections"
}POST/v1/collectionsCreate a mascot (collection)
This is the primary way to create a mascot. In the API the resource is called collection - today one collection holds one mascot so the terms are interchangeable. Recommended input is reference images (reference_image_urls or reference_asset_ids from POST /v1/upload) - one or more images of the character. The references ARE the mascot; you do not need to describe it in prompt. Use context to add things the image cannot express: personality, consistency rules ("always wears red sneakers"), forbidden variants ("never without the hat"), brand tone. The collection is assigned to a project and gets a public CDN slug. Creation with existing references or name/context only is free. Providing prompt without references generates one reference for 1 credit. Failed generation, storage or persistence triggers a refund, with background retries if immediate repayment fails. Use Idempotency-Key to replay a request without generating or charging again. Future /generate calls use the style automatically extracted from the references.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonproject_idstring · uuid · requiredProject to create the collection in. List projects via GET /v1/projects.
namestringDisplay name. Defaults to a generated name if omitted.
promptstringOptional - do not set this if your references already show the mascot clearly. The reference images ARE the character. Only use prompt when you cannot provide references (pure text-to-mascot). When references are present, a prompt is auto-extracted from them. Without references, prompt generates one reference for 1 credit; a failed creation is refunded.
contextstringExtra hints the image alone cannot convey: personality and behavior ("curious, cautious, never aggressive"), consistency rules ("always has a small white star on left ear"), forbidden variants ("never show without the hat"), brand tone. Not a character description - the references cover that.
typestringCollection type. Defaults to "mascot".
Default: "mascot"
stylestringStyle ID or name. List styles via GET /v1/styles.
reference_image_urlsarrayRecommended entry point. Public image URLs of the mascot - at least one, up to 6. Each public HTTP(S) URL is downloaded with a 10 MB limit and a 15-second deadline; private addresses and unsafe redirects are rejected. PNG, JPEG, WebP, GIF and SVG are supported; SVG is converted to PNG. Each is stored as an asset. The first reference acts as the canonical look; additional ones widen angle/pose coverage. If you also pass reference_asset_ids, totals combine up to 6.
Nested fields
string
reference_asset_idsarrayExisting asset IDs (from POST /v1/upload or another collection) to link as references. Assets are not duplicated. Use this when you already uploaded the image via /v1/upload. Max 6 references combined with reference_image_urls.
Nested fields
string
settingsobjectCollection settings. cdn_enabled: whether new assets auto-publish to the CDN. animation_sizes: pixel sizes to auto-generate variants for, e.g. [480, 360]. Recommended values: 720, 480, 360, 240. Full supported range: 32 to 1920.
Nested fields
cdn_enabledbooleanDefault: true
animation_sizesarrayNested fields
number
Responses
201 Created collection
application/json
dataobject · requiredNested fields
objectstringResource type. Always "mascot".
Values: "mascot"
idstring · uuid · requirednamestring · requiredtypestring · requiredproject_idstring · uuidconfigobjectNested fields
promptstring · requiredreference_asset_idsarray · requiredNested fields
string
style_cardobject · nullable · requiredcaution_listarray · requiredNested fields
string
is_publishedbooleanslugstring · nullableuser_prefixstring · nullablecdn_statusarrayNested fields
asset_idstring · uuid · requireditem_namestring · nullable · requiredtypestring · requiredcdn_urlstring · uri · requiredstatusstring · requiredfile_sizenumber · nullable · requiredcreated_atstring · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Collections"
],
"summary": "Create a mascot (collection)",
"description": "This is the primary way to create a mascot. In the API the resource is called `collection` - today one collection holds one mascot so the terms are interchangeable. Recommended input is reference images (`reference_image_urls` or `reference_asset_ids` from POST /v1/upload) - one or more images of the character. The references ARE the mascot; you do not need to describe it in `prompt`. Use `context` to add things the image cannot express: personality, consistency rules (\"always wears red sneakers\"), forbidden variants (\"never without the hat\"), brand tone. The collection is assigned to a project and gets a public CDN slug. Creation with existing references or name/context only is free. Providing prompt without references generates one reference for 1 credit. Failed generation, storage or persistence triggers a refund, with background retries if immediate repayment fails. Use Idempotency-Key to replay a request without generating or charging again. Future /generate calls use the style automatically extracted from the references.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateCollectionBody"
}
}
}
},
"responses": {
"201": {
"description": "Created collection",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CollectionResponse"
},
"example": {
"data": {
"id": "f9503022-a991-46ea-bf8c-d628c921b6b0",
"name": "v1-api-test-cat-1776591403",
"slug": "v1-api-test-cat-1776591403-rmau1uyd",
"type": "mascot",
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf"
],
"settings": {
"cdn_enabled": true,
"animation_sizes": []
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyCreateCollection",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
]
}GET/v1/collections/{id}Get collection details
Returns the full collection record including config (prompt, reference_asset_ids, style_card, caution_list) and cdn_status. Returns 404 if the collection does not exist or is not owned by the caller.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 Collection details with cdn_status
application/json
dataobject · requiredNested fields
objectstringResource type. Always "mascot".
Values: "mascot"
idstring · uuid · requirednamestring · requiredtypestring · requiredproject_idstring · uuidconfigobjectNested fields
promptstring · requiredreference_asset_idsarray · requiredNested fields
string
style_cardobject · nullable · requiredcaution_listarray · requiredNested fields
string
is_publishedbooleanslugstring · nullableuser_prefixstring · nullablecdn_statusarrayNested fields
asset_idstring · uuid · requireditem_namestring · nullable · requiredtypestring · requiredcdn_urlstring · uri · requiredstatusstring · requiredfile_sizenumber · nullable · requiredcreated_atstring · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Collections"
],
"summary": "Get collection details",
"description": "Returns the full collection record including config (prompt, reference_asset_ids, style_card, caution_list) and cdn_status. Returns 404 if the collection does not exist or is not owned by the caller.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Collection details with cdn_status",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CollectionResponse"
},
"example": {
"data": {
"id": "f9503022-a991-46ea-bf8c-d628c921b6b0",
"name": "v1-api-test-cat-1776591403",
"type": "mascot",
"project_id": "04dae799-dd9a-4296-ba86-9e3913c2f8d1",
"config": {
"prompt": "terracotta clay cat mascot with big eyes and speckled texture",
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf"
],
"style_card": null,
"caution_list": []
},
"is_published": true,
"slug": "v1-api-test-cat-1776591403-rmau1uyd",
"user_prefix": "fda8417d",
"cdn_status": [],
"created_at": "2026-04-19T09:36:43.46139+00:00",
"updated_at": "2026-04-19T09:36:46.966862+00:00"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollection"
}PATCH/v1/collections/{id}Update collection metadata
Updates a collection name, prompt, or public slug. Returns { updated: true }. Returns 404 if not found or not owned by the caller. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Request body (required)
Request body
application/jsonnamestringNew display name.
contextstringUpdated brand or product context.
slugstringCDN slug for this collection. Used in the public URL path: https://assets.masko.ai/:user_prefix/:slug/... Globally unique across all collections. Normalized server-side: lowercased, non-alphanumeric stripped (hyphens kept), trimmed. After normalization must be 2 to 50 characters. Returns 409 if taken.
Length: 2 to 50 characters
configobjectRaw config object merged into existing config. Advanced use only: prefer dedicated endpoints /references and /settings; set slug with PATCH /v1/collections/:id.
Responses
200 Updated collection
application/json
dataobject · requiredNested fields
updatedboolean · requiredslugstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Collections"
],
"summary": "Update collection metadata",
"description": "Updates a collection name, prompt, or public slug. Returns { updated: true }. Returns 404 if not found or not owned by the caller. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCollectionBody"
}
}
}
},
"responses": {
"200": {
"description": "Updated collection",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatedFlagResponse"
},
"example": {
"data": {
"updated": true
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyUpdateCollection"
}GET/v1/collections/{id}/itemsList items in a collection
Returns paginated items in a collection. An item groups related assets (e.g. "wave" item may have an image, a transparent image, and animation variants). Filter by type to narrow results. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
typequerystring
Responses
200 List of items
application/json
dataarray · requiredNested fields
objectstringResource type. Always "item".
Values: "item"
idstring · uuid · requirednamestring · requiredtypestring · requiredpromptstring · requiredpublic_slugstring · nullable · requiredmetadataobject · nullablecreated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "List items in a collection",
"description": "Returns paginated items in a collection. An item groups related assets (e.g. \"wave\" item may have an image, a transparent image, and animation variants). Filter by `type` to narrow results. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string"
},
"required": false,
"name": "type",
"in": "query"
}
],
"responses": {
"200": {
"description": "List of items",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ItemListResponse"
},
"example": {
"data": [],
"meta": {
"pagination": {
"total": 0,
"limit": 5,
"offset": 0,
"has_more": false
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollectionItems"
}GET/v1/collections/{id}/items/{itemId}Get item details
Returns the item record with all its generated assets (images, animations, logos). Returns 404 if the item does not exist or is not in the given collection. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
itemIdpath · requiredstring
Responses
200 Item details with assets
application/json
dataobject · requiredNested fields
Item
objectstringResource type. Always "item".
Values: "item"
idstring · uuid · requirednamestring · requiredtypestring · requiredpromptstring · requiredpublic_slugstring · nullable · requiredmetadataobject · nullablecreated_atstring · requiredOption 2
assetsarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredcollection_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "Get item details",
"description": "Returns the item record with all its generated assets (images, animations, logos). Returns 404 if the item does not exist or is not in the given collection. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "itemId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Item details with assets",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ItemResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollectionItem"
}PATCH/v1/collections/{id}/items/{itemId}Update item name or prompt
Updates the item name (used to derive the public slug) and/or the prompt. Does not re-generate assets. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
itemIdpath · requiredstring
Request body (required)
Request body
application/jsonnamestringLength: 1 to unbounded characters
promptstringResponses
200 Updated item
application/json
dataobject · requiredNested fields
Item
objectstringResource type. Always "item".
Values: "item"
idstring · uuid · requirednamestring · requiredtypestring · requiredpromptstring · requiredpublic_slugstring · nullable · requiredmetadataobject · nullablecreated_atstring · requiredOption 2
assetsarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredcollection_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "Update item name or prompt",
"description": "Updates the item name (used to derive the public slug) and/or the prompt. Does not re-generate assets. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "itemId",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateItemBody"
}
}
}
},
"responses": {
"200": {
"description": "Updated item",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ItemResponse"
},
"example": {
"data": {
"id": "e8ca0d1b-b445-46f6-862f-26b26ac2c6ff",
"name": "sitting-calmly",
"prompt": "sitting on ground with closed eyes peacefully",
"public_slug": "sitting",
"created_at": "2026-04-19T09:44:26.659167+00:00"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyUpdateCollectionItem"
}DELETE/v1/collections/{id}/items/{itemId}Archive an item
Soft-deletes (archives) the item and its assets. Files are retained but filtered from reads. Returns 204 on success. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
itemIdpath · requiredstring
Responses
204 Archived
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "Archive an item",
"description": "Soft-deletes (archives) the item and its assets. Files are retained but filtered from reads. Returns 204 on success. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "itemId",
"in": "path"
}
],
"responses": {
"204": {
"description": "Archived",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyDeleteCollectionItem"
}GET/v1/collections/{id}/assetsList assets in a collection
Returns paginated assets in a collection (images, videos, transparent variants). Each asset has a signed file_url (1-hour expiry) and a cdn_url when published. Filter by type or item_id. Set include_file_urls=false for faster metadata-only listings. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
typequerystring
item_idquerystring
include_file_urlsqueryWhether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings.
string · true, false
Responses
200 List of assets
application/json
dataarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredcollection_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Assets"
],
"summary": "List assets in a collection",
"description": "Returns paginated assets in a collection (images, videos, transparent variants). Each asset has a signed `file_url` (1-hour expiry) and a `cdn_url` when published. Filter by `type` or `item_id`. Set `include_file_urls=false` for faster metadata-only listings. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string"
},
"required": false,
"name": "type",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": false,
"name": "item_id",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Whether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings."
},
"required": false,
"description": "Whether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings.",
"name": "include_file_urls",
"in": "query"
}
],
"responses": {
"200": {
"description": "List of assets",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetListResponse"
},
"example": {
"data": [
{
"id": "5114bec3-b92a-4917-8675-84fce713d3cf",
"type": "image",
"status": "completed",
"metadata": {},
"item_id": null,
"file_url": "https://storage.googleapis.com/masco-media/references/.../f4bdfb19.png?GoogleAccessId=...&Expires=...&Signature=...",
"cdn_url": null,
"created_at": "2026-04-19T09:36:46.95543+00:00"
}
],
"meta": {
"pagination": {
"total": 2,
"limit": 5,
"offset": 0,
"has_more": false
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollectionAssets"
}GET/v1/collections/{id}/cdn-exportExport published CDN links
Returns the same clean hosted-link JSON shown in the collection page Get Links export modal. This endpoint is built from published CDN assets, not raw item types, so pose/image items with attached video loops are included. Includes sticker URL arrays and complete cursor-follower interactions with nine WebP frame URLs and a JSON manifest URL. Only completed, non-archived hosted assets are included. Create cursor followers with POST /v1/collections/{id}/interactive. Use the raw items and assets endpoints for IDs, prompts, metadata, and status checks. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 Collection CDN export JSON
application/json
collectionstring · requireditemsarray · requiredNested fields
namestring · requiredsvgstring · uriimagestring · uritransparent_imagestring · urianimationsarrayNested fields
object
logosobjectstickersarrayNested fields
string
interactionsarrayNested fields
versionnumber · requiredValues: 1
idstring · uuid · requirednamestring · requiredkindstring · requiredValues: "cursor-follower"
widthnumber · requiredValues: 1024
heightnumber · requiredValues: 1024
framesobject · requiredNested fields
up-leftstring · uri · requiredupstring · uri · requiredup-rightstring · uri · requiredleftstring · uri · requiredcenterstring · uri · requiredrightstring · uri · requireddown-leftstring · uri · requireddownstring · uri · requireddown-rightstring · uri · requiredmanifest_urlstring · uri · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 CDN export is not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Collections"
],
"summary": "Export published CDN links",
"description": "Returns the same clean hosted-link JSON shown in the collection page Get Links export modal. This endpoint is built from published CDN assets, not raw item types, so pose/image items with attached video loops are included. Includes sticker URL arrays and complete cursor-follower interactions with nine WebP frame URLs and a JSON manifest URL. Only completed, non-archived hosted assets are included. Create cursor followers with POST /v1/collections/{id}/interactive. Use the raw items and assets endpoints for IDs, prompts, metadata, and status checks. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Collection CDN export JSON",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CdnExportResponse"
},
"example": {
"collection": "Fox Mascot",
"items": [
{
"name": "card-sit",
"image": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.png",
"transparent_image": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit-transparent.png",
"animations": [
{
"video": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.mp4",
"transparent_video_webm": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.webm",
"transparent_video_mov": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.mov",
"transparent_video_android": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit-android.mp4",
"transparent_video_android_360": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit-360.mp4"
}
]
}
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "CDN export is not ready",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollectionCdnExport"
}GET/v1/assetsList assets across all collections
Returns paginated assets spanning every mascot owned by the caller, each annotated with its mascot_id. Filter by type, status, or mascot_id. Set include_file_urls=false for faster metadata-only listings. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
mascot_idqueryFilter to a single mascot. Omit to list across all of your mascots.
string
typequeryFilter by asset type: image, transparent_image, video, webm, hevc, stacked_video, svg, etc.
string
is_archivedqueryInclude archived assets. Defaults to false (active only).
string · true, false
item_idqueryFilter to a single item within a mascot.
string
include_file_urlsqueryWhether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings.
string · true, false
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
collection_idqueryLegacy-only filter. Use mascot_id for new clients; never send both.
string
Responses
200 List of assets across your collections
application/json
StudioAssetListResponse
dataarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
AssetListResponse
dataarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredcollection_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Assets"
],
"summary": "List assets across all collections",
"description": "Returns paginated assets spanning every mascot owned by the caller, each annotated with its `mascot_id`. Filter by `type`, `status`, or `mascot_id`. Set `include_file_urls=false` for faster metadata-only listings. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter to a single mascot. Omit to list across all of your mascots."
},
"required": false,
"description": "Filter to a single mascot. Omit to list across all of your mascots.",
"name": "mascot_id",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Filter by asset type: image, transparent_image, video, webm, hevc, stacked_video, svg, etc."
},
"required": false,
"description": "Filter by asset type: image, transparent_image, video, webm, hevc, stacked_video, svg, etc.",
"name": "type",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Include archived assets. Defaults to false (active only)."
},
"required": false,
"description": "Include archived assets. Defaults to false (active only).",
"name": "is_archived",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter to a single item within a mascot."
},
"required": false,
"description": "Filter to a single item within a mascot.",
"name": "item_id",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Whether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings."
},
"required": false,
"description": "Whether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings.",
"name": "include_file_urls",
"in": "query"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter to a single mascot. Omit to list across all of your mascots."
},
"required": false,
"description": "Legacy-only filter. Use mascot_id for new clients; never send both.",
"name": "collection_id",
"in": "query",
"deprecated": true
}
],
"responses": {
"200": {
"description": "List of assets across your collections",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioAssetListResponse"
},
{
"$ref": "#/components/schemas/AssetListResponse"
}
]
},
"example": {
"data": [
{
"id": "5114bec3-b92a-4917-8675-84fce713d3cf",
"type": "image",
"status": "completed",
"metadata": {},
"item_id": null,
"mascot_id": "f9503022-a991-46ea-bf8c-d628c921b6b0",
"file_url": "https://storage.googleapis.com/masco-media/...signed-url...",
"cdn_url": null,
"created_at": "2026-04-19T09:36:46.95543+00:00"
}
],
"meta": {
"pagination": {
"total": 215,
"limit": 3,
"offset": 0,
"has_more": true
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "listAssets"
}GET/v1/assets/{id}Get asset details
Returns a single asset record with its signed file_url and optional cdn_url. Returns 404 if the asset is not owned by the caller. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Asset details
application/json
StudioAssetResponse
dataobject · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · requiredAssetResponse
dataobject · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredcollection_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Assets"
],
"summary": "Get asset details",
"description": "Returns a single asset record with its signed `file_url` and optional `cdn_url`. Returns 404 if the asset is not owned by the caller. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"200": {
"description": "Asset details",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioAssetResponse"
},
{
"$ref": "#/components/schemas/AssetResponse"
}
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "getAsset"
}DELETE/v1/assets/{id}Archive an asset
Soft-deletes (archives) a single asset. The underlying file is retained on storage but filtered from reads. Returns 204 on success. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
204 Archived
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Assets"
],
"summary": "Archive an asset",
"description": "Soft-deletes (archives) a single asset. The underlying file is retained on storage but filtered from reads. Returns 204 on success. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"204": {
"description": "Archived",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "deleteAsset"
}POST/v1/assets/{id}/stickerGenerate a sticker from an image asset
Creates a transparent sticker_image derivative from a completed image asset. The generated sticker preserves the selected image subject, adds a bold white sticker border, generates transparency directly, and costs 1 credit.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
201 Sticker generated
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredstatusstring · requiredValues: "completed"
source_asset_idstring · uuid · requiredasset_idsobject · requiredNested fields
sticker_imagestring · uuid · requiredestimated_costnumber · requiredsticker_imageobject · requiredNested fields
idstring · uuid · requiredtypestring · requiredValues: "sticker_image"
statusstring · requiredValues: "completed"
file_urlstring · uri · requiredwidthinteger · nullableRange: 0 to unbounded
heightinteger · nullableRange: 0 to unbounded
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Assets"
],
"summary": "Generate a sticker from an image asset",
"description": "Creates a transparent `sticker_image` derivative from a completed image asset. The generated sticker preserves the selected image subject, adds a bold white sticker border, generates transparency directly, and costs 1 credit.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"201": {
"description": "Sticker generated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StickerGenerateResponse"
},
"example": {
"data": {
"job_id": "8c458fc7-df42-4e5a-b5cb-8768c4d9f4a1",
"status": "completed",
"source_asset_id": "5114bec3-b92a-4917-8675-84fce713d3cf",
"asset_ids": {
"sticker_image": "bafc3f5e-e90c-4cf8-88c2-bb5bcf3c5088"
},
"estimated_cost": 1,
"sticker_image": {
"id": "bafc3f5e-e90c-4cf8-88c2-bb5bcf3c5088",
"type": "sticker_image",
"status": "completed",
"file_url": "https://storage.googleapis.com/masco-media/...signed-url...",
"width": 1024,
"height": 1024
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "stickerAsset"
}POST/v1/assets/{id}/refine-maskRefine a video asset mask
Refines the active background mask for a completed video asset, then re-exports the requested derived formats and sizes from the refined mask. Omit formats and sizes to infer the currently active linked variants and refresh all of them. Old matching derived assets are archived and unlinked only after replacement assets are successfully published. Defaults to dry_run=true so agents can inspect the exact plan before starting the workflow.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
Request body
application/jsonopstringMask operation. add unions the prompted subject into the active mask; subtract removes it from the active mask.
Values: "add", "subtract"
Default: "add"
promptstring · requiredText prompt for the mask region to refine, e.g. "the soccer ball".
Length: 1 to unbounded characters
modelstringBackground mask refinement quality. Defaults to pro.
Values: "original", "pro"
Default: "pro"
edge_cleanupobjectOptional edge cleanup pass applied to the refined mask.
Default: {"enabled":true,"size":512}
Nested fields
enabledbooleanDefault: true
sizeintegerDefault: 512
Range: 128 to 1024
formatsarrayDerived formats to regenerate. Omit to infer the active formats already linked to the video.
Items: 1 to unbounded
Nested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarraySize variants to regenerate. Omit to infer active linked sizes, so all currently used variants are refreshed.
Nested fields
integer
archive_oldbooleanArchive and unlink old matching derived assets after replacement assets are successfully published.
Default: true
dry_runbooleanReturn the exact refinement/export plan without starting the workflow.
Default: true
Responses
200 Mask refinement dry-run plan returned
application/json
StudioAssetMaskRefinementResponse
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
mascot_idstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstringAssetMaskRefinementResponse
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
collectionIdstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstring202 Mask refinement job started
application/json
StudioAssetMaskRefinementResponse
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
mascot_idstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstringAssetMaskRefinementResponse
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
collectionIdstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Assets"
],
"summary": "Refine a video asset mask",
"description": "Refines the active background mask for a completed video asset, then re-exports the requested derived formats and sizes from the refined mask. Omit `formats` and `sizes` to infer the currently active linked variants and refresh all of them. Old matching derived assets are archived and unlinked only after replacement assets are successfully published. Defaults to `dry_run=true` so agents can inspect the exact plan before starting the workflow.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RefineAssetMaskBody"
}
}
}
},
"responses": {
"200": {
"description": "Mask refinement dry-run plan returned",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioAssetMaskRefinementResponse"
},
{
"$ref": "#/components/schemas/AssetMaskRefinementResponse"
}
]
},
"example": {
"data": {
"target": "video_mask_refinement",
"dry_run": true,
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"bg_job_id": "5eb2db13-0000-0000-0000-000000000001",
"prompt": "the soccer ball",
"op": "add",
"model": "pro",
"edge_cleanup": {
"enabled": true,
"size": 512
},
"formats": [
"webm",
"hevc",
"stacked_video"
],
"sizes": [
360
],
"export_count": 6,
"archive_old": true,
"active_variants": []
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"202": {
"description": "Mask refinement job started",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioAssetMaskRefinementResponse"
},
{
"$ref": "#/components/schemas/AssetMaskRefinementResponse"
}
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "refineMaskAsset"
}POST/v1/collections/{id}/referencesAdd a reference image
Adds an image as a collection-scoped style reference (up to 6 references). Pass either url to download and store a new reference, or asset_id to copy an existing uploaded/generated image into this collection when needed. The returned reference_asset_ids are always collection-scoped assets that the app can display and future generations can use. Invalidates the cached style_card, which will be re-extracted on next generation. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonasset_idstring · uuidAsset ID of an existing uploaded or generated image. If the asset is not already scoped to this collection, the API creates a collection-scoped reference copy and stores that copied asset ID in reference_asset_ids.
urlstring · uriPublic HTTP(S) image URL, up to 10 MB with a 15-second download deadline. Private addresses and unsafe redirects are rejected. PNG, JPEG, WebP, GIF and SVG are supported; SVG is converted to PNG. Downloaded and stored as a collection-scoped reference asset.
Responses
201 Reference added
application/json
dataobject · requiredNested fields
reference_asset_idsarray · requiredNested fields
string
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"References"
],
"summary": "Add a reference image",
"description": "Adds an image as a collection-scoped style reference (up to 6 references). Pass either `url` to download and store a new reference, or `asset_id` to copy an existing uploaded/generated image into this collection when needed. The returned `reference_asset_ids` are always collection-scoped assets that the app can display and future generations can use. Invalidates the cached style_card, which will be re-extracted on next generation. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AddReferenceBody"
}
}
}
},
"responses": {
"201": {
"description": "Reference added",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReferenceResponse"
},
"example": {
"data": {
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf",
"b357dfe9-92ab-4696-beb3-4f36779808f2"
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyCreateCollectionReference"
}DELETE/v1/collections/{id}/references/{assetId}Remove a reference image
Removes an asset from the collection reference list. Returns the updated reference_asset_ids array. Invalidates the cached style_card. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
assetIdpath · requiredstring
Responses
200 Reference removed
application/json
dataobject · requiredNested fields
reference_asset_idsarray · requiredNested fields
string
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"References"
],
"summary": "Remove a reference image",
"description": "Removes an asset from the collection reference list. Returns the updated `reference_asset_ids` array. Invalidates the cached style_card. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "assetId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Reference removed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReferenceResponse"
},
"example": {
"data": {
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf"
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyDeleteCollectionReference"
}POST/v1/collections/{id}/generateGenerate image or animation
Starts an async generation job. Returns 202 with data.job_id - poll via GET /v1/jobs/{id} (or pass ?wait=true for long-polling). Cost by type: image=1, animation=2/sec with animation_model=standard (5–15s) or 6/sec with animation_model=premium (4–30s), default 5s for either choice (+1 if no source image); omitting animation_model preserves legacy 5/sec, 4–10s, default 4s, logo=5, edit=1 for images, scene=3, reverse=0. For type: animation, you can skip providing a source image: pass only animation_prompt (and optionally image_prompt) and the system generates a fresh source image first, then animates it. To animate an uploaded image directly, pass its POST /v1/upload asset_id as source_image_asset_id with type=animation. The upload is imported into the mascot without changing references; no image-generation credits are charged. Existing mascot assets preserve their saved context. Before video generation, non-square starting and ending images are center-cropped to square; square images are reused unchanged. Optional source_image_crop and end_image_crop specify integer x, y, width and height in pixels after image orientation. Cropped copies preserve the originals and incur no extra credits. Invalid crops return 400 before charging. If you have an existing item, pass item_id to animate/edit its current image. For image generation and image edits, pass optional visual_references for one-time pose, expression, motion, prop, style, or scene cues; these references do not become collection mascot references. Scene generation and scene editing also use this endpoint with type: "scene". For a new scene, optional source_asset_id selects its character reference and saved variant context. For scene edits use source_image_asset_id with edit_instructions; the two source fields are mutually exclusive. Talking animations: pass speech with type: animation and the mascot says the line in its voice (see the Voice endpoints). The length follows the speech, 5 seconds to 2 minutes at 3 credits per second; the receipt charges the longest the line could need and unused seconds are refunded once the voice is recorded. Talking adds audio (MP3) and transcript (JSON) assets. With dry_run: true it returns 200 with the estimate instead. Returns 409 with details.reason voice_required when the mascot has no voice yet. Returns 402 if credits are insufficient.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonGenerateImageBody
Generate a static image (pose). Cost: 1 credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become collection mascot references and do not update the collection style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "image"
image_promptstringWhat the character is doing in the image, e.g. "waving hello with a big smile".
GenerateAnimationBody
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
animation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
typestring · requiredValues: "animation"
animation_promptstringHow the character moves, e.g. "bouncing up and down energetically". You can generate an animation directly from just this: when neither item_id nor source_image_asset_id is passed, the system generates a source image first (adds 1 credit), then animates it.
image_promptstringUsed only when no source image exists. The character description that gets passed to image generation before animation starts.
source_image_asset_idstring · uuidCompleted image asset to animate, including an unattached image from POST /v1/upload. Unattached uploads owned by the caller are imported into this mascot without changing references or generating a new image; only animation credits are charged. The original upload is preserved. Non-square inputs are center-cropped to square before animation. Square inputs are reused unchanged. Use source_image_crop for explicit framing. Optional variant_id freezes the selected context for this import. Existing mascot assets retain their saved context. Prefer item_id to reuse an existing item image.
source_image_cropobjectOptional square crop for the starting image: integer x, y, width, height in pixels after EXIF orientation. Defaults to a centered square for non-square images. Requires source_image_asset_id or an item_id with an existing image. Cropping is free and preserves the original file.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_cropobjectOptional square crop for end_image_asset_id, in pixels after EXIF orientation. Defaults to a centered square for non-square end frames. Requires end_image_asset_id.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_asset_idstring · uuidTarget pose image for a transition, including a pose from another variant. The prompt writer uses the starting and ending images plus their separate saved contexts to write the transition direction. The job records both endpoints and the exact prompt under generation_context.transition. Forces loop to false.
loopbooleanWhether the animation loops seamlessly. Defaults to true. Automatically set to false when end_image_asset_id is provided.
reversebooleanReverse an existing video. Used with reverse_of_video_asset_id. Costs 0 credits.
reverse_of_video_asset_idstring · uuidAsset ID of the forward video to reverse. Required when reverse is true.
auto_reversebooleanTransitions only: also generate the reverse transition (end to source) at 0 extra credits. Requires source_image_asset_id + end_image_asset_id. Response includes a reverse_job field.
reverse_namestringName for the auto-generated reverse item. Defaults to "<item name> (Reverse)".
sizesarrayRequested animation size variants in pixels, e.g. [480, 360]. Filtered against the collection settings. No extra credit cost.
Nested fields
integer
speechobjectMakes a talking animation: the mascot says this line in its voice (from its context, or its variant's), starting from item_id or source_image_asset_id and ending on end_image_asset_id (or the start image). The length comes from the speech: 5 seconds to 2 minutes at 3 credits per second. A talk longer than one take (15 seconds) is cut in its pauses into takes that start and end on the start image, then joined. The receipt adds audio and transcript assets and an estimate.
Nested fields
scriptstringWhat the mascot says, with movements in square brackets placed where each one starts, e.g. "[waves hello, excited] Hi! I'm Gubby. [points to the right] The docs are right here!". A feeling after a comma also steers the voice.
Length: 1 to 6000 characters
textstringThe words alone, instead of script. Masko writes the movements, following direction when given, and returns the script it used.
Length: 1 to 3000 characters
directionstringWith text: how the mascot should perform the line, e.g. "excited about what he does, points at the docs at the end".
Length: 0 to 500 characters
languagestringISO 639-1 code of the line. Omit it to detect the language from the words.
Pattern: ^[a-z]{2}$
dry_runbooleanWith speech: return the estimate (and the script, when Masko writes the movements) without charging or generating.
GenerateEditBody
Edit an existing image or video with natural-language instructions. Cost: 1 credit for images, 5 credits per second for videos, rounded up to a whole credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become collection mascot references and do not update the collection style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "edit"
edit_instructionsstring · requiredWhat to change on the source asset, e.g. "add a santa hat". Required.
source_image_asset_idstring · uuidAsset ID of the image to edit. Use data.asset_ids.image from a previous /generate response. If you pass item_id, the source is resolved from the item automatically.
source_video_asset_idstring · uuidCompleted 4–30 second video in this collection to edit at 720p. Duration and aspect ratio are preserved. Uses the source clip and its source item. For transition clips, edits preserve both saved endpoint identities and their order; variant_id does not restyle the whole clip. The edit prompt is recorded in generation_context.transition_edit.
GenerateLogoBody
Generate an iconic/logo version of the mascot. Cost: 5 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "logo"
request_idstring · uuidStable retry key. Requires item_id; reuse unchanged after an uncertain response.
logo_style_idstringPreset from GET /v1/logo-styles. Explicit style name/instruction override preset fields.
Values: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
logo_descriptionstringWhat the logo should look like, e.g. "iconic face-only, circular badge". Defaults to "Iconic representation of the character".
logo_style_namestringShort label for the logo style, e.g. "Flat", "Retro". Defaults to "Flat".
logo_style_instructionstringDetailed style instructions, e.g. "Flat design with solid colors, no gradients".
GenerateSceneBody
Generate a 4K scene image of the mascot in an environment, or edit an existing scene. Cost: 3 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "scene"
source_asset_idstring · uuidFor a new scene: completed character image to use as its reference. Its saved variant context is retained unless an explicitly selected variant intentionally includes this reference. Use source_image_asset_id instead to edit an existing scene.
scenestringThe environment, e.g. "cozy reading nook with afternoon light". Required unless editing (source_image_asset_id + edit_instructions).
actionstringWhat the mascot is doing in the scene, e.g. "reading a book". Required unless editing.
aspect_ratiostringOutput aspect ratio. Use 4:3 for marketplace_card or marketplace_story, 1:1 for marketplace_square, 21:9 for hero_desktop, and 4:5 or 3:4 for hero_mobile.
Values: "4:3", "1:1", "21:9", "4:5", "3:4", "9:16"
positionstringWhere the mascot sits in the frame. Defaults: right for 21:9, center for others.
Values: "left", "center", "right"
source_image_asset_idstring · uuidFor scene edits: existing scene asset to edit. Must be paired with edit_instructions.
edit_instructionsstringFor scene edits: what to change, e.g. "warm up the lighting". Paired with source_image_asset_id.
Responses
200 Talking estimate (speech with dry_run)
application/json
dataobject · requiredNested fields
dry_runboolean · requiredValues: true
scriptstring · requiredestimateobject · requiredTalking animations only.
Nested fields
speech_secondsnumber · requiredEstimated length of the spoken line.
durationinteger · requiredMost likely video length in seconds.
max_durationinteger · requiredThe longest the video could need; the charge is based on it.
creditsinteger · requiredCharged now: max_duration at 3 credits per second. Unused seconds are refunded once the voice is recorded.
too_longboolean · required202 Generation job started
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "image", "animation", "edit", "logo", "reverse"
item_idstring · uuid · requireditem_namestring · requiredestimated_costnumber · requiredasset_idsobjecturlsobjectestimateobjectTalking animations only.
Nested fields
speech_secondsnumber · requiredEstimated length of the spoken line.
durationinteger · requiredMost likely video length in seconds.
max_durationinteger · requiredThe longest the video could need; the charge is based on it.
creditsinteger · requiredCharged now: max_duration at 3 credits per second. Unused seconds are refunded once the voice is recorded.
too_longboolean · requiredscriptstringTalking animations only: the line with its movements, as performed.
poll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Generate image or animation",
"description": "Starts an async generation job. Returns 202 with `data.job_id` - poll via GET `/v1/jobs/{id}` (or pass `?wait=true` for long-polling). Cost by type: image=1, animation=2/sec with animation_model=standard (5–15s) or 6/sec with animation_model=premium (4–30s), default 5s for either choice (+1 if no source image); omitting animation_model preserves legacy 5/sec, 4–10s, default 4s, logo=5, edit=1 for images, scene=3, reverse=0. For `type: animation`, you can skip providing a source image: pass only `animation_prompt` (and optionally `image_prompt`) and the system generates a fresh source image first, then animates it. To animate an uploaded image directly, pass its POST /v1/upload asset_id as source_image_asset_id with type=animation. The upload is imported into the mascot without changing references; no image-generation credits are charged. Existing mascot assets preserve their saved context. Before video generation, non-square starting and ending images are center-cropped to square; square images are reused unchanged. Optional source_image_crop and end_image_crop specify integer x, y, width and height in pixels after image orientation. Cropped copies preserve the originals and incur no extra credits. Invalid crops return 400 before charging. If you have an existing item, pass `item_id` to animate/edit its current image. For image generation and image edits, pass optional `visual_references` for one-time pose, expression, motion, prop, style, or scene cues; these references do not become collection mascot references. Scene generation and scene editing also use this endpoint with `type: \"scene\"`. For a new scene, optional `source_asset_id` selects its character reference and saved variant context. For scene edits use `source_image_asset_id` with `edit_instructions`; the two source fields are mutually exclusive. Talking animations: pass `speech` with `type: animation` and the mascot says the line in its voice (see the Voice endpoints). The length follows the speech, 5 seconds to 2 minutes at 3 credits per second; the receipt charges the longest the line could need and unused seconds are refunded once the voice is recorded. Talking adds audio (MP3) and transcript (JSON) assets. With `dry_run: true` it returns 200 with the estimate instead. Returns 409 with details.reason voice_required when the mascot has no voice yet. Returns 402 if credits are insufficient.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateBody"
}
}
}
},
"responses": {
"200": {
"description": "Talking estimate (speech with dry_run)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TalkingDryRunResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"202": {
"description": "Generation job started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateAsyncResponse"
},
"example": {
"data": {
"job_id": "b87c9579-7460-4bd0-aa54-77991615dfef",
"status": "pending",
"type": "image",
"item_id": "e328c567-0965-42fc-90b5-7ff6faa61b25",
"item_name": "wave",
"estimated_cost": 1,
"asset_ids": {
"image": "a8b158bb-5698-431a-b0f1-98ee30228b11"
},
"urls": {
"transparent_image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/wave-91a9ac20.png",
"image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/wave-a8b158bb.png"
},
"poll_url": "/api/v1/jobs/b87c9579-7460-4bd0-aa54-77991615dfef"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGenerateCollection"
}POST/v1/collections/{id}/animations/reference-videoAnimate a mascot from a reference video
From Video uses Premium to transfer reference motion to your mascot. Upload a video and its first frame through POST /v1/upload, then provide their asset IDs. Source assets must be completed, active, and accessible to the credential; collection assets must belong to its workspace. Creates one animation item plus start and end pose items, with MP4, transparent WebM/HEVC, and pose images. Costs 6 credits per output second plus 1 image credit, so the default 5s costs 31 credits. Output duration is 4–30 whole seconds. Standard is not supported for this operation. Returns 202; poll the returned job until completed. Do not resubmit while the job is running.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonvideo_asset_idstring · uuid · requiredOwned, completed video asset containing the reference motion. Upload an MP4 or WebM with POST /v1/upload first.
first_frame_asset_idstring · uuid · requiredOwned, completed image asset showing the first frame of the reference video. Upload it with POST /v1/upload.
namestring · requiredName for the animation. Start and end pose items are also created.
Length: 1 to 255 characters
promptstringOptional instructions for the mascot pose and appearance.
Length: 0 to 10000 characters
durationintegerOutput duration in whole seconds, 4–30. Default 5. Premium costs 6 credits/sec plus 1 image credit.
Default: 5
Range: 4 to 30
animation_modelstringFrom Video always uses Premium. Standard is available for image-to-video animation through /generate.
Values: "premium"
Default: "premium"
variant_idstring · uuidOptional approved mascot variant to animate.
context_asset_idstring · uuidOptional asset in this collection whose saved mascot context is reused when variant_id is omitted.
Responses
202 Reference video job started
application/json
dataobject · requiredNested fields
job_idstring · uuid · requireditem_idstring · uuid · requiredstart_item_idstring · uuid · requiredend_item_idstring · uuid · requiredasset_idstring · uuid · requiredasset_idsobject · requiredNested fields
mascot_imagestring · uuid · requiredvideostring · uuid · requiredwebmstring · uuid · requiredhevcstring · uuid · requiredstart_imagestring · uuid · requiredstart_transparentstring · uuid · requiredend_imagestring · uuid · requiredend_transparentstring · uuid · requiredestimated_costinteger · requiredpoll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Animate a mascot from a reference video",
"description": "From Video uses Premium to transfer reference motion to your mascot. Upload a video and its first frame through POST /v1/upload, then provide their asset IDs. Source assets must be completed, active, and accessible to the credential; collection assets must belong to its workspace. Creates one animation item plus start and end pose items, with MP4, transparent WebM/HEVC, and pose images. Costs 6 credits per output second plus 1 image credit, so the default 5s costs 31 credits. Output duration is 4–30 whole seconds. Standard is not supported for this operation. Returns 202; poll the returned job until completed. Do not resubmit while the job is running.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReferenceVideoBody"
}
}
}
},
"responses": {
"202": {
"description": "Reference video job started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReferenceVideoAsyncResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyCreateCollectionAnimationReferenceVideo"
}POST/v1/collections/{id}/generate-batchBatch-generate multiple items
Starts multiple generation jobs in one call (up to the per-request cap). Returns 202 with an array of data.jobs[], each with its own job_id. Cost is summed across all items. Returns 402 if credits are insufficient for the whole batch.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonrequestsarray · requiredUp to 10 generate requests run in parallel. Each request follows the same discriminated schema as /generate. Credits are deducted per request. Talking animations (speech) are sent one by one to /generate.
Items: 1 to 10
Nested fields
GenerateImageBody
Generate a static image (pose). Cost: 1 credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become collection mascot references and do not update the collection style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "image"
image_promptstringWhat the character is doing in the image, e.g. "waving hello with a big smile".
GenerateAnimationBody
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
animation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
typestring · requiredValues: "animation"
animation_promptstringHow the character moves, e.g. "bouncing up and down energetically". You can generate an animation directly from just this: when neither item_id nor source_image_asset_id is passed, the system generates a source image first (adds 1 credit), then animates it.
image_promptstringUsed only when no source image exists. The character description that gets passed to image generation before animation starts.
source_image_asset_idstring · uuidCompleted image asset to animate, including an unattached image from POST /v1/upload. Unattached uploads owned by the caller are imported into this mascot without changing references or generating a new image; only animation credits are charged. The original upload is preserved. Non-square inputs are center-cropped to square before animation. Square inputs are reused unchanged. Use source_image_crop for explicit framing. Optional variant_id freezes the selected context for this import. Existing mascot assets retain their saved context. Prefer item_id to reuse an existing item image.
source_image_cropobjectOptional square crop for the starting image: integer x, y, width, height in pixels after EXIF orientation. Defaults to a centered square for non-square images. Requires source_image_asset_id or an item_id with an existing image. Cropping is free and preserves the original file.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_cropobjectOptional square crop for end_image_asset_id, in pixels after EXIF orientation. Defaults to a centered square for non-square end frames. Requires end_image_asset_id.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_asset_idstring · uuidTarget pose image for a transition, including a pose from another variant. The prompt writer uses the starting and ending images plus their separate saved contexts to write the transition direction. The job records both endpoints and the exact prompt under generation_context.transition. Forces loop to false.
loopbooleanWhether the animation loops seamlessly. Defaults to true. Automatically set to false when end_image_asset_id is provided.
reversebooleanReverse an existing video. Used with reverse_of_video_asset_id. Costs 0 credits.
reverse_of_video_asset_idstring · uuidAsset ID of the forward video to reverse. Required when reverse is true.
auto_reversebooleanTransitions only: also generate the reverse transition (end to source) at 0 extra credits. Requires source_image_asset_id + end_image_asset_id. Response includes a reverse_job field.
reverse_namestringName for the auto-generated reverse item. Defaults to "<item name> (Reverse)".
sizesarrayRequested animation size variants in pixels, e.g. [480, 360]. Filtered against the collection settings. No extra credit cost.
Nested fields
integer
speechobjectMakes a talking animation: the mascot says this line in its voice (from its context, or its variant's), starting from item_id or source_image_asset_id and ending on end_image_asset_id (or the start image). The length comes from the speech: 5 seconds to 2 minutes at 3 credits per second. A talk longer than one take (15 seconds) is cut in its pauses into takes that start and end on the start image, then joined. The receipt adds audio and transcript assets and an estimate.
Nested fields
scriptstringWhat the mascot says, with movements in square brackets placed where each one starts, e.g. "[waves hello, excited] Hi! I'm Gubby. [points to the right] The docs are right here!". A feeling after a comma also steers the voice.
Length: 1 to 6000 characters
textstringThe words alone, instead of script. Masko writes the movements, following direction when given, and returns the script it used.
Length: 1 to 3000 characters
directionstringWith text: how the mascot should perform the line, e.g. "excited about what he does, points at the docs at the end".
Length: 0 to 500 characters
languagestringISO 639-1 code of the line. Omit it to detect the language from the words.
Pattern: ^[a-z]{2}$
dry_runbooleanWith speech: return the estimate (and the script, when Masko writes the movements) without charging or generating.
GenerateEditBody
Edit an existing image or video with natural-language instructions. Cost: 1 credit for images, 5 credits per second for videos, rounded up to a whole credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become collection mascot references and do not update the collection style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "edit"
edit_instructionsstring · requiredWhat to change on the source asset, e.g. "add a santa hat". Required.
source_image_asset_idstring · uuidAsset ID of the image to edit. Use data.asset_ids.image from a previous /generate response. If you pass item_id, the source is resolved from the item automatically.
source_video_asset_idstring · uuidCompleted 4–30 second video in this collection to edit at 720p. Duration and aspect ratio are preserved. Uses the source clip and its source item. For transition clips, edits preserve both saved endpoint identities and their order; variant_id does not restyle the whole clip. The edit prompt is recorded in generation_context.transition_edit.
GenerateLogoBody
Generate an iconic/logo version of the mascot. Cost: 5 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "logo"
request_idstring · uuidStable retry key. Requires item_id; reuse unchanged after an uncertain response.
logo_style_idstringPreset from GET /v1/logo-styles. Explicit style name/instruction override preset fields.
Values: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
logo_descriptionstringWhat the logo should look like, e.g. "iconic face-only, circular badge". Defaults to "Iconic representation of the character".
logo_style_namestringShort label for the logo style, e.g. "Flat", "Retro". Defaults to "Flat".
logo_style_instructionstringDetailed style instructions, e.g. "Flat design with solid colors, no gradients".
GenerateSceneBody
Generate a 4K scene image of the mascot in an environment, or edit an existing scene. Cost: 3 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/collections/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this collection. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "scene"
source_asset_idstring · uuidFor a new scene: completed character image to use as its reference. Its saved variant context is retained unless an explicitly selected variant intentionally includes this reference. Use source_image_asset_id instead to edit an existing scene.
scenestringThe environment, e.g. "cozy reading nook with afternoon light". Required unless editing (source_image_asset_id + edit_instructions).
actionstringWhat the mascot is doing in the scene, e.g. "reading a book". Required unless editing.
aspect_ratiostringOutput aspect ratio. Use 4:3 for marketplace_card or marketplace_story, 1:1 for marketplace_square, 21:9 for hero_desktop, and 4:5 or 3:4 for hero_mobile.
Values: "4:3", "1:1", "21:9", "4:5", "3:4", "9:16"
positionstringWhere the mascot sits in the frame. Defaults: right for 21:9, center for others.
Values: "left", "center", "right"
source_image_asset_idstring · uuidFor scene edits: existing scene asset to edit. Must be paired with edit_instructions.
edit_instructionsstringFor scene edits: what to change, e.g. "warm up the lighting". Paired with source_image_asset_id.
Responses
202 Batch generation jobs started
application/json
dataobject · requiredNested fields
jobsarray · requiredNested fields
job_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "image", "animation", "edit", "logo", "reverse"
item_idstring · uuid · requireditem_namestring · requiredestimated_costnumber · requiredasset_idsobjecturlsobjectestimateobjectTalking animations only.
Nested fields
speech_secondsnumber · requiredEstimated length of the spoken line.
durationinteger · requiredMost likely video length in seconds.
max_durationinteger · requiredThe longest the video could need; the charge is based on it.
creditsinteger · requiredCharged now: max_duration at 3 credits per second. Unused seconds are refunded once the voice is recorded.
too_longboolean · requiredscriptstringTalking animations only: the line with its movements, as performed.
poll_urlstring · requiredtotal_costnumber · requiredpoll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Batch-generate multiple items",
"description": "Starts multiple generation jobs in one call (up to the per-request cap). Returns 202 with an array of `data.jobs[]`, each with its own `job_id`. Cost is summed across all items. Returns 402 if credits are insufficient for the whole batch.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateBatchBody"
}
}
}
},
"responses": {
"202": {
"description": "Batch generation jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BatchAsyncResponse"
},
"example": {
"data": {
"jobs": [
{
"job_id": "fe21477f-7e46-448f-bfdb-96eac80205b8",
"item_id": "e8ca0d1b-b445-46f6-862f-26b26ac2c6ff",
"item_name": "sitting",
"status": "pending",
"estimated_cost": 1,
"asset_ids": {
"image": "25dc5edf-bf41-4a7f-ba23-b783ea2718d8"
},
"urls": {
"transparent_image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/sitting-fb7bbd6f.png",
"image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/sitting-25dc5edf.png"
}
}
],
"total_cost": 2,
"poll_url": "/api/v1/jobs"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGenerateBatchCollection"
}GET/v1/collections/{id}/suggestionsSuggest action poses
Returns AI-generated action/pose suggestions (e.g. "waving", "thinking") tailored to the same resolved parent-plus-child mascot context used by generation. Use these as prompts for POST /v1/collections/{id}/generate. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variant_idqueryUse this approved mascot variant for suggestions. Omit for Original.
string
Responses
200 Suggested actions
application/json
dataobject · requiredNested fields
suggestionsarray · requiredNested fields
string
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Suggest action poses",
"description": "Returns AI-generated action/pose suggestions (e.g. \"waving\", \"thinking\") tailored to the same resolved parent-plus-child mascot context used by generation. Use these as prompts for POST `/v1/collections/{id}/generate`. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Use this approved mascot variant for suggestions. Omit for Original."
},
"required": false,
"description": "Use this approved mascot variant for suggestions. Omit for Original.",
"name": "variant_id",
"in": "query"
}
],
"responses": {
"200": {
"description": "Suggested actions",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuggestionsResponse"
},
"example": {
"data": {
"suggestions": [
"Curious Head Tilt",
"Wide Eyed Stare",
"Slow Clay Blink",
"Gentle Tail Wag",
"Heavy Paw Waddle",
"Playful Pounce",
"Happy Ear Twitch"
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollectionSuggestions"
}GET/v1/collections/{id}/scenes/suggestionsSuggest scenes for a collection
Returns AI-generated scene ideas (setting + action + recommended position) tailored to the collection. Use these as payloads for POST /v1/collections/{id}/generate with type: "scene". No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variant_idqueryUse this approved mascot variant for suggestions. Omit for Original.
string
aspect_ratioqueryAspect ratio to optimize the suggestions for. Defaults to 4:5.
string · 4:3, 1:1, 21:9, 4:5, 3:4, 9:16
countqueryNumber of scene suggestions to return. Defaults to 6, max 10.
integer
Responses
200 AI-suggested scenes for the collection
application/json
dataobject · requiredNested fields
suggestionsarray · requiredNested fields
namestring · requiredemojistringscenestring · requiredactionstring · requiredpositionstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Suggest scenes for a collection",
"description": "Returns AI-generated scene ideas (setting + action + recommended position) tailored to the collection. Use these as payloads for POST `/v1/collections/{id}/generate` with `type: \"scene\"`. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Use this approved mascot variant for suggestions. Omit for Original."
},
"required": false,
"description": "Use this approved mascot variant for suggestions. Omit for Original.",
"name": "variant_id",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"4:3",
"1:1",
"21:9",
"4:5",
"3:4",
"9:16"
],
"default": "4:5",
"description": "Aspect ratio to optimize the suggestions for. Defaults to 4:5."
},
"required": false,
"description": "Aspect ratio to optimize the suggestions for. Defaults to 4:5.",
"name": "aspect_ratio",
"in": "query"
},
{
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 6,
"description": "Number of scene suggestions to return. Defaults to 6, max 10."
},
"required": false,
"description": "Number of scene suggestions to return. Defaults to 6, max 10.",
"name": "count",
"in": "query"
}
],
"responses": {
"200": {
"description": "AI-suggested scenes for the collection",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SceneSuggestionsResponse"
},
"example": {
"data": {
"suggestions": [
{
"name": "Sunlit Terrace",
"emoji": "☀️",
"scene": "A sun-drenched Mediterranean stone balcony overlooking a sparkling blue coastline, decorated with potted succulents and blooming bougainvillea in earthen jars.",
"action": "Sitting contentedly among the flower pots and soaking up the afternoon warmth.",
"position": "center"
}
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollectionSceneSuggestions"
}PATCH/v1/collections/{id}/settingsUpdate collection settings
Updates mascot export settings. image_exports configures future PNG/WebP derivatives of original, transparent and sticker images; it does not backfill existing images. animation_sizes preserves existing behavior: changed settings may queue exports for existing animations as well as future outputs. Use POST /v1/mascots/{id}/exports for explicit image/video backfill, or the legacy size-variants endpoint for video-only repair. Returns settings_applied, size_variant_jobs and sizes_enabled. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Request body (required)
Request body
application/jsonpublish_paramsobjectExport settings. prores_exports enables original-size ProRes 4444 with alpha for future transparent animations. image_exports applies to future image completions. animation_sizes retains existing automatic video export behavior, including scheduling existing videos when settings change. Use POST /v1/mascots/:id/exports for explicit backfill.
Nested fields
image_exportsobjectNested fields
enabledboolean · requiredsourcesarray · requiredItems: 1 to 3
Nested fields
string · original, transparent, sticker
formatsarray · requiredItems: 1 to 2
Nested fields
string · png, webp
sizesarray · requiredItems: 1 to 5
Nested fields
integer
prores_exportsobjectAutomatically create original-delivery-size ProRes 4444 MOV files with alpha after transparent animations finish. Disabled by default.
Nested fields
enabledboolean · requiredanimation_sizesobjectNested fields
enabledboolean · requiredWhether animation size variants are generated.
sizesarray · requiredPixel sizes to generate. Any integer from 32 to 1920. Common values: 720, 480, 360, 240.
Nested fields
number
force_refreshbooleanResponses
200 Settings updated
application/json
dataobject · requiredNested fields
updatedboolean · requiredslugstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Settings"
],
"summary": "Update collection settings",
"description": "Updates mascot export settings. image_exports configures future PNG/WebP derivatives of original, transparent and sticker images; it does not backfill existing images. animation_sizes preserves existing behavior: changed settings may queue exports for existing animations as well as future outputs. Use POST /v1/mascots/{id}/exports for explicit image/video backfill, or the legacy size-variants endpoint for video-only repair. Returns settings_applied, size_variant_jobs and sizes_enabled. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateSettingsBody"
}
}
}
},
"responses": {
"200": {
"description": "Settings updated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatedFlagResponse"
},
"example": {
"data": {
"updated": true
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyUpdateCollectionSettings"
}POST/v1/collections/{id}/size-variantsBackfill animation size variants
Starts idempotent jobs for missing animation size variants on completed videos in this collection. Normal pipeline usage sends {}: it uses the collection configured animation_sizes, or [360] when no sizes are configured, and only creates missing variants. force=true is an explicit admin recovery option that regenerates existing variants too; do not use it for normal marketplace/canvas backfills or while relevant jobs are in flight. This endpoint does not regenerate source animations and does not toggle collection settings.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonsizesarraySizes to generate. Defaults to the collection's configured animation_sizes, or [360].
Nested fields
integer
forcebooleanRegenerate even sizes that already exist. Default false (idempotent: only missing sizes, never supersedes in-flight jobs).
Responses
200 Size variant jobs started
application/json
dataobject · requiredNested fields
size_variant_jobsinteger · requiredRange: 0 to unbounded
sizesarray · requiredNested fields
integer
forceboolean · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Settings"
],
"summary": "Backfill animation size variants",
"description": "Starts idempotent jobs for missing animation size variants on completed videos in this collection. Normal pipeline usage sends `{}`: it uses the collection configured `animation_sizes`, or `[360]` when no sizes are configured, and only creates missing variants. `force=true` is an explicit admin recovery option that regenerates existing variants too; do not use it for normal marketplace/canvas backfills or while relevant jobs are in flight. This endpoint does not regenerate source animations and does not toggle collection settings.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateSizeVariantsBody"
}
}
}
},
"responses": {
"200": {
"description": "Size variant jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SizeVariantsResponse"
},
"example": {
"data": {
"size_variant_jobs": 3,
"sizes": [
360
],
"force": false
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyCreateCollectionSizeVariant"
}GET/v1/collections/{id}/canvasesList canvases in a collection
Returns all canvases (state machines / animation graphs) attached to the collection. A canvas describes nodes (poses) and edges (loops or transitions). No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 List of canvases
application/json
dataarray · requiredNested fields
idstring · uuid · requirednamestring · requiredcreated_atstring · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "List canvases in a collection",
"description": "Returns all canvases (state machines / animation graphs) attached to the collection. A canvas describes nodes (poses) and edges (loops or transitions). No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "List of canvases",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasListResponse"
},
"example": {
"data": []
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyListCollectionCanvases"
}POST/v1/collections/{id}/canvasesCreate a canvas
Creates a canvas for the collection. If template_id is provided, items and images are generated for every node (image cost per node, 1 credit each). With no template_id, creates an empty canvas with zero cost. Returns 201.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonnamestring · requiredDisplay name for the canvas.
Length: 1 to unbounded characters
graphobjectCanvas graph JSON with nodes, edges, and inputs. Omit to create an empty canvas. Mutually exclusive with template_id.
template_idstringOptional template to apply at creation. Creates items, starts image generation for each node, and returns the populated graph plus job IDs. List templates via GET /v1/canvas-templates.
Length: 1 to unbounded characters
node_overridesobjectPer-node overrides keyed by node key. Merged into template nodes before creation. Only used when template_id is provided.
edge_overridesobjectPer-edge overrides keyed by "source->target" key. Merged into template edges before creation. Only used when template_id is provided.
Responses
201 Created canvas (populated if template_id provided)
application/json
dataobject · requiredNested fields
objectstringResource type. Always "canvas".
Values: "canvas"
idstring · uuid · requirednamestring · requiredgraphobject · requiredgraph_content_hashstring · requiredRevision token for the full authored graph. Send this as expected_graph_hash when replacing the graph.
statusobjectNested fields
nodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredreadyboolean · requiredgenerated_readybooleanpreview_readybooleanmediaobjectNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
See the OpenAPI schema for deeper nested fields.
failed_nodesarray · requiredNested fields
node_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requiredfailed_edgesarray · requiredNested fields
edge_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requirededge_mediaarrayNested fields
edge_idstring · requiredsourcestring · requiredtargetstring · requiredvideo_asset_idstring · uuid · nullable · requiredreuses_edge_idstringbaseobject · requiredNested fields
video_readyboolean · requiredwebm_readyboolean · requiredhevc_readyboolean · requiredpreview_readyboolean · requiredderivatives_in_flightboolean · requiredsource_job_idstring · uuidsource_job_statusstringmissingarray · requiredNested fields
string · webm, hevc
variantsobject · requiredcreated_atstringupdated_atstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Create a canvas",
"description": "Creates a canvas for the collection. If `template_id` is provided, items and images are generated for every node (image cost per node, 1 credit each). With no `template_id`, creates an empty canvas with zero cost. Returns 201.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateCanvasBody"
}
}
}
},
"responses": {
"201": {
"description": "Created canvas (populated if template_id provided)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasResponse"
},
"example": {
"data": {
"id": "8c4b872c-df43-4d64-b84c-00f0d8314140",
"name": "test-empty-canvas",
"graph": {
"edges": [],
"nodes": [],
"inputs": [],
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
}
},
"created_at": "2026-04-19T09:42:15.222526+00:00"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyCreateCollectionCanvas"
}GET/v1/collections/{id}/canvases/{canvasId}Get canvas details
Returns the canvas with its full graph (nodes, edges, inputs, viewport) and media status. For agents: use status.media as the canonical readiness interface. status.media.generation.ready means node images and parent edge videos exist. Inspect status.failed_nodes and status.failed_edges for terminal generation failures and customer-safe error messages before deciding whether to start a new paid attempt. status.nodes.pending remains the backward-compatible count of all incomplete nodes, including failed nodes; status.nodes.failed identifies the terminal subset. status.media.preview.ready means the canvas editor can play every concrete edge using completed base WebM and HEVC derivatives. If status.media.preview.waiting_edges > 0, wait and poll again because the original generation job is still preparing derivatives. If status.media.preview.repairable=true, call POST /v1/collections/{id}/canvases/{canvasId}/repair with dry_run=true before repairing. status.media.variants reports optimized size-variant facts only; base preview repair does not create variants. status.ready, status.generated_ready, and status.preview_ready remain as backward-compatible aliases.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Responses
200 Canvas details with status
application/json
dataobject · requiredNested fields
objectstringResource type. Always "canvas".
Values: "canvas"
idstring · uuid · requirednamestring · requiredgraphobject · requiredgraph_content_hashstring · requiredRevision token for the full authored graph. Send this as expected_graph_hash when replacing the graph.
statusobjectNested fields
nodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredreadyboolean · requiredgenerated_readybooleanpreview_readybooleanmediaobjectNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
See the OpenAPI schema for deeper nested fields.
failed_nodesarray · requiredNested fields
node_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requiredfailed_edgesarray · requiredNested fields
edge_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requirededge_mediaarrayNested fields
edge_idstring · requiredsourcestring · requiredtargetstring · requiredvideo_asset_idstring · uuid · nullable · requiredreuses_edge_idstringbaseobject · requiredNested fields
video_readyboolean · requiredwebm_readyboolean · requiredhevc_readyboolean · requiredpreview_readyboolean · requiredderivatives_in_flightboolean · requiredsource_job_idstring · uuidsource_job_statusstringmissingarray · requiredNested fields
string · webm, hevc
variantsobject · requiredcreated_atstringupdated_atstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Get canvas details",
"description": "Returns the canvas with its full graph (nodes, edges, inputs, viewport) and media status. For agents: use `status.media` as the canonical readiness interface. `status.media.generation.ready` means node images and parent edge videos exist. Inspect `status.failed_nodes` and `status.failed_edges` for terminal generation failures and customer-safe error messages before deciding whether to start a new paid attempt. `status.nodes.pending` remains the backward-compatible count of all incomplete nodes, including failed nodes; `status.nodes.failed` identifies the terminal subset. `status.media.preview.ready` means the canvas editor can play every concrete edge using completed base WebM and HEVC derivatives. If `status.media.preview.waiting_edges > 0`, wait and poll again because the original generation job is still preparing derivatives. If `status.media.preview.repairable=true`, call POST `/v1/collections/{id}/canvases/{canvasId}/repair` with `dry_run=true` before repairing. `status.media.variants` reports optimized size-variant facts only; base preview repair does not create variants. `status.ready`, `status.generated_ready`, and `status.preview_ready` remain as backward-compatible aliases.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Canvas details with status",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasResponse"
},
"example": {
"data": {
"id": "280ceab9-4673-4c78-b37c-3617feb51914",
"name": "test-canvas-from-template",
"graph": {
"edges": [
{
"id": "d7420e54-9545-4527-bff0-912be67c3758",
"jobId": "a3c6ec30-a82c-41b2-a28f-37bedf369815",
"source": "38df9602-c21a-4637-9cea-c0962433d2e1",
"target": "38df9602-c21a-4637-9cea-c0962433d2e1",
"reverse": false,
"duration": 4,
"conditions": [],
"description": "Gentle breathing, slow blinking, tail curling slightly",
"videoAssetId": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"reverseOfEdgeId": null
}
],
"nodes": [
{
"x": 0,
"y": 0,
"id": "38df9602-c21a-4637-9cea-c0962433d2e1",
"itemName": "Idle"
}
],
"inputs": [],
"viewport": {
"x": 0,
"y": 0,
"zoom": 0.8
}
},
"status": {
"nodes": {
"total": 2,
"completed": 2,
"pending": 0,
"failed": 0
},
"edges": {
"total": 3,
"completed": 3,
"pending": 0,
"failed": 0
},
"ready": true,
"generated_ready": true,
"preview_ready": true,
"media": {
"generation": {
"ready": true,
"nodes": {
"total": 2,
"completed": 2,
"pending": 0,
"failed": 0
},
"edges": {
"total": 3,
"completed": 3,
"pending": 0,
"failed": 0
}
},
"preview": {
"ready": true,
"repairable": false,
"repairable_edges": 0,
"waiting_edges": 0,
"missing_edges": 0,
"missing_formats": []
},
"variants": {
"sizes": [],
"missing": []
}
},
"failed_nodes": [],
"failed_edges": [],
"edge_media": [
{
"edge_id": "d7420e54-9545-4527-bff0-912be67c3758",
"source": "38df9602-c21a-4637-9cea-c0962433d2e1",
"target": "38df9602-c21a-4637-9cea-c0962433d2e1",
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"base": {
"video_ready": true,
"webm_ready": true,
"hevc_ready": true,
"preview_ready": true,
"derivatives_in_flight": false,
"missing": []
},
"variants": {}
}
]
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollectionCanvas"
}PATCH/v1/collections/{id}/canvases/{canvasId}Replace a complete canvas graph
Replaces the complete authored graph. Read the canvas first and send its graph_content_hash as expected_graph_hash. If another editor changes the graph first, the write returns 409 instead of overwriting it. Generated asset fields on unchanged nodes and edges are preserved. No credit cost; generation is triggered separately.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Request body (required)
Request body
application/jsongraphobject · requiredFull canvas graph to replace the current one. Nodes, edges, and inputs are overwritten.
expected_graph_hashstringGraph content hash returned by the latest GET. When provided, the update is rejected with 409 if the canvas changed before this full-graph save.
Length: 1 to unbounded characters
Responses
200 Canvas updated
application/json
dataobject · requiredNested fields
objectstringResource type. Always "canvas".
Values: "canvas"
idstring · uuid · requirednamestring · requiredgraphobject · requiredgraph_content_hashstring · requiredRevision token for the full authored graph. Send this as expected_graph_hash when replacing the graph.
statusobjectNested fields
nodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredreadyboolean · requiredgenerated_readybooleanpreview_readybooleanmediaobjectNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
See the OpenAPI schema for deeper nested fields.
failed_nodesarray · requiredNested fields
node_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requiredfailed_edgesarray · requiredNested fields
edge_idstring · requiredjob_idstring · uuid · nullable · requirederrorstring · requirededge_mediaarrayNested fields
edge_idstring · requiredsourcestring · requiredtargetstring · requiredvideo_asset_idstring · uuid · nullable · requiredreuses_edge_idstringbaseobject · requiredNested fields
video_readyboolean · requiredwebm_readyboolean · requiredhevc_readyboolean · requiredpreview_readyboolean · requiredderivatives_in_flightboolean · requiredsource_job_idstring · uuidsource_job_statusstringmissingarray · requiredNested fields
string · webm, hevc
variantsobject · requiredcreated_atstringupdated_atstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Replace a complete canvas graph",
"description": "Replaces the complete authored graph. Read the canvas first and send its graph_content_hash as expected_graph_hash. If another editor changes the graph first, the write returns 409 instead of overwriting it. Generated asset fields on unchanged nodes and edges are preserved. No credit cost; generation is triggered separately.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateCanvasBody"
}
}
}
},
"responses": {
"200": {
"description": "Canvas updated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyUpdateCollectionCanvas"
}DELETE/v1/collections/{id}/canvases/{canvasId}Delete a canvas
Deletes a canvas without saved history. Generated node/edge assets are kept. Returns 204, or 409 when checkpoints or releases retain the canvas. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Responses
204 Canvas deleted
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Delete a canvas",
"description": "Deletes a canvas without saved history. Generated node/edge assets are kept. Returns 204, or 409 when checkpoints or releases retain the canvas. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"204": {
"description": "Canvas deleted",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyDeleteCollectionCanvas"
}POST/v1/collections/{id}/canvases/{canvasId}/repairRepair canvas preview media
Plans or starts a narrow repair for missing base WebM/HEVC derivatives on videos already assigned to this canvas. Agent workflow: first call with dry_run=true or omit dry_run because it defaults to true. Read status.media.preview, summary, repairs, in_flight, and skipped. If status.media.preview.waiting_edges > 0, wait and poll again instead of repairing. Only call again with dry_run=false if the repair plan matches the intended canvas videos. This endpoint is for the specific case where status.media.generation.ready=true, status.media.preview.ready=false, and status.media.preview.repairable=true. It does not regenerate animations, does not run collection-wide jobs, does not create size variants, does not expose prompt/model controls, does not force regeneration, and does not archive existing assets.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsontargetstringRepair target. Use video_derivatives when canvas status shows status.media.preview.repairable=true because completed edge videos are missing base WebM and/or HEVC child assets. If status.media.preview.waiting_edges > 0, wait and poll again instead of repairing. This target only repairs videos already assigned to the canvas graph.
Values: "video_derivatives"
Default: "video_derivatives"
formatsarrayBase derivative formats to repair. Defaults to both webm and hevc. This does not include size variants; optimized sizes must be generated through the size-variant flow.
Default: ["webm","hevc"]
Items: 1 to unbounded
Nested fields
string · webm, hevc
dry_runbooleanWhen true, returns the exact repair plan without creating jobs or assets. Defaults to true. Agents should call dry_run=true first, inspect repairs/skipped/in_flight, then call dry_run=false only if the plan touches the intended videos.
Default: true
Responses
200 Repair plan returned
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_derivatives"
dry_runboolean · requiredformatsarray · requiredNested fields
string · webm, hevc
statusobject · requiredNested fields
generated_readyboolean · requiredpreview_readyboolean · requiredmediaobjectNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
See the OpenAPI schema for deeper nested fields.
summaryobject · requiredNested fields
edges_checkednumber · requiredvideos_checkednumber · requiredvideos_readynumber · requiredvideos_to_repairnumber · requiredvideos_in_flightnumber · requiredvideos_skippednumber · requiredrepairsarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidin_flightarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidskippedarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
reasonstring · requiredjobsarrayNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredvideo_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
formatsarray · requiredNested fields
string · webm, hevc
202 Repair jobs started
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_derivatives"
dry_runboolean · requiredformatsarray · requiredNested fields
string · webm, hevc
statusobject · requiredNested fields
generated_readyboolean · requiredpreview_readyboolean · requiredmediaobjectNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
See the OpenAPI schema for deeper nested fields.
summaryobject · requiredNested fields
edges_checkednumber · requiredvideos_checkednumber · requiredvideos_readynumber · requiredvideos_to_repairnumber · requiredvideos_in_flightnumber · requiredvideos_skippednumber · requiredrepairsarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidin_flightarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidskippedarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
reasonstring · requiredjobsarrayNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredvideo_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
formatsarray · requiredNested fields
string · webm, hevc
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Repair canvas preview media",
"description": "Plans or starts a narrow repair for missing base WebM/HEVC derivatives on videos already assigned to this canvas. Agent workflow: first call with `dry_run=true` or omit `dry_run` because it defaults to true. Read `status.media.preview`, `summary`, `repairs`, `in_flight`, and `skipped`. If `status.media.preview.waiting_edges > 0`, wait and poll again instead of repairing. Only call again with `dry_run=false` if the repair plan matches the intended canvas videos. This endpoint is for the specific case where `status.media.generation.ready=true`, `status.media.preview.ready=false`, and `status.media.preview.repairable=true`. It does not regenerate animations, does not run collection-wide jobs, does not create size variants, does not expose prompt/model controls, does not force regeneration, and does not archive existing assets.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepairCanvasBody"
}
}
}
},
"responses": {
"200": {
"description": "Repair plan returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasRepairResponse"
},
"example": {
"data": {
"target": "video_derivatives",
"dry_run": true,
"formats": [
"webm",
"hevc"
],
"status": {
"generated_ready": true,
"preview_ready": false,
"media": {
"generation": {
"ready": true,
"nodes": {
"total": 6,
"completed": 6,
"pending": 0,
"failed": 0
},
"edges": {
"total": 42,
"completed": 42,
"pending": 0,
"failed": 0
}
},
"preview": {
"ready": false,
"repairable": true,
"repairable_edges": 2,
"waiting_edges": 0,
"missing_edges": 2,
"missing_formats": [
"webm",
"hevc"
]
},
"variants": {
"sizes": [
"360"
],
"missing": []
}
}
},
"summary": {
"edges_checked": 42,
"videos_checked": 38,
"videos_ready": 36,
"videos_to_repair": 2,
"videos_in_flight": 0,
"videos_skipped": 0
},
"repairs": [
{
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"edge_ids": [
"enter-hover-perk"
],
"missing": [
"webm",
"hevc"
],
"action": "create_derivatives"
}
],
"in_flight": [],
"skipped": []
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"202": {
"description": "Repair jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasRepairResponse"
},
"example": {
"data": {
"target": "video_derivatives",
"dry_run": false,
"formats": [
"webm",
"hevc"
],
"status": {
"generated_ready": true,
"preview_ready": false,
"media": {
"generation": {
"ready": true,
"nodes": {
"total": 6,
"completed": 6,
"pending": 0,
"failed": 0
},
"edges": {
"total": 42,
"completed": 42,
"pending": 0,
"failed": 0
}
},
"preview": {
"ready": false,
"repairable": true,
"repairable_edges": 2,
"waiting_edges": 0,
"missing_edges": 2,
"missing_formats": [
"webm",
"hevc"
]
},
"variants": {
"sizes": [
"360"
],
"missing": []
}
}
},
"summary": {
"edges_checked": 42,
"videos_checked": 38,
"videos_ready": 36,
"videos_to_repair": 2,
"videos_in_flight": 0,
"videos_skipped": 0
},
"repairs": [
{
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"edge_ids": [
"enter-hover-perk"
],
"missing": [
"webm",
"hevc"
],
"action": "create_derivatives"
}
],
"in_flight": [],
"skipped": [],
"jobs": [
{
"job_id": "a1b2c3d4-0000-0000-0000-000000000001",
"poll_url": "/v1/jobs/a1b2c3d4-0000-0000-0000-000000000001",
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"edge_ids": [
"enter-hover-perk"
],
"formats": [
"webm",
"hevc"
]
}
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyRepairCollectionCanvas"
}POST/v1/collections/{id}/canvases/{canvasId}/presentation/detect-facingDetect canvas natural facing
Analyzes completed canvas node images and returns a suggested presentation.naturalFacing value plus node-level evidence. This is a synchronous analysis endpoint. It does not write to the canvas graph and has no credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Responses
200 Suggested natural-facing presentation value
application/json
dataobject · requiredNested fields
suggestedNaturalFacingstring · requiredValues: "left", "neutral", "right"
confidencenumber · requiredwarningstringanalyzedNodeCountinteger · requiredRange: 0 to unbounded
nodeResultsarray · requiredNested fields
nodeIdstring · requirednodeNamestring · requiredfacingstring · requiredValues: "left", "neutral", "right"
confidencenumber · requiredreasonstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Detect canvas natural facing",
"description": "Analyzes completed canvas node images and returns a suggested presentation.naturalFacing value plus node-level evidence. This is a synchronous analysis endpoint. It does not write to the canvas graph and has no credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"responses": {
"200": {
"description": "Suggested natural-facing presentation value",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasFacingDetectionResponse"
},
"example": {
"data": {
"suggestedNaturalFacing": "left",
"confidence": 0.82,
"analyzedNodeCount": 3,
"nodeResults": [
{
"nodeId": "idle",
"nodeName": "Idle",
"facing": "left",
"confidence": 0.88,
"reason": "The mascot has a consistent left-facing body angle."
}
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyDetectFacingCollectionCanvasPresentation"
}POST/v1/collections/{id}/canvases/{canvasId}/graph/extendLegacy partial canvas graph extension
Deprecated compatibility endpoint. New authoring clients should read the complete graph and graph_content_hash, reconcile locally, and PATCH the complete graph with expected_graph_hash.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonadd_nodesarrayNodes to append. Fails if any node ID already exists.
Default: []
Nested fields
idstring · requiredLength: 1 to unbounded characters
generationVariantIdstring · uuidApproved variant in the same collection used by generate-all for a new pose. Existing pose identity is preserved; completed assets are not regenerated.
add_edgesarrayEdges to append. Fails if any edge ID already exists.
Default: []
Nested fields
idstring · requiredLength: 1 to unbounded characters
update_edgesarrayPartial edge patches keyed by id. Existing edge fields are preserved unless explicitly overwritten.
Default: []
Nested fields
idstring · requiredLength: 1 to unbounded characters
add_inputsarrayInputs to append. Existing input names are left unchanged.
Default: []
Nested fields
namestring · requiredLength: 1 to unbounded characters
Responses
200 Canvas graph extended
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requiredgraphobject · requiredupdated_atstring · requiredaddedobject · requiredNested fields
nodesnumber · requirededgesnumber · requiredinputsnumber · requiredupdatedobject · requiredNested fields
edgesnumber · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Legacy partial canvas graph extension",
"deprecated": true,
"description": "Deprecated compatibility endpoint. New authoring clients should read the complete graph and graph_content_hash, reconcile locally, and PATCH the complete graph with expected_graph_hash.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ExtendCanvasGraphBody"
}
}
}
},
"responses": {
"200": {
"description": "Canvas graph extended",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasGraphExtendResponse"
},
"example": {
"data": {
"id": "280ceab9-4673-4c78-b37c-3617feb51914",
"name": "Main canvas",
"graph": {
"nodes": [],
"edges": [],
"inputs": [],
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
}
},
"updated_at": "2026-05-04T12:00:00.000Z",
"added": {
"nodes": 1,
"edges": 2,
"inputs": 1
},
"updated": {
"edges": 1
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"operationId": "legacyExtendCollectionCanvasGraph"
}PATCH/v1/collections/{id}/canvases/{canvasId}/edges/{edgeId}Patch a canvas edge
Patches one edge without replacing the graph. Use this for speed tuning after generation: normal transitions use speed 2, snappy interact transitions use 3-4, held/special loops use 2, and calm loops use 1.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
edgeIdpath · requiredstring
Request body (required)
Request body
application/jsonspeednumberPlayback speed multiplier for this edge. Normal transitions use 2, snappy interact transitions use 3-4, calm loops use 1.
Range: 0.1 to 10
Responses
200 Canvas edge patched
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requirededgeobject · requiredgraphobject · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Patch a canvas edge",
"description": "Patches one edge without replacing the graph. Use this for speed tuning after generation: normal transitions use speed 2, snappy interact transitions use 3-4, held/special loops use 2, and calm loops use 1.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "edgeId",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PatchCanvasEdgeBody"
}
}
}
},
"responses": {
"200": {
"description": "Canvas edge patched",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasEdgePatchResponse"
},
"example": {
"data": {
"id": "280ceab9-4673-4c78-b37c-3617feb51914",
"name": "Main canvas",
"edge": {
"id": "idle-to-interact",
"source": "idle",
"target": "interact",
"duration": 4,
"speed": 3
},
"graph": {
"nodes": [],
"edges": [],
"inputs": [],
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
}
},
"updated_at": "2026-05-04T12:00:00.000Z"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyUpdateCollectionCanvasEdge"
}POST/v1/collections/{id}/canvases/{canvasId}/edges/{edgeId}/generateGenerate a single canvas edge
Dispatches generation for one specific canvas edge by ID. Costs the same as a single edge in generate-all: duration * 2 for animation_model=standard or duration * 6 for premium. Without animation_model, legacy duration * 5 pricing is retained. If the edge already has a video asset, archives the old assets and re-dispatches. Any State edges (source: "*") and reverse edges are rejected with 400. Requires the source and target nodes to already have generated images. Loops use the source pose receipt, even on a mixed-variant canvas. Transitions retain both endpoint contexts. For uploads without receipts, the canvas context selects matching references; ambiguous shared uploads return 409 before charging.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
edgeIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonanimation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
Responses
202 Edge generation started
application/json
dataobject · requiredNested fields
job_idstring · uuid · requirededge_idstring · requiredtypestring · requiredValues: "loop", "transition"
sourcestring · requiredtargetstring · requiredcostnumber · requiredurlsobjectpoll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Generate a single canvas edge",
"description": "Dispatches generation for one specific canvas edge by ID. Costs the same as a single edge in generate-all: duration * 2 for animation_model=standard or duration * 6 for premium. Without animation_model, legacy duration * 5 pricing is retained. If the edge already has a video asset, archives the old assets and re-dispatches. Any State edges (source: \"*\") and reverse edges are rejected with 400. Requires the source and target nodes to already have generated images. Loops use the source pose receipt, even on a mixed-variant canvas. Transitions retain both endpoint contexts. For uploads without receipts, the canvas context selects matching references; ambiguous shared uploads return 409 before charging.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "edgeId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateEdgeBody"
}
}
}
},
"responses": {
"202": {
"description": "Edge generation started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasEdgeGenerateResponse"
},
"example": {
"data": {
"job_id": "a1b2c3d4-0000-0000-0000-000000000001",
"edge_id": "idle-to-interact",
"type": "transition",
"source": "Idle",
"target": "Interact",
"cost": 20,
"urls": {},
"poll_url": "/v1/jobs/a1b2c3d4-0000-0000-0000-000000000001"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGenerateCollectionCanvasEdge"
}POST/v1/collections/{id}/canvases/{canvasId}/edges/{edgeId}/refine-maskRefine a canvas edge video mask
Convenience wrapper around POST /v1/assets/{id}/refine-mask for a canvas edge. The route resolves the edge videoAssetId, refines that video asset mask, and re-exports the active derived formats/sizes. The canvas graph keeps the same raw video asset; desktop playback updates because the active linked WebM/HEVC/stacked variants are replaced underneath it. Any State and reverse edges are rejected because they do not own an independent video asset.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
edgeIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonopstringMask operation. add unions the prompted subject into the active mask; subtract removes it from the active mask.
Values: "add", "subtract"
Default: "add"
promptstring · requiredText prompt for the mask region to refine, e.g. "the soccer ball".
Length: 1 to unbounded characters
modelstringBackground mask refinement quality. Defaults to pro.
Values: "original", "pro"
Default: "pro"
edge_cleanupobjectOptional edge cleanup pass applied to the refined mask.
Default: {"enabled":true,"size":512}
Nested fields
enabledbooleanDefault: true
sizeintegerDefault: 512
Range: 128 to 1024
formatsarrayDerived formats to regenerate. Omit to infer the active formats already linked to the video.
Items: 1 to unbounded
Nested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarraySize variants to regenerate. Omit to infer active linked sizes, so all currently used variants are refreshed.
Nested fields
integer
archive_oldbooleanArchive and unlink old matching derived assets after replacement assets are successfully published.
Default: true
dry_runbooleanReturn the exact refinement/export plan without starting the workflow.
Default: true
Responses
200 Canvas edge mask refinement dry-run plan returned
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
collectionIdstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstring202 Canvas edge mask refinement job started
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
collectionIdstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Refine a canvas edge video mask",
"description": "Convenience wrapper around `POST /v1/assets/{id}/refine-mask` for a canvas edge. The route resolves the edge `videoAssetId`, refines that video asset mask, and re-exports the active derived formats/sizes. The canvas graph keeps the same raw video asset; desktop playback updates because the active linked WebM/HEVC/stacked variants are replaced underneath it. Any State and reverse edges are rejected because they do not own an independent video asset.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "edgeId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RefineCanvasEdgeMaskBody"
}
}
}
},
"responses": {
"200": {
"description": "Canvas edge mask refinement dry-run plan returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetMaskRefinementResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"202": {
"description": "Canvas edge mask refinement job started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AssetMaskRefinementResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyRefineMaskCollectionCanvasEdge"
}POST/v1/collections/{id}/canvases/{canvasId}/generate-allGenerate canvas images, stickers, and animations
Kicks off generation for pending canvas node images, sticker derivatives, and/or edge animations. Pass animation_model=standard (2 credits/sec, 5–15s) or premium (6 credits/sec, 4–30s); both default to 5s. Omit the field for legacy generation (5 credits/sec, 4–10s, default 4s). Model choice is included in plan approval and idempotent replay checks. Requires a write key in the collection workspace and project access, including for dry runs. Cross-workspace collections return 404. Use dry_run=true first to preview planned work, prompts, skipped items, and estimated credits without creating jobs/assets or spending credits. Dry-run returns plan_id and graph_content_hash; send them as approved_plan_id and expected_graph_hash on execution so a changed graph, prompt, option, or selection returns 409 before spending. Use targets="images" to generate poses, targets="stickers" to backfill transparent sticker derivatives for completed node images, targets="animations" for edge videos, or include_stickers=true to create stickers alongside newly generated images.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonanimation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
max_creditsnumberHard server-side credit ceiling. Execution fails before billing when the current work exceeds this limit.
Range: 0 to unbounded
skip_completedbooleanDeprecated compatibility flag. Canvas generate-all only dispatches missing work and always skips edges that already have assigned generated assets.
Default: true
include_stickersbooleanWhen true, generate sticker_image derivatives for generated image nodes.
Default: false
dry_runbooleanWhen true, only returns the planned work, prompts, skipped items, and estimated credit cost. Does not deduct credits, create jobs/assets/items, mutate the canvas graph, or start workflows.
Default: false
targetsstringWhich work to dispatch. "images" only generates skeleton node images. "stickers" backfills sticker_image derivatives for completed node images. "animations" only dispatches edge videos. "all" does both images and animations.
Values: "all", "images", "stickers", "animations"
Default: "all"
node_idsarrayOptional exact node selection. When present, only these nodes are considered for image or sticker work. Omit to consider every node.
Items: 1 to 100
Nested fields
string
edge_idsarrayOptional exact edge selection. When present, only these edges are considered for animation work. Omit to consider every edge.
Items: 1 to 200
Nested fields
string
expected_graph_hashstringOptional graph revision returned by the dry-run plan. Execution returns 409 if the canvas changed after approval.
Length: 1 to unbounded characters
approved_plan_idstringOptional generation plan identity returned by dry_run. Execution returns 409 unless the current graph, scope, prompts, duration, and generation options still match that approved plan.
Length: 1 to unbounded characters
Responses
200 Generation plan returned or jobs started
application/json
dataobject · requiredNested fields
plan_idstringStable identity of the exact graph, scope, prompts, and generation options. Return it as approved_plan_id when executing an approved dry-run plan.
graph_content_hashstringCanvas revision used by this plan. Return it as expected_graph_hash when executing an approved dry-run plan.
dry_runbooleancan_dispatchbooleantargetsstringValues: "all", "images", "stickers", "animations"
durationnumberinclude_stickersbooleanskip_completedbooleanselectionobjectNested fields
node_idsarray · nullable · requiredNested fields
string
edge_idsarray · nullable · requiredNested fields
string
jobsarray · requiredNested fields
job_idstring · uuid · requirededge_idstringnode_idstringtypestring · requiredValues: "image", "edit", "sticker", "loop", "transition"
sourcestringtargetstringitem_namestringcostnumber · requiredurlsobjectpoll_urlstringFollow this link to poll the job. On /v1/canvases routes it selects the mascot contract, so the job reports mascot_id.
generatedarray · requiredNested fields
object
planned_jobsarrayNested fields
object
planned_job_countnumberplanned_nodesarrayNested fields
object
planned_edgesarrayNested fields
object
planned_stickersarrayNested fields
object
skippednumber · requiredskipped_itemsarray · requiredNested fields
kindstring · requiredValues: "node", "edge"
idstring · requiredreasonstring · requiredasset_idstring · nullableasset_statusstringreverse_freearray · requiredNested fields
kindstring · requiredValues: "edge"
idstring · requiredreasonstring · requiredValues: "reverse_edge_free"
reverse_of_edge_idstring · nullable · requiredalready_completearray · requiredNested fields
kindstring · requiredValues: "node", "edge"
idstring · requiredasset_idstring · requiredestimated_costnumber · requiredactual_costnumber · requiredwould_charge_creditsnumberrefunded_creditsnumbertotal_jobsnumber · requiredtotal_costnumber · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Generate canvas images, stickers, and animations",
"description": "Kicks off generation for pending canvas node images, sticker derivatives, and/or edge animations. Pass animation_model=standard (2 credits/sec, 5–15s) or premium (6 credits/sec, 4–30s); both default to 5s. Omit the field for legacy generation (5 credits/sec, 4–10s, default 4s). Model choice is included in plan approval and idempotent replay checks. Requires a write key in the collection workspace and project access, including for dry runs. Cross-workspace collections return 404. Use `dry_run=true` first to preview planned work, prompts, skipped items, and estimated credits without creating jobs/assets or spending credits. Dry-run returns `plan_id` and `graph_content_hash`; send them as `approved_plan_id` and `expected_graph_hash` on execution so a changed graph, prompt, option, or selection returns 409 before spending. Use `targets=\"images\"` to generate poses, `targets=\"stickers\"` to backfill transparent sticker derivatives for completed node images, `targets=\"animations\"` for edge videos, or `include_stickers=true` to create stickers alongside newly generated images.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateAllBody"
}
}
}
},
"responses": {
"200": {
"description": "Generation plan returned or jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasGenerateAllResponse"
},
"example": {
"data": {
"jobs": [
{
"job_id": "58341ab3-80fc-4fca-8a86-f9d2caee9a14",
"edge_id": "095872b7-c6f6-4f6d-8679-9739436fd16c",
"type": "transition",
"source": "Idle",
"target": "Waving",
"cost": 20,
"urls": {
"webm": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/idle---waving-a622eb51.webm",
"video": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/idle---waving-7e5fe2ec.mp4",
"hevc": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/idle---waving-2880976b.mov"
}
}
],
"total_jobs": 3,
"total_cost": 60,
"dry_run": false,
"generated": [],
"skipped": 0,
"skipped_items": [],
"reverse_free": [
{
"kind": "edge",
"id": "waving-to-idle",
"reason": "reverse_edge_free",
"reverse_of_edge_id": "idle-to-waving"
}
],
"already_complete": [],
"estimated_cost": 60,
"would_charge_credits": 60,
"actual_cost": 60
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGenerateAllCollectionCanvas"
}GET/v1/collections/{id}/canvases/{canvasId}/exportExport a canvas
Exports the canvas as legacy MaskoAnimationConfig JSON by default, or as a target-specific delivery envelope with delivery=1. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
canvasIdpath · requiredstring
formatquerystring · json
deliveryqueryReturn the delivery envelope instead of legacy MaskoAnimationConfig data.
string · 1
targetqueryDelivery media target. macos returns HEVC URLs, windows returns WebM URLs, web returns WebM and HEVC URLs, full returns all selected formats.
string · macos, windows, web, full
modequeryDelivery mode. selected returns one variant; manifest includes known variants.
string · selected, manifest
sizequerySelected delivery size in pixels, if that size variant has already been generated.
integer
Responses
200 Canvas export data
application/json
dataobject · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Export a canvas",
"description": "Exports the canvas as legacy MaskoAnimationConfig JSON by default, or as a target-specific delivery envelope with delivery=1. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"json"
]
},
"required": false,
"name": "format",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"1"
],
"description": "Return the delivery envelope instead of legacy MaskoAnimationConfig data."
},
"required": false,
"description": "Return the delivery envelope instead of legacy MaskoAnimationConfig data.",
"name": "delivery",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"macos",
"windows",
"web",
"full"
],
"description": "Delivery media target. macos returns HEVC URLs, windows returns WebM URLs, web returns WebM and HEVC URLs, full returns all selected formats."
},
"required": false,
"description": "Delivery media target. macos returns HEVC URLs, windows returns WebM URLs, web returns WebM and HEVC URLs, full returns all selected formats.",
"name": "target",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"selected",
"manifest"
],
"description": "Delivery mode. selected returns one variant; manifest includes known variants."
},
"required": false,
"description": "Delivery mode. selected returns one variant; manifest includes known variants.",
"name": "mode",
"in": "query"
},
{
"schema": {
"type": "integer",
"minimum": 0,
"exclusiveMinimum": true,
"description": "Selected delivery size in pixels, if that size variant has already been generated."
},
"required": false,
"description": "Selected delivery size in pixels, if that size variant has already been generated.",
"name": "size",
"in": "query"
}
],
"responses": {
"200": {
"description": "Canvas export data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ExportConfigResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"deprecated": true,
"operationId": "legacyGetCollectionCanvasExport"
}GET/v1/canvas-templatesList canvas templates
Returns built-in templates plus any user-owned templates. Templates describe node prompts and edge definitions used to bootstrap canvases (e.g. "Essential Mascot", "Bonzi Buddy"). No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 List of canvas templates
application/json
dataarray · requiredNested fields
objectstringResource type. Always "canvas_template".
Values: "canvas_template"
idstring · requirednamestring · requireddescriptionstring · nullable · requiredsourcestring · requiredValues: "builtin", "user"
publicbooleannodesarrayNested fields
object
edgesarrayNested fields
object
inputsarrayNested fields
object
created_atstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "List canvas templates",
"description": "Returns built-in templates plus any user-owned templates. Templates describe node prompts and edge definitions used to bootstrap canvases (e.g. \"Essential Mascot\", \"Bonzi Buddy\"). No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "List of canvas templates",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasTemplateListResponse"
},
"example": {
"data": [
{
"id": "bonzi-buddy-7state",
"name": "Bonzi Buddy",
"description": "7 animated poses with rich interactions: idle, coding, thinking, waving, celebrating, sleeping, and greeting on click. Classic Bonzi Buddy personality with sounds. ~340 credits.",
"source": "builtin",
"nodes": [
{
"key": "idle",
"name": "Idle",
"imagePrompt": "Standing casually, looking around curiously with big expressive eyes, slight swaying, hands at sides, friendly relaxed expression",
"position": {
"x": 0,
"y": 0
}
}
],
"edges": []
}
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "listCanvasTemplates",
"parameters": [
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}POST/v1/canvas-templatesCreate a canvas template
Creates a reusable user-owned canvas template. Templates can later be applied via POST /v1/mascots/{id}/canvases with template_id. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
Request body
application/jsonStudioCreateTemplateBody
namestring · requiredTemplate name.
Length: 1 to unbounded characters
descriptionstringWhat the template does.
canvas_idstring · uuidExisting canvas to snapshot. Required together with mascot_id. Mutually exclusive with template.
mascot_idstring · uuidSource mascot for the snapshot. Required together with canvas_id.
templateobjectRaw template JSON. Provide this OR (canvas_id + collection_id).
publicbooleanIf true, template is visible to all users. Defaults to false.
CreateTemplateBody
namestring · requiredTemplate name.
Length: 1 to unbounded characters
descriptionstringWhat the template does.
canvas_idstring · uuidExisting canvas to snapshot. Required together with collection_id. Mutually exclusive with template.
collection_idstring · uuidSource collection for the snapshot. Required together with canvas_id.
templateobjectRaw template JSON. Provide this OR (canvas_id + collection_id).
publicbooleanIf true, template is visible to all users. Defaults to false.
Responses
201 Created template
application/json
dataobject · requiredNested fields
objectstringResource type. Always "canvas_template".
Values: "canvas_template"
idstring · requirednamestring · requireddescriptionstring · nullable · requiredsourcestring · requiredValues: "builtin", "user"
publicbooleannodesarrayNested fields
object
edgesarrayNested fields
object
inputsarrayNested fields
object
created_atstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Create a canvas template",
"description": "Creates a reusable user-owned canvas template. Templates can later be applied via POST `/v1/mascots/{id}/canvases` with `template_id`. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioCreateTemplateBody"
},
{
"$ref": "#/components/schemas/CreateTemplateBody"
}
]
}
}
}
},
"responses": {
"201": {
"description": "Created template",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasTemplateResponse"
},
"example": {
"data": {
"id": "a5eba03f-8c29-481b-98b9-5cfc778cfcc7",
"name": "test-template-tmp",
"created_at": "2026-04-19T09:42:35.319739+00:00",
"source": "user",
"public": false
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "createCanvasTemplate",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}GET/v1/canvas-templates/{id}Get canvas template details
Returns the full template definition including node prompts, edges, and any declared inputs. Works for both built-in and user-owned templates. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Template details
application/json
dataobject · requiredNested fields
objectstringResource type. Always "canvas_template".
Values: "canvas_template"
idstring · requirednamestring · requireddescriptionstring · nullable · requiredsourcestring · requiredValues: "builtin", "user"
publicbooleannodesarrayNested fields
object
edgesarrayNested fields
object
inputsarrayNested fields
object
created_atstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Get canvas template details",
"description": "Returns the full template definition including node prompts, edges, and any declared inputs. Works for both built-in and user-owned templates. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"200": {
"description": "Template details",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasTemplateResponse"
},
"example": {
"data": {
"id": "claude-code-4state-lite",
"name": "Essential Mascot",
"description": "All 4 reactions (resting, coding, thinking, waving) at a lower cost. Uses smart routing to keep animations minimal. ~144 credits.",
"source": "builtin",
"nodes": [
{
"key": "idle",
"name": "Idle",
"imagePrompt": "Relaxed, calm, sitting on the floor or resting, eyes half-open, peaceful expression, breathing gently",
"position": {
"x": 0,
"y": 0
}
}
],
"edges": [],
"inputs": [
{
"name": "claudeCode::isWorking",
"type": "boolean",
"default": false,
"system": true
}
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "getCanvasTemplate"
}PATCH/v1/canvas-templates/{id}Update a canvas template
Updates name, description, public flag, or the template graph for a user-owned template. Built-in templates cannot be modified (returns 403). No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
Request body
application/jsonnamestringNew template name.
Length: 1 to unbounded characters
descriptionstringUpdated description.
templateobjectReplacement template JSON.
publicbooleanToggle whether template is visible to all users.
Responses
200 Template updated
application/json
dataobject · requiredNested fields
objectstringResource type. Always "canvas_template".
Values: "canvas_template"
idstring · requirednamestring · requireddescriptionstring · nullable · requiredsourcestring · requiredValues: "builtin", "user"
publicbooleannodesarrayNested fields
object
edgesarrayNested fields
object
inputsarrayNested fields
object
created_atstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Update a canvas template",
"description": "Updates name, description, public flag, or the template graph for a user-owned template. Built-in templates cannot be modified (returns 403). No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateTemplateBody"
}
}
}
},
"responses": {
"200": {
"description": "Template updated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasTemplateResponse"
},
"example": {
"data": {
"id": "a5eba03f-8c29-481b-98b9-5cfc778cfcc7",
"user_id": "fda8417d-8789-4dce-aa64-c553a3de2ac0",
"name": "test-template-tmp",
"description": "Updated description",
"template": {
"edges": [
{
"source": "a",
"target": "a",
"duration": 4,
"description": "A idling"
}
],
"nodes": [
{
"key": "a",
"name": "A",
"position": {
"x": 0,
"y": 0
},
"imagePrompt": "pose A"
}
],
"inputs": []
},
"public": false,
"created_at": "2026-04-19T09:42:35.319739+00:00",
"updated_at": "2026-04-19T09:42:35.319739+00:00"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "updateCanvasTemplate"
}DELETE/v1/canvas-templates/{id}Delete a canvas template
Deletes a user-owned template. Built-in templates cannot be deleted (returns 403). Returns 204. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
204 Template deleted
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Delete a canvas template",
"description": "Deletes a user-owned template. Built-in templates cannot be deleted (returns 403). Returns 204. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"204": {
"description": "Template deleted",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "deleteCanvasTemplate"
}GET/v1/jobsList generation jobs
Returns paginated generation jobs owned by the caller, newest first. Use to track recent activity or find a specific job. Filter by status or mascot. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
from_variant_idqueryFilter transitions by the variant of the starting pose.
string
to_variant_idqueryFilter transitions by the variant of the ending pose.
string
variant_idqueryFilter jobs by their single variant. Cross-variant transitions have no single variant; use from_variant_id or to_variant_id.
string
statusqueryFilter by status: pending, processing, completed, failed.
string
mascot_idqueryFilter to jobs for a mascot in the credential workspace. A mascot outside that workspace returns 404.
string
typequeryFilter by job type. Values: item_generation, image_generation, logo, animation, video_edit, reverse, size_variant, size_variant_batch, export_animation, scene_generation, interactive_generation, sticker_generation, svg_generation.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
collection_idqueryLegacy-only filter. Use mascot_id for new clients; never send both.
string
Responses
200 List of jobs
application/json
StudioJobListResponse
dataarray · requiredNested fields
objectstringResource type. Always "job".
Values: "job"
variant_idstring · uuid · nullable · requiredSelected mascot variant, or null for original-context and older untagged jobs.
generation_contextobjectFrozen generation context: variant id and name, engine hash, the mascot prompt and style you provided, reference asset IDs and asset inputs. Transitions include transition.before and transition.after with pose IDs and saved variant contexts; video edits add transition_edit with the source video and requested edit. Internal generation execution details are never included.
idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "item_generation", "image_generation", "logo", "animation", "video_edit", "reverse", "size_variant", "size_variant_batch", "export_animation", "scene_generation", "sticker_generation", "svg_generation", "interactive_generation", "re_export", "canvas_orchestration"
mascot_idstring · uuid · nullable · requiredcost_creditsnumber · requiredcreated_atstring · requiredupdated_atstring · requireditem_idstring · uuid · nullableitem_namestring · nullableerrorstring · nullableurlsobjectmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
JobListResponse
dataarray · requiredNested fields
objectstringResource type. Always "job".
Values: "job"
variant_idstring · uuid · nullable · requiredSelected mascot variant, or null for original-context and older untagged jobs.
generation_contextobjectFrozen generation context: variant id and name, engine hash, the mascot prompt and style you provided, reference asset IDs and asset inputs. Transitions include transition.before and transition.after with pose IDs and saved variant contexts; video edits add transition_edit with the source video and requested edit. Internal generation execution details are never included.
idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "item_generation", "image_generation", "logo", "animation", "video_edit", "reverse", "size_variant", "size_variant_batch", "export_animation", "scene_generation", "sticker_generation", "svg_generation", "interactive_generation", "re_export", "canvas_orchestration"
collection_idstring · uuid · nullable · requiredcost_creditsnumber · requiredcreated_atstring · requiredupdated_atstring · requireditem_idstring · uuid · nullableitem_namestring · nullableerrorstring · nullableurlsobjectmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Jobs"
],
"summary": "List generation jobs",
"description": "Returns paginated generation jobs owned by the caller, newest first. Use to track recent activity or find a specific job. Filter by status or mascot. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter transitions by the variant of the starting pose."
},
"required": false,
"description": "Filter transitions by the variant of the starting pose.",
"name": "from_variant_id",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter transitions by the variant of the ending pose."
},
"required": false,
"description": "Filter transitions by the variant of the ending pose.",
"name": "to_variant_id",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter jobs by their single variant. Cross-variant transitions have no single variant; use from_variant_id or to_variant_id."
},
"required": false,
"description": "Filter jobs by their single variant. Cross-variant transitions have no single variant; use from_variant_id or to_variant_id.",
"name": "variant_id",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Filter by status: pending, processing, completed, failed."
},
"required": false,
"description": "Filter by status: pending, processing, completed, failed.",
"name": "status",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter to jobs for a mascot in the credential workspace. A mascot outside that workspace returns 404."
},
"required": false,
"description": "Filter to jobs for a mascot in the credential workspace. A mascot outside that workspace returns 404.",
"name": "mascot_id",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Filter by job type. Values: item_generation, image_generation, logo, animation, video_edit, reverse, size_variant, size_variant_batch, export_animation, scene_generation, interactive_generation, sticker_generation, svg_generation."
},
"required": false,
"description": "Filter by job type. Values: item_generation, image_generation, logo, animation, video_edit, reverse, size_variant, size_variant_batch, export_animation, scene_generation, interactive_generation, sticker_generation, svg_generation.",
"name": "type",
"in": "query"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter to jobs for a mascot in the credential workspace. A mascot outside that workspace returns 404."
},
"required": false,
"description": "Legacy-only filter. Use mascot_id for new clients; never send both.",
"name": "collection_id",
"in": "query",
"deprecated": true
}
],
"responses": {
"200": {
"description": "List of jobs",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioJobListResponse"
},
{
"$ref": "#/components/schemas/JobListResponse"
}
]
},
"example": {
"data": [
{
"id": "ccc8bbf9-d3b2-4d8b-b21f-c5f91c5fbffa",
"type": "scene_generation",
"status": "completed",
"mascot_id": "21c247da-2359-47b2-97f9-da70bc1af688",
"output_asset_id": null,
"cost_credits": 3,
"error": null,
"created_at": "2026-04-14T11:14:49.18381+00:00",
"updated_at": "2026-04-14T11:15:47.524116+00:00",
"op_code": null,
"input_data": {
"cost": 3,
"scene": "A misty bamboo forest at dawn with golden sun rays piercing through the leaves",
"action": "stretching with arms wide and a relaxed grin",
"item_id": "7defa668-99ec-4f34-afa0-48599889958b",
"position": "center",
"aspect_ratio": "4:5",
"collection_id": "21c247da-2359-47b2-97f9-da70bc1af688"
},
"output_data": {
"width": 3712,
"height": 4608,
"image_url": "image/png/5c08e718-acf3-4327-8ef5-895d0beefd4d.coach-ginger"
}
}
],
"meta": {
"pagination": {
"total": 29,
"limit": 5,
"offset": 0,
"has_more": true
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "listJobs"
}GET/v1/jobs/{id}Long-poll a job to completion
Returns job status and output URLs. Pass ?wait=true to long-poll until the job completes or fails (up to ~60s). Returns 404 if the job does not exist or is not owned by the caller.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
waitqueryIf true, long-poll until the job completes, fails, or timeout is reached. If false or omitted, return the current status immediately.
string · true, false
timeoutqueryLong-poll timeout in seconds when wait=true. 1 to 120. Defaults to 120. On timeout the response is 200 with the current (still pending) job state, not 408.
number
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Job details
application/json
StudioJobResponse
dataobject · requiredNested fields
objectstringResource type. Always "job".
Values: "job"
variant_idstring · uuid · nullable · requiredSelected mascot variant, or null for original-context and older untagged jobs.
generation_contextobjectFrozen generation context: variant id and name, engine hash, the mascot prompt and style you provided, reference asset IDs and asset inputs. Transitions include transition.before and transition.after with pose IDs and saved variant contexts; video edits add transition_edit with the source video and requested edit. Internal generation execution details are never included.
idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "item_generation", "image_generation", "logo", "animation", "video_edit", "reverse", "size_variant", "size_variant_batch", "export_animation", "scene_generation", "sticker_generation", "svg_generation", "interactive_generation", "re_export", "canvas_orchestration"
mascot_idstring · uuid · nullable · requiredcost_creditsnumber · requiredcreated_atstring · requiredupdated_atstring · requireditem_idstring · uuid · nullableitem_namestring · nullableerrorstring · nullableurlsobjectJobResponse
dataobject · requiredNested fields
objectstringResource type. Always "job".
Values: "job"
variant_idstring · uuid · nullable · requiredSelected mascot variant, or null for original-context and older untagged jobs.
generation_contextobjectFrozen generation context: variant id and name, engine hash, the mascot prompt and style you provided, reference asset IDs and asset inputs. Transitions include transition.before and transition.after with pose IDs and saved variant contexts; video edits add transition_edit with the source video and requested edit. Internal generation execution details are never included.
idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "item_generation", "image_generation", "logo", "animation", "video_edit", "reverse", "size_variant", "size_variant_batch", "export_animation", "scene_generation", "sticker_generation", "svg_generation", "interactive_generation", "re_export", "canvas_orchestration"
collection_idstring · uuid · nullable · requiredcost_creditsnumber · requiredcreated_atstring · requiredupdated_atstring · requireditem_idstring · uuid · nullableitem_namestring · nullableerrorstring · nullableurlsobject400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Jobs"
],
"summary": "Long-poll a job to completion",
"description": "Returns job status and output URLs. Pass `?wait=true` to long-poll until the job completes or fails (up to ~60s). Returns 404 if the job does not exist or is not owned by the caller.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "If true, long-poll until the job completes, fails, or timeout is reached. If false or omitted, return the current status immediately."
},
"required": false,
"description": "If true, long-poll until the job completes, fails, or timeout is reached. If false or omitted, return the current status immediately.",
"name": "wait",
"in": "query"
},
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 120,
"description": "Long-poll timeout in seconds when wait=true. 1 to 120. Defaults to 120. On timeout the response is 200 with the current (still pending) job state, not 408."
},
"required": false,
"description": "Long-poll timeout in seconds when wait=true. 1 to 120. Defaults to 120. On timeout the response is 200 with the current (still pending) job state, not 408.",
"name": "timeout",
"in": "query"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"200": {
"description": "Job details",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioJobResponse"
},
{
"$ref": "#/components/schemas/JobResponse"
}
]
},
"example": {
"data": {
"id": "ccc8bbf9-d3b2-4d8b-b21f-c5f91c5fbffa",
"status": "completed",
"type": "scene_generation",
"mascot_id": "21c247da-2359-47b2-97f9-da70bc1af688",
"cost_credits": 3,
"created_at": "2026-04-14T11:14:49.18381+00:00",
"updated_at": "2026-04-14T11:15:47.524116+00:00",
"item_id": "7defa668-99ec-4f34-afa0-48599889958b",
"item_name": "loop test - bamboo",
"urls": {
"image": "https://storage.googleapis.com/masco-media/image/png/5c08e718-acf3-4327-8ef5-895d0beefd4d.coach-ginger?GoogleAccessId=...&Expires=...&Signature=..."
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "getJob"
}GET/v1/creditsGet credit balance
Returns current credits split into subscription (monthly allowance) and topup (purchased or bonus), plus total. Use before kicking off a large generation run to confirm balance. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Credit balance
application/json
dataobject · requiredNested fields
subscriptionnumber · requiredtopupnumber · requiredtotalnumber · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Credits"
],
"summary": "Get credit balance",
"description": "Returns current credits split into `subscription` (monthly allowance) and `topup` (purchased or bonus), plus `total`. Use before kicking off a large generation run to confirm balance. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Credit balance",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreditsResponse"
},
"example": {
"data": {
"subscription": 0,
"topup": 894,
"total": 894
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "listCredits",
"parameters": [
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}GET/v1/stylesList available style presets
Returns all built-in style presets (cartoon, flat, pixel, kawaii, etc.) with preview URLs where available. Use id in generation prompts or as a style hint. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 Available style presets
application/json
dataarray · requiredNested fields
idstring · requirednamestring · requireddescriptionstringthumbnail_urlstring · uri400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Styles"
],
"summary": "List available style presets",
"description": "Returns all built-in style presets (cartoon, flat, pixel, kawaii, etc.) with preview URLs where available. Use `id` in generation prompts or as a style hint. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "Available style presets",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StylesResponse"
},
"example": {
"data": [
{
"id": "cartoon",
"name": "Cartoon",
"description": "Fun, colorful with bold outlines",
"category": "classic",
"preview_url": "https://assets.masko.ai/7fced6/budget-buddy-2702/think-2bb9ff25.png"
},
{
"id": "flat",
"name": "Flat",
"description": "Clean, minimal, geometric",
"category": "classic",
"preview_url": "https://assets.masko.ai/7fced6/turbo-9bb8/encourage-0791d248.png"
},
{
"id": "pixel",
"name": "Pixel Art",
"description": "Retro 8-bit video game style",
"category": "retro",
"preview_url": "https://assets.masko.ai/7fced6/pixel-runner-f1fb/flex-06183f7f.png"
}
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "listStyles",
"parameters": [
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}POST/v1/uploadUpload an image or video
Accepts an image URL as JSON or an image/video file as multipart form data. Stores an asset owned by the caller and returns data.asset_id for use as a reference or source_asset_id. Malformed multipart data or a missing file returns 400. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
application/jsonurlstring · uri · requiredPublic HTTP(S) image URL without credentials. Downloaded server-side with a 15-second deadline, public-address checks on every redirect, and a streamed 10MB limit. Private addresses are rejected. Images only (image/png, image/jpeg, image/webp, image/svg+xml, image/gif). SVGs are auto-converted to PNG. For video uploads or binary files, POST the same endpoint as multipart/form-data with a "file" field (max 10MB for images, 50MB for videos).
multipart/form-datafilestring · binary · requiredResponses
200 Uploaded asset
application/json
dataobject · requiredNested fields
asset_idstring · uuid · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Upload"
],
"summary": "Upload an image or video",
"description": "Accepts an image URL as JSON or an image/video file as multipart form data. Stores an asset owned by the caller and returns `data.asset_id` for use as a reference or `source_asset_id`. Malformed multipart data or a missing file returns 400. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UploadUrlBody"
}
},
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"file": {
"type": "string",
"format": "binary"
}
},
"required": [
"file"
]
}
}
}
},
"responses": {
"200": {
"description": "Uploaded asset",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UploadResponse"
},
"example": {
"data": {
"asset_id": "e906ebb5-deb1-4010-82f9-f0182a3812e0"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "upload",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}POST/v1/generate/previewPreview an idea before creating a collection
Synchronous, throwaway image generation for iterating on mascot ideas cheaply before committing to a collection. No collection required. Tweak the prompt, regenerate, compare, then use the winning prompt + a reference image in POST /v1/collections. Also supports reference_image_urls to check "does this prompt resemble my sketch?". Returns signed URLs with a 1-hour expiry - the images are not stored. Costs 1 credit per image (the cost field in the response confirms the amount). Returns 402 if credits are insufficient.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonpromptstring · requiredText description of the mascot to preview. Preview exists for cheap idea iteration: tweak the prompt, regenerate, compare, then create the collection with the winning reference. Costs 1 credit per image generated.
Length: 1 to unbounded characters
preset_idstringOptional style preset ID. List presets via GET /v1/styles.
countnumberNumber of preview variants to generate. 1 to 6. Defaults to 1.
Default: 1
Range: 1 to 6
reference_image_urlsarrayOptional "check against" images. Feed an image you want the mascot to resemble; the preview tries to match it. Useful for "does this prompt produce something close to my sketch?" iterations. Not stored - use POST /v1/collections/:id/references for persistent references.
Nested fields
string
Responses
200 Preview images
application/json
dataobject · requiredNested fields
imagesarray · requiredNested fields
urlstring · uri · requiredexpires_innumber · requiredcostnumber · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Preview an idea before creating a collection",
"description": "Synchronous, throwaway image generation for iterating on mascot ideas cheaply before committing to a collection. No collection required. Tweak the prompt, regenerate, compare, then use the winning prompt + a reference image in POST /v1/collections. Also supports `reference_image_urls` to check \"does this prompt resemble my sketch?\". Returns signed URLs with a 1-hour expiry - the images are not stored. Costs 1 credit per image (the `cost` field in the response confirms the amount). Returns 402 if credits are insufficient.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreviewBody"
}
}
}
},
"responses": {
"200": {
"description": "Preview images",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PreviewResponse"
},
"example": {
"data": {
"images": [
{
"url": "https://storage.googleapis.com/masco-media/api-previews/.../3a0d33a8.jpeg?GoogleAccessId=...&Expires=...&Signature=...",
"expires_in": 3600
}
],
"cost": 1
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "API version used to build this response.",
"schema": {
"type": "string",
"example": "2026-09-26"
}
}
}
}
},
"operationId": "createGeneratePreview",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
]
}POST/v1/analyzeAnalyze an image or website URL
Analyzes an image (by URL) or a public website and returns a description, style hints, a suggested mascot name, and a suggested prompt ready to feed into POST /v1/mascots. When type=url, the response also includes a screenshot (omitted from example for brevity). No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
Request body
application/jsonStudioAnalyzeBody
What to analyze. Use type="image" with image_url to analyze a mascot picture, or type="url" with url to analyze a brand website.
Option 1
typestring · requiredAnalyze a mascot/character image.
Values: "image"
image_urlstring · uri · requiredPublic image URL to analyze. Returns a structured description suitable for seeding a mascot prompt.
Option 2
typestring · requiredAnalyze a brand website.
Values: "url"
urlstring · uri · requiredWebsite URL to analyze. Extracts brand colors, product description, and tone.
AnalyzeBody
What to analyze. Use type="image" with image_url to analyze a mascot picture, or type="url" with url to analyze a brand website.
Option 1
typestring · requiredAnalyze a mascot/character image.
Values: "image"
image_urlstring · uri · requiredPublic image URL to analyze. Returns a structured description suitable for seeding a collection prompt.
Option 2
typestring · requiredAnalyze a brand website.
Values: "url"
urlstring · uri · requiredWebsite URL to analyze. Extracts brand colors, product description, and tone.
Responses
200 Analysis result (image or url)
application/json
AnalyzeImageResponse
dataobject · requiredNested fields
suggested_namestring · requireddescriptionstring · requiredstyle_hintsarray · requiredNested fields
string
suggested_promptstring · requiredAnalyzeUrlResponse
dataobject · requiredNested fields
screenshotPathstringmarkdownstringmetadataobjectdescriptionstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Analyze"
],
"summary": "Analyze an image or website URL",
"description": "Analyzes an image (by URL) or a public website and returns a description, style hints, a suggested mascot name, and a suggested prompt ready to feed into POST `/v1/mascots`. When `type=url`, the response also includes a screenshot (omitted from example for brevity). No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/StudioAnalyzeBody"
},
{
"$ref": "#/components/schemas/AnalyzeBody"
}
]
}
}
}
},
"responses": {
"200": {
"description": "Analysis result (image or url)",
"content": {
"application/json": {
"schema": {
"anyOf": [
{
"$ref": "#/components/schemas/AnalyzeImageResponse"
},
{
"$ref": "#/components/schemas/AnalyzeUrlResponse"
}
]
},
"example": {
"data": {
"description": "A whimsical, wide-eyed ginger cat character designed with a claymation-like aesthetic. The cat features a plump, rounded body, a matte terracotta finish with fine dark speckles, and a charmingly surprised facial expression characterized by large circular eyes and thin, stylized whiskers.",
"style_hints": [
"Claymation",
"Terracotta texture",
"Matte finish",
"Rounded minimalist forms",
"Speckled surface",
"Soft studio lighting",
"3D sculpture"
],
"suggested_name": "Terracotta Tom",
"suggested_prompt": "A high-quality 3D render of a chubby ginger cat mascot in a claymation style. The cat is sitting, has a surprised expression with wide white eyes, a tiny pink nose, and thin clay whiskers. The material is matte terracotta orange with subtle dark speckles. Soft lighting, white background, clean minimalist aesthetic."
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "analyze",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}GET/v1/webhooksList webhook subscriptions
Returns all webhook subscriptions owned by the caller, including consecutive_failures and active flag. Webhooks are auto-deactivated after repeated delivery failures. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
200 List of webhooks
application/json
dataarray · requiredNested fields
objectstringResource type. Always "webhook".
Values: "webhook"
idstring · uuid · requiredurlstring · uri · requiredeventsarray · requiredNested fields
string
activeboolean · requiredconsecutive_failuresnumber · requiredcreated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Webhooks"
],
"summary": "List webhook subscriptions",
"description": "Returns all webhook subscriptions owned by the caller, including `consecutive_failures` and `active` flag. Webhooks are auto-deactivated after repeated delivery failures. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"responses": {
"200": {
"description": "List of webhooks",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/WebhookListResponse"
},
"example": {
"data": [
{
"id": "7c358096-8521-463c-b9c3-fd81bddaffc3",
"url": "https://example.com",
"events": [
"job.completed"
],
"active": true,
"consecutive_failures": 3,
"created_at": "2026-04-08T03:31:26.284516+00:00"
}
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "listWebhooks",
"parameters": [
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}POST/v1/webhooksCreate a webhook subscription
Creates a webhook subscription. Returns 201 with the subscription record including a one-time secret used to verify future HMAC signatures - store it immediately, it is never returned again. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Request body (required)
Request body
application/jsonurlstring · uri · requiredHTTPS URL that receives webhook POSTs as JSON. Each delivery includes Masko-Signature (t=<unix-seconds>,v1=<hmac-hex of "<t>.<body>">), X-Masko-Signature (sha256=<hmac-hex of body>), X-Masko-Timestamp, X-Masko-Event, and Masko-Event-Id headers. The body carries a stable event id that every retry reuses. A non-2xx response or network error is retried after 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours, and 12 hours. Auto-disables after 100 consecutive failed attempts.
eventsarrayEvent types to subscribe to. Omit for all events. Available events: job.completed, job.failed.
Nested fields
string
Responses
201 Created webhook
application/json
dataobject · requiredNested fields
objectstringResource type. Always "webhook".
Values: "webhook"
idstring · uuid · requiredurlstring · uri · requiredeventsarray · requiredNested fields
string
activeboolean · requiredconsecutive_failuresnumber · requiredcreated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Webhooks"
],
"summary": "Create a webhook subscription",
"description": "Creates a webhook subscription. Returns 201 with the subscription record including a one-time `secret` used to verify future HMAC signatures - store it immediately, it is never returned again. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateWebhookBody"
}
}
}
},
"responses": {
"201": {
"description": "Created webhook",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/WebhookResponse"
},
"example": {
"data": {
"id": "5863639e-ad3f-4d4e-9bb3-12d0088d7d52",
"url": "https://example.com/test-webhook",
"events": [
"job.completed",
"job.failed"
],
"created_at": "2026-04-19T09:42:34.430422+00:00",
"secret": "whsec_3abe7a98aab0fcdb5c3b97142cf90dabccca37aa42974a198e7bdedb1148ce93"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "createWebhook",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
]
}DELETE/v1/webhooks/{id}Delete a webhook subscription
Removes the webhook subscription - no further events will be delivered. Returns 204. No credit cost.
Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Masko-API-VersionheaderUse 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract.
string · 2026-09-26, legacy
api_versionqueryEquivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree.
string · 2026-09-26, legacy
Responses
204 Webhook deleted
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Webhooks"
],
"summary": "Delete a webhook subscription",
"description": "Removes the webhook subscription - no further events will be delivered. Returns 204. No credit cost.\n\nSelect Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"in": "header",
"name": "Masko-API-Version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Use 2026-09-26 for mascot_id resource fields. Unversioned shared routes retain the legacy contract."
},
{
"in": "query",
"name": "api_version",
"required": false,
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
},
"description": "Equivalent to the version header, for polling URLs and clients that accept only relative paths. Header and query must agree."
}
],
"responses": {
"204": {
"description": "Webhook deleted",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26",
"legacy"
]
}
}
}
}
},
"operationId": "deleteWebhook"
}GET/v1/canvases/{canvasId}/validateValidate the stored canvas graph
Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. GET requires read access. A structurally invalid graph still returns 200 with data.valid=false.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Responses
200 Graph validation result.
application/json
dataobject · requiredNested fields
validboolean · requiredissuesarray · requiredNested fields
severitystring · requiredValues: "error", "warning"
codestring · requiredmessagestring · requirednodeIdstringedgeIdstringsummaryobject · requiredNested fields
errorsnumber · requiredwarningsnumber · required401 Missing or invalid credential.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Insufficient credential permissions.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot or canvas not found in this workspace.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Validation could not be completed.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Validate the stored canvas graph",
"description": "Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. GET requires read access. A structurally invalid graph still returns 200 with data.valid=false.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Graph validation result.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"nodeId": {
"type": "string"
},
"edgeId": {
"type": "string"
}
},
"required": [
"severity",
"code",
"message"
]
}
},
"summary": {
"type": "object",
"properties": {
"errors": {
"type": "number"
},
"warnings": {
"type": "number"
}
},
"required": [
"errors",
"warnings"
]
}
},
"required": [
"valid",
"issues",
"summary"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Missing or invalid credential.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Insufficient credential permissions.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot or canvas not found in this workspace.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Validation could not be completed.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "getCanvasValidate",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/validateValidate the stored canvas graph
Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. POST requires write access and accepts no body; prefer GET for read-only checks. A structurally invalid graph still returns 200 with data.valid=false.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Responses
200 Graph validation result.
application/json
dataobject · requiredNested fields
validboolean · requiredissuesarray · requiredNested fields
severitystring · requiredValues: "error", "warning"
codestring · requiredmessagestring · requirednodeIdstringedgeIdstringsummaryobject · requiredNested fields
errorsnumber · requiredwarningsnumber · required401 Missing or invalid credential.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Insufficient credential permissions.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot or canvas not found in this workspace.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Validation could not be completed.
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Validate the stored canvas graph",
"description": "Checks graph structure and assigned media references without generating media or changing the graph. Draft edges without videos report missing-video; this is expected before animation generation. POST requires write access and accepts no body; prefer GET for read-only checks. A structurally invalid graph still returns 200 with data.valid=false.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"responses": {
"200": {
"description": "Graph validation result.",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"issues": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning"
]
},
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"nodeId": {
"type": "string"
},
"edgeId": {
"type": "string"
}
},
"required": [
"severity",
"code",
"message"
]
}
},
"summary": {
"type": "object",
"properties": {
"errors": {
"type": "number"
},
"warnings": {
"type": "number"
}
},
"required": [
"errors",
"warnings"
]
}
},
"required": [
"valid",
"issues",
"summary"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Missing or invalid credential.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Insufficient credential permissions.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot or canvas not found in this workspace.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"500": {
"description": "Validation could not be completed.",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "validateCanvas",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/repairRepair canvas preview media
Plans or starts a narrow repair for missing base WebM/HEVC derivatives on videos already assigned to this canvas. Agent workflow: first call with dry_run=true or omit dry_run because it defaults to true. Read status.media.preview, summary, repairs, in_flight, and skipped. If status.media.preview.waiting_edges > 0, wait and poll again instead of repairing. Only call again with dry_run=false if the repair plan matches the intended canvas videos. This endpoint is for the specific case where status.media.generation.ready=true, status.media.preview.ready=false, and status.media.preview.repairable=true. It does not regenerate animations, does not run mascot-wide jobs, does not create size variants, does not expose prompt/model controls, does not force regeneration, and does not archive existing assets.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsontargetstringRepair target. Use video_derivatives when canvas status shows status.media.preview.repairable=true because completed edge videos are missing base WebM and/or HEVC child assets. If status.media.preview.waiting_edges > 0, wait and poll again instead of repairing. This target only repairs videos already assigned to the canvas graph.
Values: "video_derivatives"
Default: "video_derivatives"
formatsarrayBase derivative formats to repair. Defaults to both webm and hevc. This does not include size variants; optimized sizes must be generated through the size-variant flow.
Default: ["webm","hevc"]
Items: 1 to unbounded
Nested fields
string · webm, hevc
dry_runbooleanWhen true, returns the exact repair plan without creating jobs or assets. Defaults to true. Agents should call dry_run=true first, inspect repairs/skipped/in_flight, then call dry_run=false only if the plan touches the intended videos.
Default: true
Responses
200 Repair plan returned
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_derivatives"
dry_runboolean · requiredformatsarray · requiredNested fields
string · webm, hevc
statusobject · requiredNested fields
generated_readyboolean · requiredpreview_readyboolean · requiredmediaobjectNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
See the OpenAPI schema for deeper nested fields.
summaryobject · requiredNested fields
edges_checkednumber · requiredvideos_checkednumber · requiredvideos_readynumber · requiredvideos_to_repairnumber · requiredvideos_in_flightnumber · requiredvideos_skippednumber · requiredrepairsarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidin_flightarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidskippedarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
reasonstring · requiredjobsarrayNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredvideo_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
formatsarray · requiredNested fields
string · webm, hevc
202 Repair jobs started
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_derivatives"
dry_runboolean · requiredformatsarray · requiredNested fields
string · webm, hevc
statusobject · requiredNested fields
generated_readyboolean · requiredpreview_readyboolean · requiredmediaobjectNested fields
generationobject · requiredNested fields
readyboolean · requirednodesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredIncomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
failednumber · requirededgesobject · requiredNested fields
totalnumber · requiredcompletednumber · requiredpendingnumber · requiredfailednumber · requiredpreviewobject · requiredNested fields
readyboolean · requiredrepairableboolean · requiredrepairable_edgesnumber · requiredwaiting_edgesnumber · requiredmissing_edgesnumber · requiredmissing_formatsarray · requiredNested fields
string · webm, hevc
variantsobject · requiredNested fields
sizesarray · requiredNested fields
string
missingarray · requiredNested fields
edge_idstring · requiredsizestring · requiredformatsarray · requiredNested fields
See the OpenAPI schema for deeper nested fields.
summaryobject · requiredNested fields
edges_checkednumber · requiredvideos_checkednumber · requiredvideos_readynumber · requiredvideos_to_repairnumber · requiredvideos_in_flightnumber · requiredvideos_skippednumber · requiredrepairsarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidin_flightarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
missingarray · requiredNested fields
string · webm, hevc
actionstring · requiredValues: "create_derivatives", "already_in_flight"
job_idstring · uuidskippedarray · requiredNested fields
video_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
reasonstring · requiredjobsarrayNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredvideo_asset_idstring · uuid · requirededge_idsarray · requiredNested fields
string
formatsarray · requiredNested fields
string · webm, hevc
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Repair canvas preview media",
"description": "Plans or starts a narrow repair for missing base WebM/HEVC derivatives on videos already assigned to this canvas. Agent workflow: first call with `dry_run=true` or omit `dry_run` because it defaults to true. Read `status.media.preview`, `summary`, `repairs`, `in_flight`, and `skipped`. If `status.media.preview.waiting_edges > 0`, wait and poll again instead of repairing. Only call again with `dry_run=false` if the repair plan matches the intended canvas videos. This endpoint is for the specific case where `status.media.generation.ready=true`, `status.media.preview.ready=false`, and `status.media.preview.repairable=true`. It does not regenerate animations, does not run mascot-wide jobs, does not create size variants, does not expose prompt/model controls, does not force regeneration, and does not archive existing assets.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RepairCanvasBody"
}
}
}
},
"responses": {
"200": {
"description": "Repair plan returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasRepairResponse"
},
"example": {
"data": {
"target": "video_derivatives",
"dry_run": true,
"formats": [
"webm",
"hevc"
],
"status": {
"generated_ready": true,
"preview_ready": false,
"media": {
"generation": {
"ready": true,
"nodes": {
"total": 6,
"completed": 6,
"pending": 0,
"failed": 0
},
"edges": {
"total": 42,
"completed": 42,
"pending": 0,
"failed": 0
}
},
"preview": {
"ready": false,
"repairable": true,
"repairable_edges": 2,
"waiting_edges": 0,
"missing_edges": 2,
"missing_formats": [
"webm",
"hevc"
]
},
"variants": {
"sizes": [
"360"
],
"missing": []
}
}
},
"summary": {
"edges_checked": 42,
"videos_checked": 38,
"videos_ready": 36,
"videos_to_repair": 2,
"videos_in_flight": 0,
"videos_skipped": 0
},
"repairs": [
{
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"edge_ids": [
"enter-hover-perk"
],
"missing": [
"webm",
"hevc"
],
"action": "create_derivatives"
}
],
"in_flight": [],
"skipped": []
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"202": {
"description": "Repair jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasRepairResponse"
},
"example": {
"data": {
"target": "video_derivatives",
"dry_run": false,
"formats": [
"webm",
"hevc"
],
"status": {
"generated_ready": true,
"preview_ready": false,
"media": {
"generation": {
"ready": true,
"nodes": {
"total": 6,
"completed": 6,
"pending": 0,
"failed": 0
},
"edges": {
"total": 42,
"completed": 42,
"pending": 0,
"failed": 0
}
},
"preview": {
"ready": false,
"repairable": true,
"repairable_edges": 2,
"waiting_edges": 0,
"missing_edges": 2,
"missing_formats": [
"webm",
"hevc"
]
},
"variants": {
"sizes": [
"360"
],
"missing": []
}
}
},
"summary": {
"edges_checked": 42,
"videos_checked": 38,
"videos_ready": 36,
"videos_to_repair": 2,
"videos_in_flight": 0,
"videos_skipped": 0
},
"repairs": [
{
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"edge_ids": [
"enter-hover-perk"
],
"missing": [
"webm",
"hevc"
],
"action": "create_derivatives"
}
],
"in_flight": [],
"skipped": [],
"jobs": [
{
"job_id": "a1b2c3d4-0000-0000-0000-000000000001",
"poll_url": "/v1/jobs/a1b2c3d4-0000-0000-0000-000000000001?api_version=2026-09-26",
"video_asset_id": "a98ba960-c1b3-4bf5-9e6f-1d57b43c651d",
"edge_ids": [
"enter-hover-perk"
],
"formats": [
"webm",
"hevc"
]
}
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "repairCanvas",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/presentation/detect-facingDetect canvas natural facing
Analyzes completed canvas node images and returns a suggested presentation.naturalFacing value plus node-level evidence. This is a synchronous analysis endpoint. It does not write to the canvas graph and has no credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Responses
200 Suggested natural-facing presentation value
application/json
dataobject · requiredNested fields
suggestedNaturalFacingstring · requiredValues: "left", "neutral", "right"
confidencenumber · requiredwarningstringanalyzedNodeCountinteger · requiredRange: 0 to unbounded
nodeResultsarray · requiredNested fields
nodeIdstring · requirednodeNamestring · requiredfacingstring · requiredValues: "left", "neutral", "right"
confidencenumber · requiredreasonstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Detect canvas natural facing",
"description": "Analyzes completed canvas node images and returns a suggested presentation.naturalFacing value plus node-level evidence. This is a synchronous analysis endpoint. It does not write to the canvas graph and has no credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"responses": {
"200": {
"description": "Suggested natural-facing presentation value",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasFacingDetectionResponse"
},
"example": {
"data": {
"suggestedNaturalFacing": "left",
"confidence": 0.82,
"analyzedNodeCount": 3,
"nodeResults": [
{
"nodeId": "idle",
"nodeName": "Idle",
"facing": "left",
"confidence": 0.88,
"reason": "The mascot has a consistent left-facing body angle."
}
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "detectFacingCanvasPresentation",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/graph/extendLegacy partial canvas graph extension
Deprecated compatibility endpoint. New authoring clients should read the complete graph and graph_content_hash, reconcile locally, and PATCH the complete graph with expected_graph_hash.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonadd_nodesarrayNodes to append. Fails if any node ID already exists.
Default: []
Nested fields
idstring · requiredLength: 1 to unbounded characters
generationVariantIdstring · uuidApproved variant in the same mascot used by generate-all for a new pose. Existing pose identity is preserved; completed assets are not regenerated.
add_edgesarrayEdges to append. Fails if any edge ID already exists.
Default: []
Nested fields
idstring · requiredLength: 1 to unbounded characters
update_edgesarrayPartial edge patches keyed by id. Existing edge fields are preserved unless explicitly overwritten.
Default: []
Nested fields
idstring · requiredLength: 1 to unbounded characters
add_inputsarrayInputs to append. Existing input names are left unchanged.
Default: []
Nested fields
namestring · requiredLength: 1 to unbounded characters
Responses
200 Canvas graph extended
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requiredgraphobject · requiredupdated_atstring · requiredaddedobject · requiredNested fields
nodesnumber · requirededgesnumber · requiredinputsnumber · requiredupdatedobject · requiredNested fields
edgesnumber · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Legacy partial canvas graph extension",
"deprecated": true,
"description": "Deprecated compatibility endpoint. New authoring clients should read the complete graph and graph_content_hash, reconcile locally, and PATCH the complete graph with expected_graph_hash.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioExtendCanvasGraphBody"
}
}
}
},
"responses": {
"200": {
"description": "Canvas graph extended",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasGraphExtendResponse"
},
"example": {
"data": {
"id": "280ceab9-4673-4c78-b37c-3617feb51914",
"name": "Main canvas",
"graph": {
"nodes": [],
"edges": [],
"inputs": [],
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
}
},
"updated_at": "2026-05-04T12:00:00.000Z",
"added": {
"nodes": 1,
"edges": 2,
"inputs": 1
},
"updated": {
"edges": 1
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "extendCanvasGraph",
"x-masko-api-version": "2026-09-26"
}PATCH/v1/canvases/{canvasId}/edges/{edgeId}Patch a canvas edge
Patches one edge without replacing the graph. Use this for speed tuning after generation: normal transitions use speed 2, snappy interact transitions use 3-4, held/special loops use 2, and calm loops use 1.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
edgeIdpath · requiredstring
Request body (required)
Request body
application/jsonspeednumberPlayback speed multiplier for this edge. Normal transitions use 2, snappy interact transitions use 3-4, calm loops use 1.
Range: 0.1 to 10
Responses
200 Canvas edge patched
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requirededgeobject · requiredgraphobject · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Patch a canvas edge",
"description": "Patches one edge without replacing the graph. Use this for speed tuning after generation: normal transitions use speed 2, snappy interact transitions use 3-4, held/special loops use 2, and calm loops use 1.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "edgeId",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PatchCanvasEdgeBody"
}
}
}
},
"responses": {
"200": {
"description": "Canvas edge patched",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasEdgePatchResponse"
},
"example": {
"data": {
"id": "280ceab9-4673-4c78-b37c-3617feb51914",
"name": "Main canvas",
"edge": {
"id": "idle-to-interact",
"source": "idle",
"target": "interact",
"duration": 4,
"speed": 3
},
"graph": {
"nodes": [],
"edges": [],
"inputs": [],
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
}
},
"updated_at": "2026-05-04T12:00:00.000Z"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "updateCanvasEdge",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/edges/{edgeId}/generateGenerate a single canvas edge
Dispatches generation for one specific canvas edge by ID. Costs the same as a single edge in generate-all: duration * 2 for animation_model=standard or duration * 6 for premium. Without animation_model, legacy duration * 5 pricing is retained. If the edge already has a video asset, archives the old assets and re-dispatches. Any State edges (source: "*") and reverse edges are rejected with 400. Requires the source and target nodes to already have generated images. Loops use the source pose receipt, even on a mixed-variant canvas. Transitions retain both endpoint contexts. For uploads without receipts, the canvas context selects matching references; ambiguous shared uploads return 409 before charging.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
edgeIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonanimation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
Responses
202 Edge generation started
application/json
dataobject · requiredNested fields
job_idstring · uuid · requirededge_idstring · requiredtypestring · requiredValues: "loop", "transition"
sourcestring · requiredtargetstring · requiredcostnumber · requiredurlsobjectpoll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Generate a single canvas edge",
"description": "Dispatches generation for one specific canvas edge by ID. Costs the same as a single edge in generate-all: duration * 2 for animation_model=standard or duration * 6 for premium. Without animation_model, legacy duration * 5 pricing is retained. If the edge already has a video asset, archives the old assets and re-dispatches. Any State edges (source: \"*\") and reverse edges are rejected with 400. Requires the source and target nodes to already have generated images. Loops use the source pose receipt, even on a mixed-variant canvas. Transitions retain both endpoint contexts. For uploads without receipts, the canvas context selects matching references; ambiguous shared uploads return 409 before charging.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "edgeId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateEdgeBody"
}
}
}
},
"responses": {
"202": {
"description": "Edge generation started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasEdgeGenerateResponse"
},
"example": {
"data": {
"job_id": "a1b2c3d4-0000-0000-0000-000000000001",
"edge_id": "idle-to-interact",
"type": "transition",
"source": "Idle",
"target": "Interact",
"cost": 20,
"urls": {},
"poll_url": "/v1/jobs/a1b2c3d4-0000-0000-0000-000000000001?api_version=2026-09-26"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "generateCanvasEdge",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/edges/{edgeId}/refine-maskRefine a canvas edge video mask
Convenience wrapper around POST /v1/assets/{id}/refine-mask for a canvas edge. The route resolves the edge videoAssetId, refines that video asset mask, and re-exports the active derived formats/sizes. The canvas graph keeps the same raw video asset; desktop playback updates because the active linked WebM/HEVC/stacked variants are replaced underneath it. Any State and reverse edges are rejected because they do not own an independent video asset.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
edgeIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonopstringMask operation. add unions the prompted subject into the active mask; subtract removes it from the active mask.
Values: "add", "subtract"
Default: "add"
promptstring · requiredText prompt for the mask region to refine, e.g. "the soccer ball".
Length: 1 to unbounded characters
modelstringBackground mask refinement quality. Defaults to pro.
Values: "original", "pro"
Default: "pro"
edge_cleanupobjectOptional edge cleanup pass applied to the refined mask.
Default: {"enabled":true,"size":512}
Nested fields
enabledbooleanDefault: true
sizeintegerDefault: 512
Range: 128 to 1024
formatsarrayDerived formats to regenerate. Omit to infer the active formats already linked to the video.
Items: 1 to unbounded
Nested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarraySize variants to regenerate. Omit to infer active linked sizes, so all currently used variants are refreshed.
Nested fields
integer
archive_oldbooleanArchive and unlink old matching derived assets after replacement assets are successfully published.
Default: true
dry_runbooleanReturn the exact refinement/export plan without starting the workflow.
Default: true
Responses
200 Canvas edge mask refinement dry-run plan returned
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
mascot_idstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstring202 Canvas edge mask refinement job started
application/json
dataobject · requiredNested fields
targetstring · requiredValues: "video_mask_refinement"
dry_runboolean · requiredvideo_asset_idstring · uuid · requiredbg_job_idstring · requiredpromptstring · requiredopstring · requiredValues: "add", "subtract"
modelstring · requiredValues: "original", "pro"
edge_cleanupobjectNested fields
enabledboolean · requiredsizenumber · requiredformatsarray · requiredNested fields
string · webm, hevc, stacked_video, lottie, dotlottie
sizesarray · requiredNested fields
number
export_countnumber · requiredarchive_oldboolean · requiredactive_variantsarray · requiredNested fields
idstring · uuid · requiredtypestring · requiredsizenumberbgJobIdstringcanvasobjectNested fields
mascot_idstring · uuidcanvasIdstring · uuidedgeIdstringin_flightobjectNested fields
job_idstring · uuid · requiredpoll_urlstring · requiredjob_idstring · uuidpoll_urlstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Refine a canvas edge video mask",
"description": "Convenience wrapper around `POST /v1/assets/{id}/refine-mask` for a canvas edge. The route resolves the edge `videoAssetId`, refines that video asset mask, and re-exports the active derived formats/sizes. The canvas graph keeps the same raw video asset; desktop playback updates because the active linked WebM/HEVC/stacked variants are replaced underneath it. Any State and reverse edges are rejected because they do not own an independent video asset.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string"
},
"required": true,
"name": "edgeId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RefineCanvasEdgeMaskBody"
}
}
}
},
"responses": {
"200": {
"description": "Canvas edge mask refinement dry-run plan returned",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioAssetMaskRefinementResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"202": {
"description": "Canvas edge mask refinement job started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioAssetMaskRefinementResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "refineMaskCanvasEdge",
"x-masko-api-version": "2026-09-26"
}POST/v1/canvases/{canvasId}/generate-allGenerate canvas images, stickers, and animations
Kicks off generation for pending canvas node images, sticker derivatives, and/or edge animations. Pass animation_model=standard (2 credits/sec, 5–15s) or premium (6 credits/sec, 4–30s); both default to 5s. Omit the field for legacy generation (5 credits/sec, 4–10s, default 4s). Model choice is included in plan approval and idempotent replay checks. Requires a write key in the mascot workspace and project access, including for dry runs. Cross-workspace mascots return 404. Use dry_run=true first to preview planned work, prompts, skipped items, and estimated credits without creating jobs/assets or spending credits. Dry-run returns plan_id and graph_content_hash; send them as approved_plan_id and expected_graph_hash on execution so a changed graph, prompt, option, or selection returns 409 before spending. Use targets="images" to generate poses, targets="stickers" to backfill transparent sticker derivatives for completed node images, targets="animations" for edge videos, or include_stickers=true to create stickers alongside newly generated images.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonanimation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
max_creditsnumberHard server-side credit ceiling. Execution fails before billing when the current work exceeds this limit.
Range: 0 to unbounded
skip_completedbooleanDeprecated compatibility flag. Canvas generate-all only dispatches missing work and always skips edges that already have assigned generated assets.
Default: true
include_stickersbooleanWhen true, generate sticker_image derivatives for generated image nodes.
Default: false
dry_runbooleanWhen true, only returns the planned work, prompts, skipped items, and estimated credit cost. Does not deduct credits, create jobs/assets/items, mutate the canvas graph, or start workflows.
Default: false
targetsstringWhich work to dispatch. "images" only generates skeleton node images. "stickers" backfills sticker_image derivatives for completed node images. "animations" only dispatches edge videos. "all" does both images and animations.
Values: "all", "images", "stickers", "animations"
Default: "all"
node_idsarrayOptional exact node selection. When present, only these nodes are considered for image or sticker work. Omit to consider every node.
Items: 1 to 100
Nested fields
string
edge_idsarrayOptional exact edge selection. When present, only these edges are considered for animation work. Omit to consider every edge.
Items: 1 to 200
Nested fields
string
expected_graph_hashstringOptional graph revision returned by the dry-run plan. Execution returns 409 if the canvas changed after approval.
Length: 1 to unbounded characters
approved_plan_idstringOptional generation plan identity returned by dry_run. Execution returns 409 unless the current graph, scope, prompts, duration, and generation options still match that approved plan.
Length: 1 to unbounded characters
Responses
200 Generation plan returned or jobs started
application/json
dataobject · requiredNested fields
plan_idstringStable identity of the exact graph, scope, prompts, and generation options. Return it as approved_plan_id when executing an approved dry-run plan.
graph_content_hashstringCanvas revision used by this plan. Return it as expected_graph_hash when executing an approved dry-run plan.
dry_runbooleancan_dispatchbooleantargetsstringValues: "all", "images", "stickers", "animations"
durationnumberinclude_stickersbooleanskip_completedbooleanselectionobjectNested fields
node_idsarray · nullable · requiredNested fields
string
edge_idsarray · nullable · requiredNested fields
string
jobsarray · requiredNested fields
job_idstring · uuid · requirededge_idstringnode_idstringtypestring · requiredValues: "image", "edit", "sticker", "loop", "transition"
sourcestringtargetstringitem_namestringcostnumber · requiredurlsobjectpoll_urlstringFollow this link to poll the job. On /v1/canvases routes it selects the mascot contract, so the job reports mascot_id.
generatedarray · requiredNested fields
object
planned_jobsarrayNested fields
object
planned_job_countnumberplanned_nodesarrayNested fields
object
planned_edgesarrayNested fields
object
planned_stickersarrayNested fields
object
skippednumber · requiredskipped_itemsarray · requiredNested fields
kindstring · requiredValues: "node", "edge"
idstring · requiredreasonstring · requiredasset_idstring · nullableasset_statusstringreverse_freearray · requiredNested fields
kindstring · requiredValues: "edge"
idstring · requiredreasonstring · requiredValues: "reverse_edge_free"
reverse_of_edge_idstring · nullable · requiredalready_completearray · requiredNested fields
kindstring · requiredValues: "node", "edge"
idstring · requiredasset_idstring · requiredestimated_costnumber · requiredactual_costnumber · requiredwould_charge_creditsnumberrefunded_creditsnumbertotal_jobsnumber · requiredtotal_costnumber · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Generate canvas images, stickers, and animations",
"description": "Kicks off generation for pending canvas node images, sticker derivatives, and/or edge animations. Pass animation_model=standard (2 credits/sec, 5–15s) or premium (6 credits/sec, 4–30s); both default to 5s. Omit the field for legacy generation (5 credits/sec, 4–10s, default 4s). Model choice is included in plan approval and idempotent replay checks. Requires a write key in the mascot workspace and project access, including for dry runs. Cross-workspace mascots return 404. Use `dry_run=true` first to preview planned work, prompts, skipped items, and estimated credits without creating jobs/assets or spending credits. Dry-run returns `plan_id` and `graph_content_hash`; send them as `approved_plan_id` and `expected_graph_hash` on execution so a changed graph, prompt, option, or selection returns 409 before spending. Use `targets=\"images\"` to generate poses, `targets=\"stickers\"` to backfill transparent sticker derivatives for completed node images, `targets=\"animations\"` for edge videos, or `include_stickers=true` to create stickers alongside newly generated images.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateAllBody"
}
}
}
},
"responses": {
"200": {
"description": "Generation plan returned or jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CanvasGenerateAllResponse"
},
"example": {
"data": {
"jobs": [
{
"job_id": "58341ab3-80fc-4fca-8a86-f9d2caee9a14",
"edge_id": "095872b7-c6f6-4f6d-8679-9739436fd16c",
"type": "transition",
"source": "Idle",
"target": "Waving",
"cost": 20,
"urls": {
"webm": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/idle---waving-a622eb51.webm",
"video": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/idle---waving-7e5fe2ec.mp4",
"hevc": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/idle---waving-2880976b.mov"
}
}
],
"total_jobs": 3,
"total_cost": 60,
"dry_run": false,
"generated": [],
"skipped": 0,
"skipped_items": [],
"reverse_free": [
{
"kind": "edge",
"id": "waving-to-idle",
"reason": "reverse_edge_free",
"reverse_of_edge_id": "idle-to-waving"
}
],
"already_complete": [],
"estimated_cost": 60,
"would_charge_credits": 60,
"actual_cost": 60
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "generateAllCanvas",
"x-masko-api-version": "2026-09-26"
}GET/v1/canvases/{canvasId}/exportExport a canvas
Exports the canvas as legacy MaskoAnimationConfig JSON by default, or as a target-specific delivery envelope with delivery=1. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
canvasIdpath · requiredstring
formatquerystring · json
deliveryqueryReturn the delivery envelope instead of legacy MaskoAnimationConfig data.
string · 1
targetqueryDelivery media target. macos returns HEVC URLs, windows returns WebM URLs, web returns WebM and HEVC URLs, full returns all selected formats.
string · macos, windows, web, full
modequeryDelivery mode. selected returns one variant; manifest includes known variants.
string · selected, manifest
sizequerySelected delivery size in pixels, if that size variant has already been generated.
integer
Responses
200 Canvas export data
application/json
dataobject · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Canvases"
],
"summary": "Export a canvas",
"description": "Exports the canvas as legacy MaskoAnimationConfig JSON by default, or as a target-specific delivery envelope with delivery=1. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "canvasId",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"json"
]
},
"required": false,
"name": "format",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"1"
],
"description": "Return the delivery envelope instead of legacy MaskoAnimationConfig data."
},
"required": false,
"description": "Return the delivery envelope instead of legacy MaskoAnimationConfig data.",
"name": "delivery",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"macos",
"windows",
"web",
"full"
],
"description": "Delivery media target. macos returns HEVC URLs, windows returns WebM URLs, web returns WebM and HEVC URLs, full returns all selected formats."
},
"required": false,
"description": "Delivery media target. macos returns HEVC URLs, windows returns WebM URLs, web returns WebM and HEVC URLs, full returns all selected formats.",
"name": "target",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"selected",
"manifest"
],
"description": "Delivery mode. selected returns one variant; manifest includes known variants."
},
"required": false,
"description": "Delivery mode. selected returns one variant; manifest includes known variants.",
"name": "mode",
"in": "query"
},
{
"schema": {
"type": "integer",
"minimum": 0,
"exclusiveMinimum": true,
"description": "Selected delivery size in pixels, if that size variant has already been generated."
},
"required": false,
"description": "Selected delivery size in pixels, if that size variant has already been generated.",
"name": "size",
"in": "query"
}
],
"responses": {
"200": {
"description": "Canvas export data",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ExportConfigResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "getCanvasExport",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/variantsList named mascot variants
Lists the mascot’s named generation contexts. Variant authoring follows mascot project permissions, including authorized teammates; API keys must match the mascot workspace. Create and approve variants through the API or web app, then pass the id as variant_id to /generate. Selecting a generation variant does not change active playback. A null approved_at means the variant is still a draft.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
Responses
200 Variants in creation order
application/json
dataarray · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · requiredmetaobject · requiredNested fields
paginationobject · requiredNested fields
totalnumber · requiredlimitnumber · requiredoffsetnumber · requiredhas_moreboolean · required401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot not found in this workspace
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "List named mascot variants",
"description": "Lists the mascot’s named generation contexts. Variant authoring follows mascot project permissions, including authorized teammates; API keys must match the mascot workspace. Create and approve variants through the API or web app, then pass the id as variant_id to /generate. Selecting a generation variant does not change active playback. A null approved_at means the variant is still a draft.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
}
],
"responses": {
"200": {
"description": "Variants in creation order",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MascotVariant"
}
},
"meta": {
"type": "object",
"properties": {
"pagination": {
"type": "object",
"properties": {
"total": {
"type": "number"
},
"limit": {
"type": "number"
},
"offset": {
"type": "number"
},
"has_more": {
"type": "boolean"
}
},
"required": [
"total",
"limit",
"offset",
"has_more"
]
}
},
"required": [
"pagination"
]
}
},
"required": [
"data",
"meta"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot not found in this workspace",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "listMascotVariants",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/variantsCreate a named mascot variant
Creates a draft from Original or source_variant_id. The source context and references are frozen. Supply reference_asset_id to use an existing mascot image or your unassigned /v1/upload image and immediately approve the context, with no generation charge. Otherwise generate and approve a reference next. Reuse id for retries with the same inputs. This does not activate playback.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonidstring · uuid · requiredClient-generated UUID. Reuse it to safely retry creation.
namestring · requiredLength: 1 to 80 characters
descriptionstring · requiredThe desired change and generation guidance.
Length: 1 to 3000 characters
source_variant_idstring · uuidApproved variant to start from. Omit for Original. Its references and context are frozen on creation.
reference_asset_idstring · uuidCompleted image in this mascot, or your unassigned POST /v1/upload image. Creates an approved context immediately; no generation charge. Omit to create a draft for reference generation.
Responses
201 Created variant
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Create a named mascot variant",
"description": "Creates a draft from Original or source_variant_id. The source context and references are frozen. Supply reference_asset_id to use an existing mascot image or your unassigned /v1/upload image and immediately approve the context, with no generation charge. Otherwise generate and approve a reference next. Reuse id for retries with the same inputs. This does not activate playback.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioCreateMascotVariantBody"
}
}
}
},
"responses": {
"201": {
"description": "Created variant",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/MascotVariant"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "createMascotVariant",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/variants/{variantId}Read a variant and its reference candidates
Returns one variant with its reference candidates and approval state.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Responses
200 Variant and candidate previews
application/json
dataobject · requiredNested fields
variantobject · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · requiredcandidatesarray · requiredNested fields
idstring · uuid · requiredasset_idstring · uuid · nullable · requiredjob_idstring · uuid · nullable · requiredcreated_atstring · requiredstatusstring · requirederrorstring · nullableurlstring · nullable · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Read a variant and its reference candidates",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Variant and candidate previews",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/MascotVariantDetail"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "getMascotVariant",
"description": "Returns one variant with its reference candidates and approval state.",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/variants/{variantId}/referenceGenerate a draft variant reference
Costs 1 credit. Uses the frozen source references and the requested variant description. Reuse operation_id to retry the same job. Poll the job, inspect candidates with GET variant, then approve the selected candidate.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsonoperation_idstring · uuid · requiredClient-generated UUID. Reuse to retry the same candidate job without another charge.
Responses
202 Reference generation queued
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredcandidate_idstring · uuid · requiredvariant_idstring · uuid · requiredestimated_costnumber · requiredpoll_urlstring · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Not enough credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Generate a draft variant reference",
"description": "Costs 1 credit. Uses the frozen source references and the requested variant description. Reuse operation_id to retry the same job. Poll the job, inspect candidates with GET variant, then approve the selected candidate.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateVariantReferenceBody"
}
}
}
},
"responses": {
"202": {
"description": "Reference generation queued",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"job_id": {
"type": "string",
"format": "uuid"
},
"candidate_id": {
"type": "string",
"format": "uuid"
},
"variant_id": {
"type": "string",
"format": "uuid"
},
"estimated_cost": {
"type": "number"
},
"poll_url": {
"type": "string"
}
},
"required": [
"job_id",
"candidate_id",
"variant_id",
"estimated_cost",
"poll_url"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"402": {
"description": "Not enough credits",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "createMascotVariantReference",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/variants/{variantId}/approveApprove a generated variant reference
Select a completed candidate belonging to this variant. Creates its canvas and makes variant_id usable for generation. Does not generate poses or change active playback. Repeating approval of the same candidate is safe.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body
application/jsoncandidate_idstring · uuid · requiredCompleted candidate from this variant to use as its reference.
Responses
200 Approved variant
application/json
dataobject · requiredNested fields
idstring · uuid · requirednamestring · requireddescriptionstring · requiredapproved_atstring · nullable · requiredcanvas_idstring · uuid · nullable · requiredreference_asset_idstring · uuid · nullable · requiredcreated_atstring · required400 Invalid request or reference
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Variant creator required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or reference not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Draft source, changed operation inputs, or candidate not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Approve a generated variant reference",
"description": "Select a completed candidate belonging to this variant. Creates its canvas and makes variant_id usable for generation. Does not generate poses or change active playback. Repeating approval of the same candidate is safe.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApproveMascotVariantBody"
}
}
}
},
"responses": {
"200": {
"description": "Approved variant",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/MascotVariant"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request or reference",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Variant creator required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or reference not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "Draft source, changed operation inputs, or candidate not ready",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "approveMascotVariant",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/interactiveGenerate a follow-cursor interaction
Creates nine 1024×1024 transparent gaze directions from one completed image. Requires a completed transparent source or transparent derivative in the same mascot. Preserves the source variant automatically; no variant_id or name override. Costs 9 credits. Returns an asynchronous job receipt. Send once and poll the returned job URL; repeating POST creates and charges a new set. Hosted mascots automatically publish a JSON manifest and nine lossless WebPs. Retrieve them with GET /v1/mascots/{id}/cdn-export after completion. This interaction is independent of Canvas state machines.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsonsource_asset_idstring · uuid · requiredkindstring · requiredValues: "cursor-follower"
Responses
202 Nine-direction generation queued
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredasset_idstring · uuid · requiredasset_idsobject · requiredNested fields
interactivestring · uuid · requiredstatusstring · requiredValues: "pending"
estimated_costnumber · requiredvariant_idstring · uuid · nullable · requiredpoll_urlstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write access required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot or completed source not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
422 Transparent image required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Could not queue generation
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Generate a follow-cursor interaction",
"description": "Creates nine 1024×1024 transparent gaze directions from one completed image. Requires a completed transparent source or transparent derivative in the same mascot. Preserves the source variant automatically; no variant_id or name override. Costs 9 credits. Returns an asynchronous job receipt. Send once and poll the returned job URL; repeating POST creates and charges a new set. Hosted mascots automatically publish a JSON manifest and nine lossless WebPs. Retrieve them with GET /v1/mascots/{id}/cdn-export after completion. This interaction is independent of Canvas state machines.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateInteractionBody"
}
}
}
},
"responses": {
"202": {
"description": "Nine-direction generation queued",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/InteractionGenerationResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Write access required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Mascot or completed source not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"422": {
"description": "Transparent image required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"429": {
"description": "Rate limited",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"500": {
"description": "Could not queue generation",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "createMascotInteractive",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/logos/suggestionsSuggest logo directions and styles
Five directions, including face portrait and full body, plus three suggested styles. Each direction can include a style. A style can be custom; preset_id is present only when it exactly matches a built-in preset. Returns defaults if generation is unavailable, unless refresh=true, which returns 503. No image credits; does not change the mascot.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variant_idquerystring
refreshquerystring · true, false
Responses
200 Logo ideas
application/json
dataobject · requiredNested fields
prompt_versionnumber · requiredcachedboolean · requireddescriptionsarray · requiredNested fields
namestring · requireddescriptionstring · requiredstyleobject · nullableNested fields
namestring · requiredinstructionstring · requiredpreset_idstringValues: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
stylesarray · requiredNested fields
namestring · requiredinstructionstring · requiredpreset_idstringValues: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Write access required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Source or mascot not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Request ID conflict or variant not approved
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Rate limited
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
500 Internal error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 Generation unavailable
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Suggestions"
],
"summary": "Suggest logo directions and styles",
"description": "Five directions, including face portrait and full body, plus three suggested styles. Each direction can include a style. A style can be custom; preset_id is present only when it exactly matches a built-in preset. Returns defaults if generation is unavailable, unless refresh=true, which returns 503. No image credits; does not change the mascot.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": false,
"name": "variant_id",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
]
},
"required": false,
"name": "refresh",
"in": "query"
}
],
"responses": {
"200": {
"description": "Logo ideas",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"prompt_version": {
"type": "number"
},
"cached": {
"type": "boolean"
},
"descriptions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"style": {
"type": "object",
"nullable": true,
"properties": {
"name": {
"type": "string"
},
"instruction": {
"type": "string"
},
"preset_id": {
"type": "string",
"enum": [
"graphic-app-icon",
"cut-paper",
"soft-depth",
"geometric",
"abstract-symbol",
"monoline-symbol",
"negative-space",
"retro-emblem",
"hand-drawn"
]
}
},
"required": [
"name",
"instruction"
]
}
},
"required": [
"name",
"description"
]
}
},
"styles": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"instruction": {
"type": "string"
},
"preset_id": {
"type": "string",
"enum": [
"graphic-app-icon",
"cut-paper",
"soft-depth",
"geometric",
"abstract-symbol",
"monoline-symbol",
"negative-space",
"retro-emblem",
"hand-drawn"
]
}
},
"required": [
"name",
"instruction"
]
}
}
},
"required": [
"prompt_version",
"cached",
"descriptions",
"styles"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Write access required",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Source or mascot not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Request ID conflict or variant not approved",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"429": {
"description": "Rate limited",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"500": {
"description": "Internal error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"503": {
"description": "Generation unavailable",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "listMascotLogoSuggestions",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/voiceGet the voice
Returns the voice the mascot speaks with in talking animations, or null. A marketplace copy speaks with its creator's voice (source creator). sample_url is a short recording.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 The voice, or null
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Get the voice",
"description": "Returns the voice the mascot speaks with in talking animations, or null. A marketplace copy speaks with its creator's voice (source creator). sample_url is a short recording.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "The voice, or null",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "getMascotVoice",
"x-masko-api-version": "2026-09-26"
}PUT/v1/mascots/{id}/voiceKeep a voice
Keeps one sample from POST /v1/mascots/{id}/voice/samples as the voice of the mascot. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Request body (required)
application/jsonsample_idstring · uuid · requiredA sample from POST .../voice/samples.
namestringDefaults to "<name>'s voice".
Length: 1 to 80 characters
Responses
200 The kept voice
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Keep a voice",
"description": "Keeps one sample from POST /v1/mascots/{id}/voice/samples as the voice of the mascot. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/KeepVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The kept voice",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "updateMascotVoice",
"x-masko-api-version": "2026-09-26"
}DELETE/v1/mascots/{id}/voiceRemove the voice
Removes the mascot's voice. Talking animations already made keep their sound; new ones need a voice.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
204 Removed
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Remove the voice",
"description": "Removes the mascot's voice. Talking animations already made keep their sound; new ones need a voice.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"204": {
"description": "Removed",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "deleteMascotVoice",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/voice/suggestionsSuggest voices
Returns voice ideas written for the mascot from its references and description. Each description is ready for POST /v1/mascots/{id}/voice/samples. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
refreshqueryReturn other ideas than a plain request would.
string · true, false
avoidqueryComma-separated idea titles not to suggest again.
string
Responses
200 Voice ideas
application/json
dataobject · requiredNested fields
ideasarray · requiredNested fields
titlestring · requiredA few words, such as "Cozy and warm".
descriptionstring · requiredThe full description, ready for POST .../voice/samples.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Suggest voices",
"description": "Returns voice ideas written for the mascot from its references and description. Each description is ready for POST /v1/mascots/{id}/voice/samples. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Return other ideas than a plain request would."
},
"required": false,
"description": "Return other ideas than a plain request would.",
"name": "refresh",
"in": "query"
},
{
"schema": {
"type": "string",
"maxLength": 500,
"description": "Comma-separated idea titles not to suggest again."
},
"required": false,
"description": "Comma-separated idea titles not to suggest again.",
"name": "avoid",
"in": "query"
}
],
"responses": {
"200": {
"description": "Voice ideas",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"ideas": {
"type": "array",
"items": {
"$ref": "#/components/schemas/VoiceIdea"
}
}
},
"required": [
"ideas"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "listMascotVoiceSuggestions",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/voice/adjustAdjust a voice description
Rewrites a voice description in one direction, such as "Older" or "Slower", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredThe current voice description.
Length: 1 to 1000 characters
directionstringA direction such as "Older" or "A little grumpy". Omit it to only get directions for this description.
Length: 0 to 80 characters
Responses
200 The rewritten description
application/json
dataobject · requiredNested fields
descriptionstring · requiredThe rewritten description.
changesarray · requiredEach replaced or added passage. from is empty for added text.
Nested fields
fromstring · requiredtostring · requireddirectionsarray · requiredDirections that fit the new description.
Nested fields
string
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Adjust a voice description",
"description": "Rewrites a voice description in one direction, such as \"Older\" or \"Slower\", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdjustVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The rewritten description",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceAdjustment"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "adjustMascotVoice",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/voice/samplesHear voice samples
Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/mascots/{id}/voice within 24 hours.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredHow the voice sounds: age, pitch, pace, energy, texture, mood and accent.
Length: 20 to 1000 characters
sample_linestringThe line the samples read. Lines shorter than 100 characters are extended. Omit it for a line in the mascot's name.
Length: 0 to 500 characters
Responses
201 Three samples
application/json
dataobject · requiredNested fields
samplesarray · requiredNested fields
idstring · uuid · requiredPass it to PUT .../voice to keep this voice.
urlstring · uri · requireddurationnumber · nullable · requiredsample_linestring · requiredcost_creditsnumber · requiredexpires_atstring · requiredSamples not kept by then can no longer be kept.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Not enough credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Hear voice samples",
"description": "Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/mascots/{id}/voice within 24 hours.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VoiceSamplesBody"
}
}
}
},
"responses": {
"201": {
"description": "Three samples",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceSamples"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"402": {
"description": "Not enough credits",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "createMascotVoiceSample",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/variants/{variantId}/voiceGet the voice of a variant
Returns the voice this variant speaks with: its own (source variant), the Original's until it gets one (source original), or null. sample_url is a short recording.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Responses
200 The voice, or null
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Get the voice of a variant",
"description": "Returns the voice this variant speaks with: its own (source variant), the Original's until it gets one (source original), or null. sample_url is a short recording.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"responses": {
"200": {
"description": "The voice, or null",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "getMascotVariantVoice",
"x-masko-api-version": "2026-09-26"
}PUT/v1/mascots/{id}/variants/{variantId}/voiceKeep a voice of a variant
Keeps one sample from POST /v1/mascots/{id}/variants/{variantId}/voice/samples as the voice of an approved variant. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Request body (required)
application/jsonsample_idstring · uuid · requiredA sample from POST .../voice/samples.
namestringDefaults to "<name>'s voice".
Length: 1 to 80 characters
Responses
200 The kept voice
application/json
dataobject · nullable · requiredNested fields
objectstring · requiredValues: "voice"
namestring · requireddescriptionstring · requiredThe words the voice was designed from.
sample_urlstring · uri · nullable · requiredA short recording of the voice. Signed; fetch the voice again for a fresh link.
sourcestring · requiredWhose voice this is: the mascot's own (original), the variant's own (variant), or the marketplace creator's (creator).
Values: "original", "variant", "creator"
created_atstring · required400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Keep a voice of a variant",
"description": "Keeps one sample from POST /v1/mascots/{id}/variants/{variantId}/voice/samples as the voice of an approved variant. It replaces the voice it had. Samples can be kept for 24 hours. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/KeepVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The kept voice",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/Voice"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "updateMascotVariantVoice",
"x-masko-api-version": "2026-09-26"
}DELETE/v1/mascots/{id}/variants/{variantId}/voiceRemove the voice of a variant
Removes the variant's own voice; it speaks with the Original's voice again.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Responses
204 Removed
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Remove the voice of a variant",
"description": "Removes the variant's own voice; it speaks with the Original's voice again.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
}
],
"responses": {
"204": {
"description": "Removed",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "deleteMascotVariantVoice",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/variants/{variantId}/voice/suggestionsSuggest voices of a variant
Returns voice ideas written for an approved variant from its references and description. Each description is ready for POST /v1/mascots/{id}/variants/{variantId}/voice/samples. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
refreshqueryReturn other ideas than a plain request would.
string · true, false
avoidqueryComma-separated idea titles not to suggest again.
string
Responses
200 Voice ideas
application/json
dataobject · requiredNested fields
ideasarray · requiredNested fields
titlestring · requiredA few words, such as "Cozy and warm".
descriptionstring · requiredThe full description, ready for POST .../voice/samples.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Suggest voices of a variant",
"description": "Returns voice ideas written for an approved variant from its references and description. Each description is ready for POST /v1/mascots/{id}/variants/{variantId}/voice/samples. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Return other ideas than a plain request would."
},
"required": false,
"description": "Return other ideas than a plain request would.",
"name": "refresh",
"in": "query"
},
{
"schema": {
"type": "string",
"maxLength": 500,
"description": "Comma-separated idea titles not to suggest again."
},
"required": false,
"description": "Comma-separated idea titles not to suggest again.",
"name": "avoid",
"in": "query"
}
],
"responses": {
"200": {
"description": "Voice ideas",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"ideas": {
"type": "array",
"items": {
"$ref": "#/components/schemas/VoiceIdea"
}
}
},
"required": [
"ideas"
]
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "listMascotVariantVoiceSuggestions",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/variants/{variantId}/voice/adjustAdjust a voice description of a variant
Rewrites a voice description in one direction, such as "Older" or "Slower", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredThe current voice description.
Length: 1 to 1000 characters
directionstringA direction such as "Older" or "A little grumpy". Omit it to only get directions for this description.
Length: 0 to 80 characters
Responses
200 The rewritten description
application/json
dataobject · requiredNested fields
descriptionstring · requiredThe rewritten description.
changesarray · requiredEach replaced or added passage. from is empty for added text.
Nested fields
fromstring · requiredtostring · requireddirectionsarray · requiredDirections that fit the new description.
Nested fields
string
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Adjust a voice description of a variant",
"description": "Rewrites a voice description in one direction, such as \"Older\" or \"Slower\", and returns what changed plus directions that fit the new text. Without direction, returns only directions. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdjustVoiceBody"
}
}
}
},
"responses": {
"200": {
"description": "The rewritten description",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceAdjustment"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "adjustMascotVariantVoice",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/variants/{variantId}/voice/samplesHear voice samples of a variant
Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/mascots/{id}/variants/{variantId}/voice within 24 hours.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variantIdpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
application/jsondescriptionstring · requiredHow the voice sounds: age, pitch, pace, energy, texture, mood and accent.
Length: 20 to 1000 characters
sample_linestringThe line the samples read. Lines shorter than 100 characters are extended. Omit it for a line in the mascot's name.
Length: 0 to 500 characters
Responses
201 Three samples
application/json
dataobject · requiredNested fields
samplesarray · requiredNested fields
idstring · uuid · requiredPass it to PUT .../voice to keep this voice.
urlstring · uri · requireddurationnumber · nullable · requiredsample_linestring · requiredcost_creditsnumber · requiredexpires_atstring · requiredSamples not kept by then can no longer be kept.
400 Invalid request
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Authentication required
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Not enough credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Mascot, variant or sample not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 The variant is not approved yet, or the sample expired
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
429 Too many voice requests; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
502 Masko could not write the ideas or the adjustment; retry
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
503 The voice service is unavailable; retry later
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Voice"
],
"summary": "Hear voice samples of a variant",
"description": "Designs three voices from a description, each reading the same line. Costs 1 credit for the three. Keep one with PUT /v1/mascots/{id}/variants/{variantId}/voice within 24 hours.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "variantId",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/VoiceSamplesBody"
}
}
}
},
"responses": {
"201": {
"description": "Three samples",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/VoiceSamples"
}
},
"required": [
"data"
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Invalid request",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"401": {
"description": "Authentication required",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"402": {
"description": "Not enough credits",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"403": {
"description": "Adding a voice unlocks once the account has spent $50 on Masko (details.reason voice_locked, with paid_cents and required_cents), or the voice belongs to the Marketplace creator",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"404": {
"description": "Mascot, variant or sample not found",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"409": {
"description": "The variant is not approved yet, or the sample expired",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"429": {
"description": "Too many voice requests; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"502": {
"description": "Masko could not write the ideas or the adjustment; retry",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
},
"503": {
"description": "The voice service is unavailable; retry later",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
},
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
}
}
},
"operationId": "createMascotVariantVoiceSample",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascotsList mascots
Returns all mascots owned by the authenticated user, paginated. A mascot is a single mascot character with its own style, references, and items. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
project_idqueryFilter to this project.
string
typequeryFilter by type, e.g. "mascot".
string
Responses
200 List of mascots
application/json
dataarray · requiredNested fields
objectstringResource type. Always "mascot".
Values: "mascot"
idstring · uuid · requirednamestring · requiredtypestring · requiredproject_idstring · uuidconfigobjectNested fields
promptstring · requiredreference_asset_idsarray · requiredNested fields
string
style_cardobject · nullable · requiredcaution_listarray · requiredNested fields
string
is_publishedbooleanslugstring · nullableuser_prefixstring · nullablecdn_statusarrayNested fields
asset_idstring · uuid · requireditem_namestring · nullable · requiredtypestring · requiredcdn_urlstring · uri · requiredstatusstring · requiredfile_sizenumber · nullable · requiredcreated_atstring · requiredupdated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "List mascots",
"description": "Returns all mascots owned by the authenticated user, paginated. A mascot is a single mascot character with its own style, references, and items. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Filter to this project."
},
"required": false,
"description": "Filter to this project.",
"name": "project_id",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Filter by type, e.g. \"mascot\"."
},
"required": false,
"description": "Filter by type, e.g. \"mascot\".",
"name": "type",
"in": "query"
}
],
"responses": {
"200": {
"description": "List of mascots",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CollectionListResponse"
},
"example": {
"data": [
{
"id": "f9503022-a991-46ea-bf8c-d628c921b6b0",
"name": "v1-api-test-cat-1776591403",
"type": "mascot",
"project_id": "04dae799-dd9a-4296-ba86-9e3913c2f8d1",
"project_name": "test",
"is_published": true,
"public_slug": "v1-api-test-cat-1776591403-rmau1uyd",
"user_prefix": "fda8417d",
"created_at": "2026-04-19T09:36:43.46139+00:00"
}
],
"meta": {
"pagination": {
"total": 6,
"limit": 5,
"offset": 0,
"has_more": true
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "listMascots",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascotsCreate a mascot
This is the primary way to create a mascot. In the API the resource is called mascot - today one mascot holds one mascot so the terms are interchangeable. Recommended input is reference images (reference_image_urls or reference_asset_ids from POST /v1/upload) - one or more images of the character. The references ARE the mascot; you do not need to describe it in prompt. Use context to add things the image cannot express: personality, consistency rules ("always wears red sneakers"), forbidden variants ("never without the hat"), brand tone. The mascot is assigned to a project and gets a public CDN slug. Creation with existing references or name/context only is free. Providing prompt without references generates one reference for 1 credit. Failed generation, storage or persistence triggers a refund, with background retries if immediate repayment fails. Use Idempotency-Key to replay a request without generating or charging again. Future /generate calls use the style automatically extracted from the references.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonproject_idstring · uuid · requiredProject to create the mascot in. List projects via GET /v1/projects.
namestringDisplay name. Defaults to a generated name if omitted.
promptstringOptional - do not set this if your references already show the mascot clearly. The reference images ARE the character. Only use prompt when you cannot provide references (pure text-to-mascot). When references are present, a prompt is auto-extracted from them. Without references, prompt generates one reference for 1 credit; a failed creation is refunded.
contextstringExtra hints the image alone cannot convey: personality and behavior ("curious, cautious, never aggressive"), consistency rules ("always has a small white star on left ear"), forbidden variants ("never show without the hat"), brand tone. Not a character description - the references cover that.
typestringMascot type. Defaults to "mascot".
Default: "mascot"
stylestringStyle ID or name. List styles via GET /v1/styles.
reference_image_urlsarrayRecommended entry point. Public image URLs of the mascot - at least one, up to 6. Each public HTTP(S) URL is downloaded with a 10 MB limit and a 15-second deadline; private addresses and unsafe redirects are rejected. PNG, JPEG, WebP, GIF and SVG are supported; SVG is converted to PNG. Each is stored as an asset. The first reference acts as the canonical look; additional ones widen angle/pose coverage. If you also pass reference_asset_ids, totals combine up to 6.
Nested fields
string
reference_asset_idsarrayExisting asset IDs (from POST /v1/upload or another mascot) to link as references. Assets are not duplicated. Use this when you already uploaded the image via /v1/upload. Max 6 references combined with reference_image_urls.
Nested fields
string
settingsobjectMascot settings. cdn_enabled: whether new assets auto-publish to the CDN. animation_sizes: pixel sizes to auto-generate variants for, e.g. [480, 360]. Recommended values: 720, 480, 360, 240. Full supported range: 32 to 1920.
Nested fields
cdn_enabledbooleanDefault: true
animation_sizesarrayNested fields
number
Responses
201 Created mascot
application/json
dataobject · requiredNested fields
objectstringResource type. Always "mascot".
Values: "mascot"
idstring · uuid · requirednamestring · requiredtypestring · requiredproject_idstring · uuidconfigobjectNested fields
promptstring · requiredreference_asset_idsarray · requiredNested fields
string
style_cardobject · nullable · requiredcaution_listarray · requiredNested fields
string
is_publishedbooleanslugstring · nullableuser_prefixstring · nullablecdn_statusarrayNested fields
asset_idstring · uuid · requireditem_namestring · nullable · requiredtypestring · requiredcdn_urlstring · uri · requiredstatusstring · requiredfile_sizenumber · nullable · requiredcreated_atstring · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Create a mascot",
"description": "This is the primary way to create a mascot. In the API the resource is called `mascot` - today one mascot holds one mascot so the terms are interchangeable. Recommended input is reference images (`reference_image_urls` or `reference_asset_ids` from POST /v1/upload) - one or more images of the character. The references ARE the mascot; you do not need to describe it in `prompt`. Use `context` to add things the image cannot express: personality, consistency rules (\"always wears red sneakers\"), forbidden variants (\"never without the hat\"), brand tone. The mascot is assigned to a project and gets a public CDN slug. Creation with existing references or name/context only is free. Providing prompt without references generates one reference for 1 credit. Failed generation, storage or persistence triggers a refund, with background retries if immediate repayment fails. Use Idempotency-Key to replay a request without generating or charging again. Future /generate calls use the style automatically extracted from the references.",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioCreateMascotBody"
}
}
}
},
"responses": {
"201": {
"description": "Created mascot",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CollectionResponse"
},
"example": {
"data": {
"id": "f9503022-a991-46ea-bf8c-d628c921b6b0",
"name": "v1-api-test-cat-1776591403",
"slug": "v1-api-test-cat-1776591403-rmau1uyd",
"type": "mascot",
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf"
],
"settings": {
"cdn_enabled": true,
"animation_sizes": []
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "createMascot",
"parameters": [
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}Get mascot details
Returns the full mascot record including config (prompt, reference_asset_ids, style_card, caution_list) and cdn_status. Returns 404 if the mascot does not exist or is not owned by the caller.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 Mascot details with cdn_status
application/json
dataobject · requiredNested fields
objectstringResource type. Always "mascot".
Values: "mascot"
idstring · uuid · requirednamestring · requiredtypestring · requiredproject_idstring · uuidconfigobjectNested fields
promptstring · requiredreference_asset_idsarray · requiredNested fields
string
style_cardobject · nullable · requiredcaution_listarray · requiredNested fields
string
is_publishedbooleanslugstring · nullableuser_prefixstring · nullablecdn_statusarrayNested fields
asset_idstring · uuid · requireditem_namestring · nullable · requiredtypestring · requiredcdn_urlstring · uri · requiredstatusstring · requiredfile_sizenumber · nullable · requiredcreated_atstring · requiredupdated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Get mascot details",
"description": "Returns the full mascot record including config (prompt, reference_asset_ids, style_card, caution_list) and cdn_status. Returns 404 if the mascot does not exist or is not owned by the caller.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Mascot details with cdn_status",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CollectionResponse"
},
"example": {
"data": {
"id": "f9503022-a991-46ea-bf8c-d628c921b6b0",
"name": "v1-api-test-cat-1776591403",
"type": "mascot",
"project_id": "04dae799-dd9a-4296-ba86-9e3913c2f8d1",
"config": {
"prompt": "terracotta clay cat mascot with big eyes and speckled texture",
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf"
],
"style_card": null,
"caution_list": []
},
"is_published": true,
"slug": "v1-api-test-cat-1776591403-rmau1uyd",
"user_prefix": "fda8417d",
"cdn_status": [],
"created_at": "2026-04-19T09:36:43.46139+00:00",
"updated_at": "2026-04-19T09:36:46.966862+00:00"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "getMascot",
"x-masko-api-version": "2026-09-26"
}PATCH/v1/mascots/{id}Update mascot metadata
Updates a mascot name, prompt, or public slug. Returns { updated: true }. Returns 404 if not found or not owned by the caller. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Request body (required)
Request body
application/jsonnamestringNew display name.
contextstringUpdated brand or product context.
slugstringCDN slug for this mascot. Used in the public URL path: https://assets.masko.ai/:user_prefix/:slug/... Globally unique across all mascots. Normalized server-side: lowercased, non-alphanumeric stripped (hyphens kept), trimmed. After normalization must be 2 to 50 characters. Returns 409 if taken.
Length: 2 to 50 characters
configobjectRaw config object merged into existing config. Advanced use only: prefer dedicated endpoints /references and /settings; set slug with PATCH /v1/collections/:id.
Responses
200 Updated mascot
application/json
dataobject · requiredNested fields
updatedboolean · requiredslugstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Update mascot metadata",
"description": "Updates a mascot name, prompt, or public slug. Returns { updated: true }. Returns 404 if not found or not owned by the caller. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioUpdateMascotBody"
}
}
}
},
"responses": {
"200": {
"description": "Updated mascot",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatedFlagResponse"
},
"example": {
"data": {
"updated": true
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "updateMascot",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/itemsList items in a mascot
Returns paginated items in a mascot. An item groups related assets (e.g. "wave" item may have an image, a transparent image, and animation variants). Filter by type to narrow results. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
typequerystring
Responses
200 List of items
application/json
dataarray · requiredNested fields
objectstringResource type. Always "item".
Values: "item"
idstring · uuid · requirednamestring · requiredtypestring · requiredpromptstring · requiredpublic_slugstring · nullable · requiredmetadataobject · nullablecreated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "List items in a mascot",
"description": "Returns paginated items in a mascot. An item groups related assets (e.g. \"wave\" item may have an image, a transparent image, and animation variants). Filter by `type` to narrow results. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string"
},
"required": false,
"name": "type",
"in": "query"
}
],
"responses": {
"200": {
"description": "List of items",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ItemListResponse"
},
"example": {
"data": [],
"meta": {
"pagination": {
"total": 0,
"limit": 5,
"offset": 0,
"has_more": false
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "listMascotItems",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/items/{itemId}Get item details
Returns the item record with all its generated assets (images, animations, logos). Returns 404 if the item does not exist or is not in the given mascot. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
itemIdpath · requiredstring
Responses
200 Item details with assets
application/json
dataobject · requiredNested fields
Item
objectstringResource type. Always "item".
Values: "item"
idstring · uuid · requirednamestring · requiredtypestring · requiredpromptstring · requiredpublic_slugstring · nullable · requiredmetadataobject · nullablecreated_atstring · requiredOption 2
assetsarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "Get item details",
"description": "Returns the item record with all its generated assets (images, animations, logos). Returns 404 if the item does not exist or is not in the given mascot. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "itemId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Item details with assets",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioItemResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "getMascotItem",
"x-masko-api-version": "2026-09-26"
}PATCH/v1/mascots/{id}/items/{itemId}Update item name or prompt
Updates the item name (used to derive the public slug) and/or the prompt. Does not re-generate assets. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
itemIdpath · requiredstring
Request body (required)
Request body
application/jsonnamestringLength: 1 to unbounded characters
promptstringResponses
200 Updated item
application/json
dataobject · requiredNested fields
Item
objectstringResource type. Always "item".
Values: "item"
idstring · uuid · requirednamestring · requiredtypestring · requiredpromptstring · requiredpublic_slugstring · nullable · requiredmetadataobject · nullablecreated_atstring · requiredOption 2
assetsarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "Update item name or prompt",
"description": "Updates the item name (used to derive the public slug) and/or the prompt. Does not re-generate assets. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "itemId",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateItemBody"
}
}
}
},
"responses": {
"200": {
"description": "Updated item",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioItemResponse"
},
"example": {
"data": {
"id": "e8ca0d1b-b445-46f6-862f-26b26ac2c6ff",
"name": "sitting-calmly",
"prompt": "sitting on ground with closed eyes peacefully",
"public_slug": "sitting",
"created_at": "2026-04-19T09:44:26.659167+00:00"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "updateMascotItem",
"x-masko-api-version": "2026-09-26"
}DELETE/v1/mascots/{id}/items/{itemId}Archive an item
Soft-deletes (archives) the item and its assets. Files are retained but filtered from reads. Returns 204 on success. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
itemIdpath · requiredstring
Responses
204 Archived
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Items"
],
"summary": "Archive an item",
"description": "Soft-deletes (archives) the item and its assets. Files are retained but filtered from reads. Returns 204 on success. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "itemId",
"in": "path"
}
],
"responses": {
"204": {
"description": "Archived",
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "deleteMascotItem",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/assetsList assets in a mascot
Returns paginated assets in a mascot (images, videos, transparent variants). Each asset has a signed file_url (1-hour expiry) and a cdn_url when published. Filter by type or item_id. Set include_file_urls=false for faster metadata-only listings. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
limitqueryPage size. 1 to 100. Defaults to 50.
number
offsetqueryNumber of records to skip. Defaults to 0.
number
cursorqueryOpaque next_cursor from the previous page. Use instead of offset.
string
typequerystring
item_idquerystring
include_file_urlsqueryWhether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings.
string · true, false
Responses
200 List of assets
application/json
dataarray · requiredNested fields
objectstringResource type. Always "asset".
Values: "asset"
idstring · uuid · requiredtypestring · requiredValues: "interactive", "interactive_frame", "image", "transparent_image", "sticker_image", "svg", "video", "webm", "hevc", "stacked_video", "scene", "logo", "audio", "transcript"
statusstring · requiredmetadataobject · nullableMedia dimensions, format and public asset context. Internal generation execution details are omitted.
item_idstring · uuid · nullable · requiredmascot_idstring · uuid · nullablefile_urlstring · uri · nullable · requiredcdn_urlstring · uri · nullable · requiredis_archivedbooleanarchived_atstring · nullablecreated_atstring · requiredmetaobject · requiredNested fields
paginationobjectNested fields
totalinteger · requiredRange: 0 to unbounded
limitinteger · requiredRange: 0 to unbounded
offsetinteger · requiredRange: 0 to unbounded
has_moreboolean · requirednext_cursorstring · nullablePass as the cursor query parameter to get the next page. Null on the last page.
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Assets"
],
"summary": "List assets in a mascot",
"description": "Returns paginated assets in a mascot (images, videos, transparent variants). Each asset has a signed `file_url` (1-hour expiry) and a `cdn_url` when published. Filter by `type` or `item_id`. Set `include_file_urls=false` for faster metadata-only listings. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Page size. 1 to 100. Defaults to 50."
},
"required": false,
"description": "Page size. 1 to 100. Defaults to 50.",
"name": "limit",
"in": "query"
},
{
"schema": {
"type": "number",
"nullable": true,
"minimum": 0,
"default": 0,
"description": "Number of records to skip. Defaults to 0."
},
"required": false,
"description": "Number of records to skip. Defaults to 0.",
"name": "offset",
"in": "query"
},
{
"schema": {
"type": "string",
"description": "Opaque next_cursor from the previous page. Use instead of offset."
},
"required": false,
"description": "Opaque next_cursor from the previous page. Use instead of offset.",
"name": "cursor",
"in": "query"
},
{
"schema": {
"type": "string"
},
"required": false,
"name": "type",
"in": "query"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": false,
"name": "item_id",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Whether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings."
},
"required": false,
"description": "Whether to include signed file_url values. Defaults to true. Set false for faster metadata-only listings.",
"name": "include_file_urls",
"in": "query"
}
],
"responses": {
"200": {
"description": "List of assets",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioAssetListResponse"
},
"example": {
"data": [
{
"id": "5114bec3-b92a-4917-8675-84fce713d3cf",
"type": "image",
"status": "completed",
"metadata": {},
"item_id": null,
"file_url": "https://storage.googleapis.com/masco-media/references/.../f4bdfb19.png?GoogleAccessId=...&Expires=...&Signature=...",
"cdn_url": null,
"created_at": "2026-04-19T09:36:46.95543+00:00"
}
],
"meta": {
"pagination": {
"total": 2,
"limit": 5,
"offset": 0,
"has_more": false
}
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "listMascotAssets",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/cdn-exportExport published CDN links
Returns the same clean hosted-link JSON shown in the mascot page Get Links export modal. This endpoint is built from published CDN assets, not raw item types, so pose/image items with attached video loops are included. Includes sticker URL arrays and complete cursor-follower interactions with nine WebP frame URLs and a JSON manifest URL. Only completed, non-archived hosted assets are included. Create cursor followers with POST /v1/mascots/{id}/interactive. Use the raw items and assets endpoints for IDs, prompts, metadata, and status checks. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Responses
200 Mascot CDN export JSON
application/json
mascotstring · requireditemsarray · requiredNested fields
namestring · requiredsvgstring · uriimagestring · uritransparent_imagestring · urianimationsarrayNested fields
object
logosobjectstickersarrayNested fields
string
interactionsarrayNested fields
versionnumber · requiredValues: 1
idstring · uuid · requirednamestring · requiredkindstring · requiredValues: "cursor-follower"
widthnumber · requiredValues: 1024
heightnumber · requiredValues: 1024
framesobject · requiredNested fields
up-leftstring · uri · requiredupstring · uri · requiredup-rightstring · uri · requiredleftstring · uri · requiredcenterstring · uri · requiredrightstring · uri · requireddown-leftstring · uri · requireddownstring · uri · requireddown-rightstring · uri · requiredmanifest_urlstring · uri · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 CDN export is not ready
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Mascots"
],
"summary": "Export published CDN links",
"description": "Returns the same clean hosted-link JSON shown in the mascot page Get Links export modal. This endpoint is built from published CDN assets, not raw item types, so pose/image items with attached video loops are included. Includes sticker URL arrays and complete cursor-follower interactions with nine WebP frame URLs and a JSON manifest URL. Only completed, non-archived hosted assets are included. Create cursor followers with POST /v1/mascots/{id}/interactive. Use the raw items and assets endpoints for IDs, prompts, metadata, and status checks. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Mascot CDN export JSON",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioCdnExportResponse"
},
"example": {
"mascot": "Fox Mascot",
"items": [
{
"name": "card-sit",
"image": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.png",
"transparent_image": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit-transparent.png",
"animations": [
{
"video": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.mp4",
"transparent_video_webm": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.webm",
"transparent_video_mov": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit.mov",
"transparent_video_android": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit-android.mp4",
"transparent_video_android_360": "https://assets.masko.ai/fda8417d/fox-mascot/card-sit-360.mp4"
}
]
}
]
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "CDN export is not ready",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "getMascotCdnExport",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/referencesAdd a reference image
Adds an image as a mascot-scoped style reference (up to 6 references). Pass either url to download and store a new reference, or asset_id to copy an existing uploaded/generated image into this mascot when needed. The returned reference_asset_ids are always mascot-scoped assets that the app can display and future generations can use. Invalidates the cached style_card, which will be re-extracted on next generation. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonasset_idstring · uuidAsset ID of an existing uploaded or generated image. If the asset is not already scoped to this mascot, the API creates a mascot-scoped reference copy and stores that copied asset ID in reference_asset_ids.
urlstring · uriPublic HTTP(S) image URL, up to 10 MB with a 15-second download deadline. Private addresses and unsafe redirects are rejected. PNG, JPEG, WebP, GIF and SVG are supported; SVG is converted to PNG. Downloaded and stored as a mascot-scoped reference asset.
Responses
201 Reference added
application/json
dataobject · requiredNested fields
reference_asset_idsarray · requiredNested fields
string
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"References"
],
"summary": "Add a reference image",
"description": "Adds an image as a mascot-scoped style reference (up to 6 references). Pass either `url` to download and store a new reference, or `asset_id` to copy an existing uploaded/generated image into this mascot when needed. The returned `reference_asset_ids` are always mascot-scoped assets that the app can display and future generations can use. Invalidates the cached style_card, which will be re-extracted on next generation. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioAddReferenceBody"
}
}
}
},
"responses": {
"201": {
"description": "Reference added",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReferenceResponse"
},
"example": {
"data": {
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf",
"b357dfe9-92ab-4696-beb3-4f36779808f2"
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "createMascotReference",
"x-masko-api-version": "2026-09-26"
}DELETE/v1/mascots/{id}/references/{assetId}Remove a reference image
Removes an asset from the mascot reference list. Returns the updated reference_asset_ids array. Invalidates the cached style_card. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
assetIdpath · requiredstring
Responses
200 Reference removed
application/json
dataobject · requiredNested fields
reference_asset_idsarray · requiredNested fields
string
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"References"
],
"summary": "Remove a reference image",
"description": "Removes an asset from the mascot reference list. Returns the updated `reference_asset_ids` array. Invalidates the cached style_card. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "assetId",
"in": "path"
}
],
"responses": {
"200": {
"description": "Reference removed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReferenceResponse"
},
"example": {
"data": {
"reference_asset_ids": [
"e906ebb5-deb1-4010-82f9-f0182a3812e0",
"5114bec3-b92a-4917-8675-84fce713d3cf"
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "deleteMascotReference",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/generateGenerate image or animation
Starts an async generation job. Returns 202 with data.job_id - poll via GET /v1/jobs/{id} (or pass ?wait=true for long-polling). Cost by type: image=1, animation=2/sec with animation_model=standard (5–15s) or 6/sec with animation_model=premium (4–30s), default 5s for either choice (+1 if no source image); omitting animation_model preserves legacy 5/sec, 4–10s, default 4s, logo=5, edit=1 for images, scene=3, reverse=0. For type: animation, you can skip providing a source image: pass only animation_prompt (and optionally image_prompt) and the system generates a fresh source image first, then animates it. To animate an uploaded image directly, pass its POST /v1/upload asset_id as source_image_asset_id with type=animation. The upload is imported into the mascot without changing references; no image-generation credits are charged. Existing mascot assets preserve their saved context. Before video generation, non-square starting and ending images are center-cropped to square; square images are reused unchanged. Optional source_image_crop and end_image_crop specify integer x, y, width and height in pixels after image orientation. Cropped copies preserve the originals and incur no extra credits. Invalid crops return 400 before charging. If you have an existing item, pass item_id to animate/edit its current image. For image generation and image edits, pass optional visual_references for one-time pose, expression, motion, prop, style, or scene cues; these references do not become mascot mascot references. Scene generation and scene editing also use this endpoint with type: "scene". For a new scene, optional source_asset_id selects its character reference and saved variant context. For scene edits use source_image_asset_id with edit_instructions; the two source fields are mutually exclusive. Talking animations: pass speech with type: animation and the mascot says the line in its voice (see the Voice endpoints). The length follows the speech, 5 seconds to 2 minutes at 3 credits per second; the receipt charges the longest the line could need and unused seconds are refunded once the voice is recorded. Talking adds audio (MP3) and transcript (JSON) assets. With dry_run: true it returns 200 with the estimate instead. Returns 409 with details.reason voice_required when the mascot has no voice yet. Returns 402 if credits are insufficient.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonStudioGenerateImageBody
Generate a static image (pose). Cost: 1 credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become mascot mascot references and do not update the mascot style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "image"
image_promptstringWhat the character is doing in the image, e.g. "waving hello with a big smile".
StudioGenerateAnimationBody
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
animation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
typestring · requiredValues: "animation"
animation_promptstringHow the character moves, e.g. "bouncing up and down energetically". You can generate an animation directly from just this: when neither item_id nor source_image_asset_id is passed, the system generates a source image first (adds 1 credit), then animates it.
image_promptstringUsed only when no source image exists. The character description that gets passed to image generation before animation starts.
source_image_asset_idstring · uuidCompleted image asset to animate, including an unattached image from POST /v1/upload. Unattached uploads owned by the caller are imported into this mascot without changing references or generating a new image; only animation credits are charged. The original upload is preserved. Non-square inputs are center-cropped to square before animation. Square inputs are reused unchanged. Use source_image_crop for explicit framing. Optional variant_id freezes the selected context for this import. Existing mascot assets retain their saved context. Prefer item_id to reuse an existing item image.
source_image_cropobjectOptional square crop for the starting image: integer x, y, width, height in pixels after EXIF orientation. Defaults to a centered square for non-square images. Requires source_image_asset_id or an item_id with an existing image. Cropping is free and preserves the original file.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_cropobjectOptional square crop for end_image_asset_id, in pixels after EXIF orientation. Defaults to a centered square for non-square end frames. Requires end_image_asset_id.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_asset_idstring · uuidTarget pose image for a transition, including a pose from another variant. The prompt writer uses the starting and ending images plus their separate saved contexts to write the transition direction. The job records both endpoints and the exact prompt under generation_context.transition. Forces loop to false.
loopbooleanWhether the animation loops seamlessly. Defaults to true. Automatically set to false when end_image_asset_id is provided.
reversebooleanReverse an existing video. Used with reverse_of_video_asset_id. Costs 0 credits.
reverse_of_video_asset_idstring · uuidAsset ID of the forward video to reverse. Required when reverse is true.
auto_reversebooleanTransitions only: also generate the reverse transition (end to source) at 0 extra credits. Requires source_image_asset_id + end_image_asset_id. Response includes a reverse_job field.
reverse_namestringName for the auto-generated reverse item. Defaults to "<item name> (Reverse)".
sizesarrayRequested animation size variants in pixels, e.g. [480, 360]. Filtered against the mascot settings. No extra credit cost.
Nested fields
integer
speechobjectMakes a talking animation: the mascot says this line in its voice (from its context, or its variant's), starting from item_id or source_image_asset_id and ending on end_image_asset_id (or the start image). The length comes from the speech: 5 seconds to 2 minutes at 3 credits per second. A talk longer than one take (15 seconds) is cut in its pauses into takes that start and end on the start image, then joined. The receipt adds audio and transcript assets and an estimate.
Nested fields
scriptstringWhat the mascot says, with movements in square brackets placed where each one starts, e.g. "[waves hello, excited] Hi! I'm Gubby. [points to the right] The docs are right here!". A feeling after a comma also steers the voice.
Length: 1 to 6000 characters
textstringThe words alone, instead of script. Masko writes the movements, following direction when given, and returns the script it used.
Length: 1 to 3000 characters
directionstringWith text: how the mascot should perform the line, e.g. "excited about what he does, points at the docs at the end".
Length: 0 to 500 characters
languagestringISO 639-1 code of the line. Omit it to detect the language from the words.
Pattern: ^[a-z]{2}$
dry_runbooleanWith speech: return the estimate (and the script, when Masko writes the movements) without charging or generating.
StudioGenerateEditBody
Edit an existing image or video with natural-language instructions. Cost: 1 credit for images, 5 credits per second for videos, rounded up to a whole credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become mascot mascot references and do not update the mascot style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "edit"
edit_instructionsstring · requiredWhat to change on the source asset, e.g. "add a santa hat". Required.
source_image_asset_idstring · uuidAsset ID of the image to edit. Use data.asset_ids.image from a previous /generate response. If you pass item_id, the source is resolved from the item automatically.
source_video_asset_idstring · uuidCompleted 4–30 second video in this mascot to edit at 720p. Duration and aspect ratio are preserved. Uses the source clip and its source item. For transition clips, edits preserve both saved endpoint identities and their order; variant_id does not restyle the whole clip. The edit prompt is recorded in generation_context.transition_edit.
StudioGenerateLogoBody
Generate an iconic/logo version of the mascot. Cost: 5 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "logo"
request_idstring · uuidStable retry key. Requires item_id; reuse unchanged after an uncertain response.
logo_style_idstringPreset from GET /v1/logo-styles. Explicit style name/instruction override preset fields.
Values: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
logo_descriptionstringWhat the logo should look like, e.g. "iconic face-only, circular badge". Defaults to "Iconic representation of the character".
logo_style_namestringShort label for the logo style, e.g. "Flat", "Retro". Defaults to "Flat".
logo_style_instructionstringDetailed style instructions, e.g. "Flat design with solid colors, no gradients".
StudioGenerateSceneBody
Generate a 4K scene image of the mascot in an environment, or edit an existing scene. Cost: 3 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "scene"
source_asset_idstring · uuidFor a new scene: completed character image to use as its reference. Its saved variant context is retained unless an explicitly selected variant intentionally includes this reference. Use source_image_asset_id instead to edit an existing scene.
scenestringThe environment, e.g. "cozy reading nook with afternoon light". Required unless editing (source_image_asset_id + edit_instructions).
actionstringWhat the mascot is doing in the scene, e.g. "reading a book". Required unless editing.
aspect_ratiostringOutput aspect ratio. Use 4:3 for marketplace_card or marketplace_story, 1:1 for marketplace_square, 21:9 for hero_desktop, and 4:5 or 3:4 for hero_mobile.
Values: "4:3", "1:1", "21:9", "4:5", "3:4", "9:16"
positionstringWhere the mascot sits in the frame. Defaults: right for 21:9, center for others.
Values: "left", "center", "right"
source_image_asset_idstring · uuidFor scene edits: existing scene asset to edit. Must be paired with edit_instructions.
edit_instructionsstringFor scene edits: what to change, e.g. "warm up the lighting". Paired with source_image_asset_id.
Responses
200 Talking estimate (speech with dry_run)
application/json
dataobject · requiredNested fields
dry_runboolean · requiredValues: true
scriptstring · requiredestimateobject · requiredTalking animations only.
Nested fields
speech_secondsnumber · requiredEstimated length of the spoken line.
durationinteger · requiredMost likely video length in seconds.
max_durationinteger · requiredThe longest the video could need; the charge is based on it.
creditsinteger · requiredCharged now: max_duration at 3 credits per second. Unused seconds are refunded once the voice is recorded.
too_longboolean · required202 Generation job started
application/json
dataobject · requiredNested fields
job_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "image", "animation", "edit", "logo", "reverse"
item_idstring · uuid · requireditem_namestring · requiredestimated_costnumber · requiredasset_idsobjecturlsobjectestimateobjectTalking animations only.
Nested fields
speech_secondsnumber · requiredEstimated length of the spoken line.
durationinteger · requiredMost likely video length in seconds.
max_durationinteger · requiredThe longest the video could need; the charge is based on it.
creditsinteger · requiredCharged now: max_duration at 3 credits per second. Unused seconds are refunded once the voice is recorded.
too_longboolean · requiredscriptstringTalking animations only: the line with its movements, as performed.
poll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Generate image or animation",
"description": "Starts an async generation job. Returns 202 with `data.job_id` - poll via GET `/v1/jobs/{id}` (or pass `?wait=true` for long-polling). Cost by type: image=1, animation=2/sec with animation_model=standard (5–15s) or 6/sec with animation_model=premium (4–30s), default 5s for either choice (+1 if no source image); omitting animation_model preserves legacy 5/sec, 4–10s, default 4s, logo=5, edit=1 for images, scene=3, reverse=0. For `type: animation`, you can skip providing a source image: pass only `animation_prompt` (and optionally `image_prompt`) and the system generates a fresh source image first, then animates it. To animate an uploaded image directly, pass its POST /v1/upload asset_id as source_image_asset_id with type=animation. The upload is imported into the mascot without changing references; no image-generation credits are charged. Existing mascot assets preserve their saved context. Before video generation, non-square starting and ending images are center-cropped to square; square images are reused unchanged. Optional source_image_crop and end_image_crop specify integer x, y, width and height in pixels after image orientation. Cropped copies preserve the originals and incur no extra credits. Invalid crops return 400 before charging. If you have an existing item, pass `item_id` to animate/edit its current image. For image generation and image edits, pass optional `visual_references` for one-time pose, expression, motion, prop, style, or scene cues; these references do not become mascot mascot references. Scene generation and scene editing also use this endpoint with `type: \"scene\"`. For a new scene, optional `source_asset_id` selects its character reference and saved variant context. For scene edits use `source_image_asset_id` with `edit_instructions`; the two source fields are mutually exclusive. Talking animations: pass `speech` with `type: animation` and the mascot says the line in its voice (see the Voice endpoints). The length follows the speech, 5 seconds to 2 minutes at 3 credits per second; the receipt charges the longest the line could need and unused seconds are refunded once the voice is recorded. Talking adds audio (MP3) and transcript (JSON) assets. With `dry_run: true` it returns 200 with the estimate instead. Returns 409 with details.reason voice_required when the mascot has no voice yet. Returns 402 if credits are insufficient.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioGenerateBody"
}
}
}
},
"responses": {
"200": {
"description": "Talking estimate (speech with dry_run)",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TalkingDryRunResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"202": {
"description": "Generation job started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenerateAsyncResponse"
},
"example": {
"data": {
"job_id": "b87c9579-7460-4bd0-aa54-77991615dfef",
"status": "pending",
"type": "image",
"item_id": "e328c567-0965-42fc-90b5-7ff6faa61b25",
"item_name": "wave",
"estimated_cost": 1,
"asset_ids": {
"image": "a8b158bb-5698-431a-b0f1-98ee30228b11"
},
"urls": {
"transparent_image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/wave-91a9ac20.png",
"image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/wave-a8b158bb.png"
},
"poll_url": "/api/v1/jobs/b87c9579-7460-4bd0-aa54-77991615dfef?api_version=2026-09-26"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "generateMascot",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/animations/reference-videoAnimate a mascot from a reference video
From Video uses Premium to transfer reference motion to your mascot. Upload a video and its first frame through POST /v1/upload, then provide their asset IDs. Source assets must be completed, active, and accessible to the credential; mascot assets must belong to its workspace. Creates one animation item plus start and end pose items, with MP4, transparent WebM/HEVC, and pose images. Costs 6 credits per output second plus 1 image credit, so the default 5s costs 31 credits. Output duration is 4–30 whole seconds. Standard is not supported for this operation. Returns 202; poll the returned job until completed. Do not resubmit while the job is running.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonvideo_asset_idstring · uuid · requiredOwned, completed video asset containing the reference motion. Upload an MP4 or WebM with POST /v1/upload first.
first_frame_asset_idstring · uuid · requiredOwned, completed image asset showing the first frame of the reference video. Upload it with POST /v1/upload.
namestring · requiredName for the animation. Start and end pose items are also created.
Length: 1 to 255 characters
promptstringOptional instructions for the mascot pose and appearance.
Length: 0 to 10000 characters
durationintegerOutput duration in whole seconds, 4–30. Default 5. Premium costs 6 credits/sec plus 1 image credit.
Default: 5
Range: 4 to 30
animation_modelstringFrom Video always uses Premium. Standard is available for image-to-video animation through /generate.
Values: "premium"
Default: "premium"
variant_idstring · uuidOptional approved mascot variant to animate.
context_asset_idstring · uuidOptional asset in this mascot whose saved mascot context is reused when variant_id is omitted.
Responses
202 Reference video job started
application/json
dataobject · requiredNested fields
job_idstring · uuid · requireditem_idstring · uuid · requiredstart_item_idstring · uuid · requiredend_item_idstring · uuid · requiredasset_idstring · uuid · requiredasset_idsobject · requiredNested fields
mascot_imagestring · uuid · requiredvideostring · uuid · requiredwebmstring · uuid · requiredhevcstring · uuid · requiredstart_imagestring · uuid · requiredstart_transparentstring · uuid · requiredend_imagestring · uuid · requiredend_transparentstring · uuid · requiredestimated_costinteger · requiredpoll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Animate a mascot from a reference video",
"description": "From Video uses Premium to transfer reference motion to your mascot. Upload a video and its first frame through POST /v1/upload, then provide their asset IDs. Source assets must be completed, active, and accessible to the credential; mascot assets must belong to its workspace. Creates one animation item plus start and end pose items, with MP4, transparent WebM/HEVC, and pose images. Costs 6 credits per output second plus 1 image credit, so the default 5s costs 31 credits. Output duration is 4–30 whole seconds. Standard is not supported for this operation. Returns 202; poll the returned job until completed. Do not resubmit while the job is running.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioReferenceVideoBody"
}
}
}
},
"responses": {
"202": {
"description": "Reference video job started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ReferenceVideoAsyncResponse"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "createMascotAnimationReferenceVideo",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/generate-batchBatch-generate multiple items
Starts multiple generation jobs in one call (up to the per-request cap). Returns 202 with an array of data.jobs[], each with its own job_id. Cost is summed across all items. Returns 402 if credits are insufficient for the whole batch.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonrequestsarray · requiredUp to 10 generate requests run in parallel. Each request follows the same discriminated schema as /generate. Credits are deducted per request. Talking animations (speech) are sent one by one to /generate.
Items: 1 to 10
Nested fields
StudioGenerateImageBody
Generate a static image (pose). Cost: 1 credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become mascot mascot references and do not update the mascot style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "image"
image_promptstringWhat the character is doing in the image, e.g. "waving hello with a big smile".
StudioGenerateAnimationBody
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
animation_modelstringSame choices as Studio: standard costs 2 credits/sec (5–15s); premium costs 6 credits/sec (4–30s). Both default to 5s. Omit to preserve legacy generation at 5 credits/sec (4–10s, default 4s).
Values: "standard", "premium"
durationintegerWhole seconds. Standard: 5–15; Premium: 4–30; default 5 with either explicit model. Without animation_model: 4–10, default 4. An additional image costs 1 credit only when a source image must be generated.
Range: 4 to 30
typestring · requiredValues: "animation"
animation_promptstringHow the character moves, e.g. "bouncing up and down energetically". You can generate an animation directly from just this: when neither item_id nor source_image_asset_id is passed, the system generates a source image first (adds 1 credit), then animates it.
image_promptstringUsed only when no source image exists. The character description that gets passed to image generation before animation starts.
source_image_asset_idstring · uuidCompleted image asset to animate, including an unattached image from POST /v1/upload. Unattached uploads owned by the caller are imported into this mascot without changing references or generating a new image; only animation credits are charged. The original upload is preserved. Non-square inputs are center-cropped to square before animation. Square inputs are reused unchanged. Use source_image_crop for explicit framing. Optional variant_id freezes the selected context for this import. Existing mascot assets retain their saved context. Prefer item_id to reuse an existing item image.
source_image_cropobjectOptional square crop for the starting image: integer x, y, width, height in pixels after EXIF orientation. Defaults to a centered square for non-square images. Requires source_image_asset_id or an item_id with an existing image. Cropping is free and preserves the original file.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_cropobjectOptional square crop for end_image_asset_id, in pixels after EXIF orientation. Defaults to a centered square for non-square end frames. Requires end_image_asset_id.
Nested fields
xinteger · requiredRange: 0 to unbounded
yinteger · requiredRange: 0 to unbounded
widthinteger · requiredRange: 0 to unbounded
heightinteger · requiredRange: 0 to unbounded
end_image_asset_idstring · uuidTarget pose image for a transition, including a pose from another variant. The prompt writer uses the starting and ending images plus their separate saved contexts to write the transition direction. The job records both endpoints and the exact prompt under generation_context.transition. Forces loop to false.
loopbooleanWhether the animation loops seamlessly. Defaults to true. Automatically set to false when end_image_asset_id is provided.
reversebooleanReverse an existing video. Used with reverse_of_video_asset_id. Costs 0 credits.
reverse_of_video_asset_idstring · uuidAsset ID of the forward video to reverse. Required when reverse is true.
auto_reversebooleanTransitions only: also generate the reverse transition (end to source) at 0 extra credits. Requires source_image_asset_id + end_image_asset_id. Response includes a reverse_job field.
reverse_namestringName for the auto-generated reverse item. Defaults to "<item name> (Reverse)".
sizesarrayRequested animation size variants in pixels, e.g. [480, 360]. Filtered against the mascot settings. No extra credit cost.
Nested fields
integer
speechobjectMakes a talking animation: the mascot says this line in its voice (from its context, or its variant's), starting from item_id or source_image_asset_id and ending on end_image_asset_id (or the start image). The length comes from the speech: 5 seconds to 2 minutes at 3 credits per second. A talk longer than one take (15 seconds) is cut in its pauses into takes that start and end on the start image, then joined. The receipt adds audio and transcript assets and an estimate.
Nested fields
scriptstringWhat the mascot says, with movements in square brackets placed where each one starts, e.g. "[waves hello, excited] Hi! I'm Gubby. [points to the right] The docs are right here!". A feeling after a comma also steers the voice.
Length: 1 to 6000 characters
textstringThe words alone, instead of script. Masko writes the movements, following direction when given, and returns the script it used.
Length: 1 to 3000 characters
directionstringWith text: how the mascot should perform the line, e.g. "excited about what he does, points at the docs at the end".
Length: 0 to 500 characters
languagestringISO 639-1 code of the line. Omit it to detect the language from the words.
Pattern: ^[a-z]{2}$
dry_runbooleanWith speech: return the estimate (and the script, when Masko writes the movements) without charging or generating.
StudioGenerateEditBody
Edit an existing image or video with natural-language instructions. Cost: 1 credit for images, 5 credits per second for videos, rounded up to a whole credit.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
visual_referencesarrayOne-time visual references for this generation only. Use for pose, expression, motion, props, style, or scene cues. These do not become mascot mascot references and do not update the mascot style card.
Items: 0 to 4
Nested fields
asset_idstring · uuidExisting image asset ID to use as a one-time visual reference.
urlstring · uriPublic image URL to use as a one-time visual reference.
rolestringWhat the model should borrow from this image.
Values: "pose", "expression", "motion", "prop", "style", "scene"
notestringOptional instruction for this reference, e.g. "closed-mouth smile".
Length: 0 to 300 characters
typestring · requiredValues: "edit"
edit_instructionsstring · requiredWhat to change on the source asset, e.g. "add a santa hat". Required.
source_image_asset_idstring · uuidAsset ID of the image to edit. Use data.asset_ids.image from a previous /generate response. If you pass item_id, the source is resolved from the item automatically.
source_video_asset_idstring · uuidCompleted 4–30 second video in this mascot to edit at 720p. Duration and aspect ratio are preserved. Uses the source clip and its source item. For transition clips, edits preserve both saved endpoint identities and their order; variant_id does not restyle the whole clip. The edit prompt is recorded in generation_context.transition_edit.
StudioGenerateLogoBody
Generate an iconic/logo version of the mascot. Cost: 5 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "logo"
request_idstring · uuidStable retry key. Requires item_id; reuse unchanged after an uncertain response.
logo_style_idstringPreset from GET /v1/logo-styles. Explicit style name/instruction override preset fields.
Values: "graphic-app-icon", "cut-paper", "soft-depth", "geometric", "abstract-symbol", "monoline-symbol", "negative-space", "retro-emblem", "hand-drawn"
logo_descriptionstringWhat the logo should look like, e.g. "iconic face-only, circular badge". Defaults to "Iconic representation of the character".
logo_style_namestringShort label for the logo style, e.g. "Flat", "Retro". Defaults to "Flat".
logo_style_instructionstringDetailed style instructions, e.g. "Flat design with solid colors, no gradients".
StudioGenerateSceneBody
Generate a 4K scene image of the mascot in an environment, or edit an existing scene. Cost: 3 credits.
variant_idstring · uuidApproved mascot variant for new content. Omit for Original when creating a new pose; when editing an explicit source asset, omission preserves its saved context. Animation loops preserve the generated source pose receipt; an explicit conflicting variant returns 409 unless that variant intentionally includes the source among its references. For transitions, the two poses determine their own before/after contexts. For uploaded references without receipts, a matching selected variant resolves the context; ambiguous shared uploads return 409 before charging. List variants with GET /v1/mascots/{id}/variants. Playback activation does not change generation selection.
namestringName for the new item. Required when creating a new item. Omit when passing item_id.
item_idstring · uuidExisting item ID in this mascot. Pass this to add a new asset to an existing item, or to animate/edit its current image. For animations and edits, prefer item_id over source_image_asset_id so the API can resolve the source image from the item.
typestring · requiredValues: "scene"
source_asset_idstring · uuidFor a new scene: completed character image to use as its reference. Its saved variant context is retained unless an explicitly selected variant intentionally includes this reference. Use source_image_asset_id instead to edit an existing scene.
scenestringThe environment, e.g. "cozy reading nook with afternoon light". Required unless editing (source_image_asset_id + edit_instructions).
actionstringWhat the mascot is doing in the scene, e.g. "reading a book". Required unless editing.
aspect_ratiostringOutput aspect ratio. Use 4:3 for marketplace_card or marketplace_story, 1:1 for marketplace_square, 21:9 for hero_desktop, and 4:5 or 3:4 for hero_mobile.
Values: "4:3", "1:1", "21:9", "4:5", "3:4", "9:16"
positionstringWhere the mascot sits in the frame. Defaults: right for 21:9, center for others.
Values: "left", "center", "right"
source_image_asset_idstring · uuidFor scene edits: existing scene asset to edit. Must be paired with edit_instructions.
edit_instructionsstringFor scene edits: what to change, e.g. "warm up the lighting". Paired with source_image_asset_id.
Responses
202 Batch generation jobs started
application/json
dataobject · requiredNested fields
jobsarray · requiredNested fields
job_idstring · uuid · requiredstatusstring · requiredValues: "pending", "processing", "completed", "failed"
typestring · requiredValues: "image", "animation", "edit", "logo", "reverse"
item_idstring · uuid · requireditem_namestring · requiredestimated_costnumber · requiredasset_idsobjecturlsobjectestimateobjectTalking animations only.
Nested fields
speech_secondsnumber · requiredEstimated length of the spoken line.
durationinteger · requiredMost likely video length in seconds.
max_durationinteger · requiredThe longest the video could need; the charge is based on it.
creditsinteger · requiredCharged now: max_duration at 3 credits per second. Unused seconds are refunded once the voice is recorded.
too_longboolean · requiredscriptstringTalking animations only: the line with its movements, as performed.
poll_urlstring · requiredtotal_costnumber · requiredpoll_urlstring · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
402 Insufficient credits
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Batch-generate multiple items",
"description": "Starts multiple generation jobs in one call (up to the per-request cap). Returns 202 with an array of `data.jobs[]`, each with its own `job_id`. Cost is summed across all items. Returns 402 if credits are insufficient for the whole batch.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioGenerateBatchBody"
}
}
}
},
"responses": {
"202": {
"description": "Batch generation jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BatchAsyncResponse"
},
"example": {
"data": {
"jobs": [
{
"job_id": "fe21477f-7e46-448f-bfdb-96eac80205b8",
"item_id": "e8ca0d1b-b445-46f6-862f-26b26ac2c6ff",
"item_name": "sitting",
"status": "pending",
"estimated_cost": 1,
"asset_ids": {
"image": "25dc5edf-bf41-4a7f-ba23-b783ea2718d8"
},
"urls": {
"transparent_image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/sitting-fb7bbd6f.png",
"image": "https://assets.masko.ai/fda8417d/cat-api-test-1776591702/sitting-25dc5edf.png"
}
}
],
"total_cost": 2,
"poll_url": "/api/v1/jobs?api_version=2026-09-26"
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"402": {
"description": "Insufficient credits",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "generateBatchMascot",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/suggestionsSuggest action poses
Returns AI-generated action/pose suggestions (e.g. "waving", "thinking") tailored to the same resolved parent-plus-child mascot context used by generation. Use these as prompts for POST /v1/mascots/{id}/generate. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variant_idqueryUse this approved mascot variant for suggestions. Omit for Original.
string
Responses
200 Suggested actions
application/json
dataobject · requiredNested fields
suggestionsarray · requiredNested fields
string
400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Suggest action poses",
"description": "Returns AI-generated action/pose suggestions (e.g. \"waving\", \"thinking\") tailored to the same resolved parent-plus-child mascot context used by generation. Use these as prompts for POST `/v1/mascots/{id}/generate`. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Use this approved mascot variant for suggestions. Omit for Original."
},
"required": false,
"description": "Use this approved mascot variant for suggestions. Omit for Original.",
"name": "variant_id",
"in": "query"
}
],
"responses": {
"200": {
"description": "Suggested actions",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SuggestionsResponse"
},
"example": {
"data": {
"suggestions": [
"Curious Head Tilt",
"Wide Eyed Stare",
"Slow Clay Blink",
"Gentle Tail Wag",
"Heavy Paw Waddle",
"Playful Pounce",
"Happy Ear Twitch"
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "listMascotSuggestions",
"x-masko-api-version": "2026-09-26"
}GET/v1/mascots/{id}/scenes/suggestionsSuggest scenes for a mascot
Returns AI-generated scene ideas (setting + action + recommended position) tailored to the mascot. Use these as payloads for POST /v1/mascots/{id}/generate with type: "scene". No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
variant_idqueryUse this approved mascot variant for suggestions. Omit for Original.
string
aspect_ratioqueryAspect ratio to optimize the suggestions for. Defaults to 4:5.
string · 4:3, 1:1, 21:9, 4:5, 3:4, 9:16
countqueryNumber of scene suggestions to return. Defaults to 6, max 10.
integer
Responses
200 AI-suggested scenes for the mascot
application/json
dataobject · requiredNested fields
suggestionsarray · requiredNested fields
namestring · requiredemojistringscenestring · requiredactionstring · requiredpositionstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Generate"
],
"summary": "Suggest scenes for a mascot",
"description": "Returns AI-generated scene ideas (setting + action + recommended position) tailored to the mascot. Use these as payloads for POST `/v1/mascots/{id}/generate` with `type: \"scene\"`. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"schema": {
"type": "string",
"format": "uuid",
"description": "Use this approved mascot variant for suggestions. Omit for Original."
},
"required": false,
"description": "Use this approved mascot variant for suggestions. Omit for Original.",
"name": "variant_id",
"in": "query"
},
{
"schema": {
"type": "string",
"enum": [
"4:3",
"1:1",
"21:9",
"4:5",
"3:4",
"9:16"
],
"default": "4:5",
"description": "Aspect ratio to optimize the suggestions for. Defaults to 4:5."
},
"required": false,
"description": "Aspect ratio to optimize the suggestions for. Defaults to 4:5.",
"name": "aspect_ratio",
"in": "query"
},
{
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 6,
"description": "Number of scene suggestions to return. Defaults to 6, max 10."
},
"required": false,
"description": "Number of scene suggestions to return. Defaults to 6, max 10.",
"name": "count",
"in": "query"
}
],
"responses": {
"200": {
"description": "AI-suggested scenes for the mascot",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SceneSuggestionsResponse"
},
"example": {
"data": {
"suggestions": [
{
"name": "Sunlit Terrace",
"emoji": "☀️",
"scene": "A sun-drenched Mediterranean stone balcony overlooking a sparkling blue coastline, decorated with potted succulents and blooming bougainvillea in earthen jars.",
"action": "Sitting contentedly among the flower pots and soaking up the afternoon warmth.",
"position": "center"
}
]
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "listMascotSceneSuggestions",
"x-masko-api-version": "2026-09-26"
}PATCH/v1/mascots/{id}/settingsUpdate mascot settings
Updates mascot export settings. image_exports configures future PNG/WebP derivatives of original, transparent and sticker images; it does not backfill existing images. animation_sizes preserves existing behavior: changed settings may queue exports for existing animations as well as future outputs. Use POST /v1/mascots/{id}/exports for explicit image/video backfill, or the legacy size-variants endpoint for video-only repair. Returns settings_applied, size_variant_jobs and sizes_enabled. No credit cost.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Request body (required)
Request body
application/jsonpublish_paramsobjectExport settings. prores_exports enables original-size ProRes 4444 with alpha for future transparent animations. image_exports applies to future image completions. animation_sizes retains existing automatic video export behavior, including scheduling existing videos when settings change. Use POST /v1/mascots/:id/exports for explicit backfill.
Nested fields
image_exportsobjectNested fields
enabledboolean · requiredsourcesarray · requiredItems: 1 to 3
Nested fields
string · original, transparent, sticker
formatsarray · requiredItems: 1 to 2
Nested fields
string · png, webp
sizesarray · requiredItems: 1 to 5
Nested fields
integer
prores_exportsobjectAutomatically create original-delivery-size ProRes 4444 MOV files with alpha after transparent animations finish. Disabled by default.
Nested fields
enabledboolean · requiredanimation_sizesobjectNested fields
enabledboolean · requiredWhether animation size variants are generated.
sizesarray · requiredPixel sizes to generate. Any integer from 32 to 1920. Common values: 720, 480, 360, 240.
Nested fields
number
force_refreshbooleanResponses
200 Settings updated
application/json
dataobject · requiredNested fields
updatedboolean · requiredslugstring400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Settings"
],
"summary": "Update mascot settings",
"description": "Updates mascot export settings. image_exports configures future PNG/WebP derivatives of original, transparent and sticker images; it does not backfill existing images. animation_sizes preserves existing behavior: changed settings may queue exports for existing animations as well as future outputs. Use POST /v1/mascots/{id}/exports for explicit image/video backfill, or the legacy size-variants endpoint for video-only repair. Returns settings_applied, size_variant_jobs and sizes_enabled. No credit cost.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdateSettingsBody"
}
}
}
},
"responses": {
"200": {
"description": "Settings updated",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpdatedFlagResponse"
},
"example": {
"data": {
"updated": true
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "updateMascotSettings",
"x-masko-api-version": "2026-09-26"
}POST/v1/mascots/{id}/size-variantsBackfill animation size variants
Starts idempotent jobs for missing animation size variants on completed videos in this mascot. Normal pipeline usage sends {}: it uses the mascot configured animation_sizes, or [360] when no sizes are configured, and only creates missing variants. force=true is an explicit admin recovery option that regenerates existing variants too; do not use it for normal marketplace/canvas backfills or while relevant jobs are in flight. This endpoint does not regenerate source animations and does not toggle mascot settings.
Bearer authentication. Access depends on credential scope and workspace membership.
Parameters
idpath · requiredstring
Idempotency-KeyheaderAccount-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.
string
Request body (required)
Request body
application/jsonsizesarraySizes to generate. Defaults to the mascot's configured animation_sizes, or [360].
Nested fields
integer
forcebooleanRegenerate even sizes that already exist. Default false (idempotent: only missing sizes, never supersedes in-flight jobs).
Responses
200 Size variant jobs started
application/json
dataobject · requiredNested fields
size_variant_jobsinteger · requiredRange: 0 to unbounded
sizesarray · requiredNested fields
integer
forceboolean · required400 Validation error
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
401 Unauthorized
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
403 Forbidden
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
404 Not found
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
409 Conflict
application/json
errorobject · requiredNested fields
codestring · requiredStable machine-readable code. Switch on this.
messagestring · requiredHuman-readable explanation.
paramstringThe request field that caused the error, when there is one.
detailsobjectExtra context, for example issues for validation errors or required and balance for credits.
doc_urlstring · uri · requiredDocumentation for this error code.
request_idstring · requiredSame value as the Request-Id header. Include it when contacting support.
OpenAPI operation
{
"tags": [
"Settings"
],
"summary": "Backfill animation size variants",
"description": "Starts idempotent jobs for missing animation size variants on completed videos in this mascot. Normal pipeline usage sends `{}`: it uses the mascot configured `animation_sizes`, or `[360]` when no sizes are configured, and only creates missing variants. `force=true` is an explicit admin recovery option that regenerates existing variants too; do not use it for normal marketplace/canvas backfills or while relevant jobs are in flight. This endpoint does not regenerate source animations and does not toggle mascot settings.",
"security": [
{
"BearerAuth": []
}
],
"parameters": [
{
"schema": {
"type": "string",
"format": "uuid"
},
"required": true,
"name": "id",
"in": "path"
},
{
"name": "Idempotency-Key",
"in": "header",
"required": false,
"description": "Account-scoped key (1 to 255 characters, ideally a UUID). Retries must preserve the credential workspace, effective API version, URL, content type and exact body bytes, including multipart boundaries; different inputs return 409 idempotency_key_reused. Completed responses, including 500 errors, replay for 24 hours after completion with current resource access checked again. Running or unconfirmed executions return 409 idempotency_request_in_progress and do not expire automatically. A receipt persistence failure returns 503 idempotency_persistence_failed: retry only with the same key and inspect the operation outcome before starting a new request.",
"schema": {
"type": "string",
"maxLength": 255
}
}
],
"requestBody": {
"required": true,
"description": "Request body",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/StudioGenerateSizeVariantsBody"
}
}
}
},
"responses": {
"200": {
"description": "Size variant jobs started",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/SizeVariantsResponse"
},
"example": {
"data": {
"size_variant_jobs": 3,
"sizes": [
360
],
"force": false
}
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"400": {
"description": "Validation error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"404": {
"description": "Not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
},
"409": {
"description": "Conflict",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiError"
}
}
},
"headers": {
"Request-Id": {
"description": "Unique ID of this request. Include it when contacting support.",
"schema": {
"type": "string",
"example": "req_3f9c2a71d0b84e6a9c1f5e22"
}
},
"Masko-API-Version": {
"description": "Effective resource naming contract.",
"schema": {
"type": "string",
"enum": [
"2026-09-26"
]
}
}
}
}
},
"operationId": "createMascotSizeVariant",
"x-masko-api-version": "2026-09-26"
}