Agent API
Build integrations that list content, generate social posts, and create drafts for human review before publishing.
https://api.content3.app/v1Authentication
Authenticate requests with an API key.
Pass your API key using either header:
- •
Authorization: Bearer c3ak_... - •
x-agent-api-key: c3ak_...
Keys begin with the prefix c3ak_ and are created from your dashboard.
curl https://api.content3.app/v1/me \ -H "Authorization: Bearer c3ak_live_abc123..."
Scopes
Each API key is granted specific scopes that control access.
content:readRead content items and social connections
content:writeCreate or modify content
social:generateGenerate social media content with AI
social:drafts:readList draft social posts
social:drafts:writeCreate draft social posts for human review
reviews:readRead reviews
reviews:writeCreate reviews and comments
products:readRead products
products:writeCreate or modify products
Endpoints
All endpoints are relative to the base URL.
/v1/meReturns the authenticated agent context. No scope required.
Response
{
"userId": "uuid",
"key": {
"id": "uuid",
"name": "my-assistant",
"prefix": "c3ak_live_abc",
"scopes": ["content:read", "social:generate"]
}
}/v1/content-itemsList content items owned by the authenticated user.
Query parameters
?type=video # filter by content type &limit=20 # max 100, default 20 &offset=0 # pagination offset
Response
{
"items": [
{
"id": "uuid",
"type": "video",
"title": "Product Launch",
"description": "...",
"source_url": "https://...",
"thumbnail_url": "https://...",
"created_at": "2025-01-01T00:00:00Z",
"updated_at": "2025-01-01T00:00:00Z"
}
]
}/v1/social/connectionsList connected social media accounts.
Response
{
"connections": [
{
"id": "uuid",
"provider": "youtube",
"provider_account_id": "UC...",
"metadata": { "channel_name": "My Channel" },
"created_at": "2025-01-01T00:00:00Z",
"updated_at": "2025-01-01T00:00:00Z"
}
]
}/v1/social/generate-contentGenerate AI-written titles, descriptions, and hashtags for a content item.
Request body
{
"contentItemId": "uuid",
"platforms": ["youtube", "tiktok", "instagram"],
"userPrompt": "Focus on the summer sale" // optional
}Response
{
"youtube": {
"title": "...",
"description": "...",
"hashtags": ["..."]
},
"tiktok": { ... },
"instagram": { ... }
}/v1/social/draftsCreate a draft social post for human review. Accepts two payload formats.
Request body (format A — canonical)
{
"contentItemId": "uuid",
"title": "Summer Sale Highlight",
"description": "Check out our biggest sale...",
"hashtags": ["#summer", "#sale"],
"platforms": [
{
"connectionId": "uuid",
"platformTitle": "Override title for this platform",
"platformDescription": "Override description",
"settings": {}
}
]
}Request body (format B — shorthand)
{
"contentItemId": "uuid",
"title": "Summer Sale Highlight",
"caption": "Check out our biggest sale...",
"hashtags": ["#summer", "#sale"],
"platforms": ["tiktok", "youtube"],
"connectionIds": ["uuid-1", "uuid-2"]
}Both formats accepted. caption maps to description. Get connection IDs from GET /v1/social/connections.
Response
{
"draft": {
"id": "uuid",
"status": "draft",
"createdAt": "2025-01-01T00:00:00Z"
}
}/v1/social/drafts/:id/publishPublish a draft social post. Enqueues the post for publishing to all configured platforms. Only drafts with status "draft" can be published. Returns 422 if the post is not a draft or is missing content/platforms.
Response
{
"postId": "uuid",
"jobId": "uuid",
"status": "pending"
}/v1/social/draftsList draft social posts.
Query parameters
?limit=20 # max 100, default 20 &offset=0 # pagination offset
Response
{
"drafts": [
{
"id": "uuid",
"title": "Summer Sale Highlight",
"description": "...",
"hashtags": ["#summer"],
"status": "draft",
"created_at": "2025-01-01T00:00:00Z",
"content_items": {
"id": "uuid",
"title": "Product Launch",
"type": "video"
},
"social_post_platforms": [
{
"id": "uuid",
"status": "pending",
"social_connections": {
"id": "uuid",
"provider": "youtube"
}
}
]
}
]
}Short-Form Video Generation
Generate short-form videos from Quora, Reddit, or AI-generated content.
/v1/agents/short-form/optionsGet available voices, content sources, and aspect ratios for video generation.
Response
{
"agent": {
"id": "short_form_content",
"name": "Short-Form Content Agent",
"description": "Create viral videos from Quora, Reddit, or AI-generated content"
},
"sourceOptions": [
{
"value": "quora",
"label": "Quora Answer",
"description": "...",
"requiredField": "url"
}
],
"voiceOptions": [
{ "value": "Kore", "label": "Kore", "description": "..." }
],
"aspectRatioOptions": [
{ "value": "9:16", "label": "9:16 (Vertical)" },
{ "value": "16:9", "label": "16:9 (Horizontal)" }
],
"defaults": {
"sourceType": "quora",
"voiceId": "Kore",
"aspectRatio": "9:16",
"saveToLibrary": true
}
}/v1/agents/short-form/generateGenerate a short-form video. Returns a job ID for polling status.
Request body
{
"source": {
"type": "quora", // quora | reddit | prompt | text
"url": "https://..." // required for quora/reddit
},
"voiceId": "Kore", // optional, default "Kore"
"aspectRatio": "9:16", // optional, default "9:16"
"saveToLibrary": true // optional, default true
}Response
{
"success": true,
"jobId": "uuid",
"status": "queued",
"taskName": "projects/.../tasks/..."
}Render Jobs
Track the status of video rendering jobs.
/v1/render-jobsList render jobs with optional status and type filters.
Query parameters
?status=completed # filter by job status &job_type=slideshow # filter by job type &agent_type=... # filter by agent type &limit=50 # max 100, default 50 &offset=0 # pagination offset
Response
{
"jobs": [
{
"id": "uuid",
"job_type": "slideshow",
"agent_type": "short_form_content",
"status": "completed",
"payload": { ... },
"pipeline_state": {
"current_step": null,
"completed_steps": ["generate", "render"],
"intermediate_outputs": { ... }
},
"error_message": null,
"created_at": "2025-01-01T00:00:00Z",
"updated_at": "2025-01-01T00:00:00Z"
}
],
"total": 42,
"limit": 50,
"offset": 0
}/v1/render-jobs/:idGet a specific render job by ID.
Response
{
"job": {
"id": "uuid",
"job_type": "slideshow",
"agent_type": "short_form_content",
"status": "completed",
"payload": { ... },
"pipeline_state": { ... },
"error_message": null,
"created_at": "2025-01-01T00:00:00Z",
"updated_at": "2025-01-01T00:00:00Z"
}
}Reviews
Submit content for human-in-the-loop review and approval. Generate shareable public links so reviewers can provide feedback without an account.
/v1/reviewsCreate a review for human approval.
Request body
{
"title": "Campaign video for summer sale",
"contentType": "video", // pdf | video | image | slides | markdown
"attachments": [
{ "url": "https://...", "label": "Final cut", "order": 0 }
],
"description": "Review the video before publishing", // optional
"metadata": { // optional
"tags": ["campaign"],
"prompt": "Original generation prompt",
"notes": "Extra context"
}
}Response
{
"review": {
"id": "uuid",
"title": "Campaign video for summer sale",
"contentType": "video",
"status": "pending",
"createdAt": "2025-01-01T00:00:00Z"
}
}/v1/reviewsList reviews with optional status filter.
Query parameters
?status=pending # filter by review status &limit=20 # max 100, default 20 &offset=0 # pagination offset
Response
{
"reviews": [
{
"id": "uuid",
"title": "Campaign video for summer sale",
"description": "...",
"contentType": "video",
"attachments": [
{ "url": "https://...", "label": "Final cut", "order": 0 }
],
"metadata": { ... },
"status": "pending",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
]
}/v1/reviews/:idGet a review with its comments.
Response
{
"review": {
"id": "uuid",
"title": "Campaign video for summer sale",
"description": "...",
"contentType": "video",
"attachments": [ ... ],
"metadata": { ... },
"status": "pending",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
},
"comments": [
{
"id": "uuid",
"body": "Looks good, but adjust the intro",
"authorType": "human",
"agentKeyName": null,
"createdAt": "2025-01-01T00:00:00Z"
}
]
}/v1/reviews/:id/commentsAdd a comment to a review.
Request body
{
"body": "Updated the intro section as requested"
}Response
{
"comment": {
"id": "uuid",
"body": "Updated the intro section as requested",
"authorType": "agent",
"agentKeyName": "my-assistant",
"createdAt": "2025-01-01T00:00:00Z"
}
}/v1/reviews/:idUpdate a review's status. Valid transitions: pending → in_review, in_review → approved / rejected / changes_requested, changes_requested → in_review.
Request body
{
"status": "in_review"
}Response
{
"review": {
"id": "uuid",
"status": "in_review",
"updatedAt": "2025-01-01T00:00:00Z"
}
}/v1/reviews/:id/revisionsSubmit a new revision with updated attachments. Automatically seeds the original as v1 if no revisions exist. Updates the review's attachments to the latest version.
Request body
{
"attachments": [
{ "url": "https://...", "label": "Updated version" }
],
"note": "Fixed the background color" // optional
}Response
{
"revision": {
"revisionNumber": 2,
"note": "Fixed the background color",
"createdAt": "2025-01-01T00:00:00Z"
}
}/v1/reviews/:id/revisionsList all revisions for a review, ordered by revision number.
Response
{
"revisions": [
{
"revisionNumber": 1,
"attachments": [
{ "url": "https://...", "label": "Original" }
],
"note": "Original",
"agentKeyName": "my-assistant",
"createdAt": "2025-01-01T00:00:00Z"
}
]
}/v1/reviews/:id/shareGenerate a shareable public link for a review. Anyone with the link can view the content, change the review status, and leave comments without logging in. If a share link already exists, returns the existing link and enables it.
Response
{
"shareToken": "base64url-token",
"shareUrl": "https://content3.app/review/base64url-token",
"shareEnabled": true
}/v1/reviews/:id/promotePromote an approved review to a content item. Idempotent — returns the existing content item if already promoted. Returns 422 if the review is not approved.
Request body (all fields optional)
{
"title": "Override title", // optional
"description": "Override desc" // optional
}Response
{
"contentItem": {
"id": "uuid",
"type": "video",
"title": "Campaign video for summer sale",
"sourceUrl": "https://...",
"status": "ready",
"reviewId": "uuid",
"createdAt": "2025-01-01T00:00:00Z"
}
}/v1/reviews/:id/shareToggle a share link on or off. When disabled, the public link shows a "not found" page.
Request body
{
"enabled": false // true to re-enable
}Response
{
"shareToken": "base64url-token",
"shareUrl": "https://content3.app/review/base64url-token",
"shareEnabled": false
}Products
Manage products that can be referenced in content generation.
/v1/productsCreate a product.
Request body
{
"name": "Summer Collection Hoodie",
"description": "Lightweight hoodie for summer",
"url": "https://shop.example.com/hoodie", // optional
"hooks": ["trending", "sale"] // optional
}Response
{
"product": {
"id": "uuid",
"name": "Summer Collection Hoodie",
"description": "Lightweight hoodie for summer",
"url": "https://shop.example.com/hoodie",
"hooks": ["trending", "sale"],
"createdAt": "2025-01-01T00:00:00Z"
}
}/v1/productsList products.
Query parameters
?limit=20 # max 100, default 20 &offset=0 # pagination offset
Response
{
"products": [
{
"id": "uuid",
"name": "Summer Collection Hoodie",
"description": "Lightweight hoodie for summer",
"url": "https://shop.example.com/hoodie",
"hooks": ["trending", "sale"],
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
]
}Workflows
Common end-to-end flows for building with the API.
Draft-Review-Publish
Every post goes through human review before publishing.
Discover content
Call GET /v1/content-items to find available content.
Generate copy
Call POST /v1/social/generate-content to get AI-written titles, descriptions, and hashtags.
Find connections
Call GET /v1/social/connections to list connected social platforms.
Create draft
Call POST /v1/social/drafts to submit a draft for review.
Human reviews
A human approves or rejects the draft in the studio.
Publish draft
Call POST /v1/social/drafts/:id/publish to enqueue the draft for publishing to all platforms.
Video Generation Flow
Generate a short-form video and route it through review.
Get options
Call GET /v1/agents/short-form/options to discover available voices, sources, and aspect ratios.
Generate video
Call POST /v1/agents/short-form/generate with your chosen source and settings.
Poll render job
Call GET /v1/render-jobs/:id to track rendering progress until status is completed.
Submit for review
Call POST /v1/reviews to create a review with the rendered video for human approval.
Share for feedback
Call POST /v1/reviews/:id/share to generate a public link. Send the shareUrl to a human for on-demand feedback.
Promote to content
Once approved, call POST /v1/reviews/:id/promote to create a content item from the review.
Create social draft
Call POST /v1/social/drafts with the content item ID from step 6.
Publish draft
Call POST /v1/social/drafts/:id/publish to enqueue the draft for publishing to all platforms.
Get Started
Create an API key to start building with the Content3 Agent API.
Create API Key