FoxCue API: Library and YouTube publishing and Video claims
Request examples, parameters, scopes and response statuses for FoxCue API library and youtube publishing and video claims.
These operations are copied from the live OpenAPI schema at GET /api/v1/openapi.json (2026-10-28, 297 operations). Each example request is built from that operation's schema: required fields, and optional fields when the object is small. Response bodies are not in that schema. Where the JSON shape is known, it is listed below with an example. Shared errors are on Limits and errors.
Send Authorization: Bearer <workspace API key>. Base URL: https://app.foxcue.com/api/v1.
Video claims
POST /video-claims/preview
Preview a one-use video claim for the connected workspace without consuming the code
Scope: outputs:read.
Example request
{
"code": "example"
}Required fields: code.
curl -X POST "https://app.foxcue.com/api/v1/video-claims/preview" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /video-claims
Confirm and queue a copy of the existing editable video and finished output into this workspace; no generation, provider charges or subscription
Scope: media:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
Idempotency-Key | header | yes | string | minLength 8; maxLength 128 |
Example request
{
"code": "example",
"confirm": true
}Required fields: code, confirm.
curl -X POST "https://app.foxcue.com/api/v1/video-claims" \
-H "Authorization: Bearer <workspace API key>" \
-H "Idempotency-Key: example-key-001" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /video-claims/{id}
Read this workspace video claim progress and copied video links
Scope: outputs:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/video-claims/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
Library
GET /library/templates
Search listed Library templates (q, category); mine=true lists every template this workspace submitted with its checks
Scope: library:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
q | query | no | string | maxLength 120 |
category | query | no | string | one of launch, product-explainer, dashboard, kinetic-type, captions, presenter, social-hook, transition, other |
mine | query | no | string | one of true, false |
limit | query | no | integer | minimum 1; maximum 100 |
offset | query | no | integer | minimum 0; maximum 100000 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/library/templates?q=example&category=example&mine=example&limit=example&offset=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /library/templates/{id}
Read a listed template, or one this workspace submitted with its checks and revisions
Scope: library:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/library/templates/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /library/submissions
Submit a Style folder (file map), its credits and review material (breakdown, side-by-side frames). Runs the automatic checks; a passing template waits for FoxCue review. entry_id adds a revision to your own submission
Scope: library:write.
Example request
{
"entry_id": "example",
"slug": "example",
"name": "example",
"summary": "example",
"category": "launch",
"files": {},
"credits": {
"source_url": "example",
"creator": "example",
"creator_handle": "example",
"note": "example"
},
"review": {
"breakdown": "example",
"comparison": [
{
"at_s": 0,
"reference": "example",
"foxcue": "example",
"note": "example"
}
],
"verdict": "example"
},
"idea_id": "example",
"change_summary": "example"
}Required fields: name, files.
curl -X POST "https://app.foxcue.com/api/v1/library/submissions" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
entry | JSON |
revision | JSON |
replayed | boolean |
{
"entry": "example",
"revision": "example",
"replayed": false
}| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /library/submissions/{id}
Read a submission: status (draft, checked, listed, parked), check issues and warnings, park reason, revisions
Scope: library:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/library/submissions/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /library/ideas
List reference ideas this workspace logged
Scope: library:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
q | query | no | string | maxLength 120 |
category | query | no | string | one of launch, product-explainer, dashboard, kinetic-type, captions, presenter, social-hook, transition, other |
mine | query | no | string | one of true, false |
limit | query | no | integer | minimum 1; maximum 100 |
offset | query | no | integer | minimum 0; maximum 100000 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/library/ideas?q=example&category=example&mine=example&limit=example&offset=example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /library/ideas
Log a reference idea (source URL, creator, why, breakdown) before building; the same source URL returns the existing idea
Scope: library:write.
Example request
{
"source_url": "example",
"creator": "example",
"title": "example",
"why": "example",
"kind": "launch",
"breakdown": {}
}Required fields: source_url, title.
curl -X POST "https://app.foxcue.com/api/v1/library/ideas" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
The body is a JSON object with these fields.
| Field | Type |
|---|---|
idea | JSON |
replayed | boolean |
{
"idea": "example",
"replayed": false
}| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /library/ideas/{id}
Mark an idea building or dismissed
Scope: library:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"status": "new"
}Required fields: status.
curl -X PATCH "https://app.foxcue.com/api/v1/library/ideas/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
YouTube publishing
GET /publishing/drafts/{id}/metadata-context
Read original keyword targets, angle and script/Brand context provenance
Scope: publishing:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/publishing/drafts/example/metadata-context" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /publishing/drafts/{id}/metadata-generations
Generate editable title, description, tags and thumbnail headline; also requires publishing:read and generation:write, never publishes
Scope: publishing:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"expected_context_hash": "example",
"idempotency_key": "example-"
}Required fields: expected_revision, expected_context_hash, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/publishing/drafts/example/metadata-generations" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /publishing/drafts/{id}/metadata-generations/{generationId}
Read a metadata generation receipt without making another model request
Scope: publishing:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string | |
generationId | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/publishing/drafts/example/metadata-generations/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /publishing/drafts/{id}/thumbnails
Generate one OpenAI thumbnail using Brand and video context; also requires publishing:read, generation:write and media:write, never publishes
Scope: publishing:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"idempotency_key": "example-",
"title": "example",
"description": "example",
"headline": "example",
"direction": "example",
"style": "bold_curiosity"
}Required fields: expected_revision, idempotency_key, title.
curl -X POST "https://app.foxcue.com/api/v1/publishing/drafts/example/thumbnails" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /publishing/drafts/{id}/thumbnails
Read saved thumbnail candidates for a scoped publishing draft
Scope: publishing:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/publishing/drafts/example/thumbnails" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /publishing/drafts/{id}/thumbnails/{generationId}
Read a thumbnail generation receipt; never makes another image request
Scope: publishing:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string | |
generationId | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/publishing/drafts/example/thumbnails/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /publishing/capabilities
Read Brand channel publishing capabilities without external writes
Scope: publishing:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1; maxLength 128; pattern ^[a-zA-Z0-9_-]+$ |
artifact_id | query | no | string | minLength 1; maxLength 128; pattern ^[a-zA-Z0-9_-]+$ |
Example request
curl -X GET "https://app.foxcue.com/api/v1/publishing/capabilities?project_id=example&artifact_id=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
thumbnail_generator | JSON |
project_id | null |
needs_brand | boolean |
enabled | JSON |
can_submit | JSON |
output | null |
connections | array |
{
"thumbnail_generator": "example",
"project_id": null,
"needs_brand": false,
"enabled": "example",
"can_submit": "example",
"output": null,
"connections": []
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /publishing/drafts
Prepare a same-brand completed output for explicit later publication
Scope: publishing:write.
Example request
{
"project_id": "example",
"artifact_id": "example",
"video_id": "example",
"connection_id": "example"
}Required fields: project_id, artifact_id, connection_id.
curl -X POST "https://app.foxcue.com/api/v1/publishing/drafts" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
201 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
PATCH /publishing/drafts/{id}
Edit a publishing draft using its current revision; never publishes
Scope: publishing:write.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"metadata": {
"title": "example",
"description": "example",
"tags": [
"example"
],
"category_id": "example",
"made_for_kids": true,
"contains_synthetic_media": true,
"visibility": "private",
"default_language": "example",
"thumbnail_artifact_id": "example",
"thumbnail_media_id": "example"
}
}Required fields: expected_revision, metadata.
curl -X PATCH "https://app.foxcue.com/api/v1/publishing/drafts/example" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /publishing/drafts/{id}/submit
Explicitly approve and queue this exact reviewed draft for external YouTube publication
Scope: publishing:publish.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"idempotency_key": "example-"
}Required fields: expected_revision, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/publishing/drafts/example/submit" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /publishing/deliveries
List scoped durable publishing deliveries
Scope: publishing:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
project_id | query | no | string | minLength 1; maxLength 128; pattern ^[a-zA-Z0-9_-]+$ |
composition_id | query | no | string | minLength 1; maxLength 128; pattern ^[a-zA-Z0-9_-]+$ |
connection_id | query | no | string | minLength 1; maxLength 128; pattern ^[a-zA-Z0-9_-]+$ |
artifact_id | query | no | string | minLength 1; maxLength 128; pattern ^[a-zA-Z0-9_-]+$ |
state | query | no | string | maxLength 30 |
limit | query | no | integer | minimum 1; maximum 100 |
offset | query | no | integer | minimum 0; maximum 100000 |
Example request
curl -X GET "https://app.foxcue.com/api/v1/publishing/deliveries?project_id=example&composition_id=example&connection_id=example&artifact_id=example&state=example&limit=example" \
-H "Authorization: Bearer <workspace API key>"Response
The body is a JSON object with these fields.
| Field | Type |
|---|---|
items | array |
has_more | boolean |
limit | number |
offset | number |
{
"items": [],
"has_more": false,
"limit": 0,
"offset": 0
}| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
GET /publishing/deliveries/{id}
Read safe progress, confirmed URL and events; never credentials
Scope: publishing:read.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
curl -X GET "https://app.foxcue.com/api/v1/publishing/deliveries/example" \
-H "Authorization: Bearer <workspace API key>"Response
| Status | Meaning |
|---|---|
200 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /publishing/deliveries/{id}/cancel
Cancel delivery and verify any native schedule is cleared; never deletes a remote video
Scope: publishing:publish.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"idempotency_key": "example-"
}Required fields: expected_revision, idempotency_key.
curl -X POST "https://app.foxcue.com/api/v1/publishing/deliveries/example/cancel" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |
POST /publishing/deliveries/{id}/retry
Explicitly repair or reapprove a delivery while preserving provider identity
Scope: publishing:publish.
Parameters
| Name | In | Required | Type | Rules |
|---|---|---|---|---|
id | path | yes | string |
Example request
{
"expected_revision": 1,
"idempotency_key": "example-",
"action": "resume",
"release_at": "example",
"timezone": "example",
"expected_connection_generation": 1
}Required fields: expected_revision, idempotency_key, action.
curl -X POST "https://app.foxcue.com/api/v1/publishing/deliveries/example/retry" \
-H "Authorization: Bearer <workspace API key>" \
-H "Content-Type: application/json" \
-d @body.jsonResponse
| Status | Meaning |
|---|---|
202 | Success |
400 | Invalid request |
401 | Invalid, expired or revoked key |
403 | Missing scope |
404 | Resource not found in workspace |
409 | Revision or idempotency conflict |
429 | Rate or active-job limit exceeded |