Create a project
Start a new project. The agent begins working immediately.
Request body
| Parameter | Type | Required | Description |
|---|
brief | string | Yes | Creative direction for the agent. Max 10,000 characters. |
title | string | No | Project title. Max 30 characters. |
mode | string | No | autonomous (default) or collaborative. |
aspect_ratio | string | No | 16:9 (default), 9:16, 1:1, or 21:9. |
craft | string | No | Craft: auto (default), general, cinema, animation, music-video, ugc, product-shots, motion-graphics, humor, audio-engineering. |
craft_auto | boolean | No | Let the agent auto-select crafts. Default true when craft is auto, false otherwise. |
video_model | string | No | Default video model ID. Agent selects if not set. |
image_model | string | No | Default image model ID. Agent selects if not set. |
agent_model | string | No | opus (default) or sonnet. |
expected_output | string | No | assembled (rendered video) or assets (standalone assets, no render). Auto-detected if not set. |
webhook_url | string | No | HTTPS URL for status change notifications. |
idempotency_key | string | No | Prevent duplicate projects on retries. Max 256 characters. |
references | array | No | Reference media. See below. |
extract_content | boolean | No | Extract content from reference URLs. Default true. |
References
Each reference is either an uploaded file or a URL:
[
{ "upload_id": "upl_abc123" },
{ "url": "https://example.com/image.jpg", "type": "image" },
{ "url": "https://youtube.com/watch?v=...", "type": "url" }
]
Reference types: image, video, audio, url. Max 10 references per request, max 3 URL references.
Response 202
{
"id": "proj_abc123",
"status": "queued",
"mode": "autonomous",
"project_url": null,
"credits_balance": 1450,
"created_at": "2025-03-15T10:30:00Z"
}
Example
curl -X POST https://eversince.ai/api/v1/projects \
-H "Authorization: Bearer $EVERSINCE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"brief": "Your brief here",
"mode": "autonomous"
}'
If you include an idempotency_key and a non-failed project already exists for that key, the endpoint returns 200 with a different response shape:{
"id": "proj_abc123",
"status": "running",
"message": "Project already exists for this idempotency key"
}
Adopt a project
Adopt an existing studio project for API management.
Request body
| Parameter | Type | Required | Description |
|---|
project_id | string | Yes | ID of the studio project to adopt. |
mode | string | No | autonomous or collaborative (default). |
Response 201
Returned when the project is newly adopted.
{
"id": "proj_abc123",
"status": "idle",
"mode": "collaborative",
"project_url": "https://eversince.ai/app/projects/..."
}
Response 200
Returned when the project has already been adopted.
{
"id": "proj_abc123",
"status": "idle",
"mode": "collaborative",
"project_url": "https://eversince.ai/app/projects/...",
"message": "Project already adopted"
}
List projects
| Parameter | Type | Default | Description |
|---|
limit | integer | 20 | Results per page. 1–100. |
offset | integer | 0 | Pagination offset. |
status | string | | Filter by status. |
title | string | | Search by title (case-insensitive). |
Response 200
{
"projects": [
{
"id": "proj_abc123",
"source_project_id": null,
"status": "idle",
"mode": "autonomous",
"title": "My Project",
"brief": "Your brief here...",
"expected_output": "assembled",
"assembled_url": "https://...",
"project_url": "https://eversince.ai/app/projects/...",
"created_at": "2025-03-15T10:30:00Z",
"updated_at": "2025-03-15T10:35:00Z"
}
],
"total": 42,
"limit": 20,
"offset": 0
}
The brief field is truncated to 200 characters in list responses. The source_project_id field indicates the original studio project when a project was adopted via the API.
Get project status
Returns the current status, agent message, and output URLs.
Response 200
{
"id": "proj_abc123",
"status": "idle",
"mode": "autonomous",
"output_type": "assembled",
"assembled_url": "https://...",
"assembled_url_expires_at": "2025-03-16T10:30:00Z",
"project_url": "https://eversince.ai/app/projects/...",
"agent_message": "Your project is complete. 4 scenes ready for review...",
"variation_id": "var_xyz",
"created_at": "2025-03-15T10:30:00Z",
"updated_at": "2025-03-15T10:35:00Z"
}
| Field | Description |
|---|
output_type | assembled (rendered video available), assets (standalone assets, no render needed), or pending (still in progress). |
assembled_url | URL of the rendered video. Expires after 24 hours. Render again or create a share link for a permanent URL. |
agent_message | The agent’s last message. In collaborative mode, this contains what the agent wants feedback on. |
credits_warning | Present when balance is below 100 credits. |
variation_id | The currently active variation. |
error_message | Present when status is failed. |
Update project settings
PATCH /projects/:id/settings
Update project configuration. Blocked while the agent is actively running (running, generating, rendering).
Request body
All fields are optional. Only include fields you want to change.
| Parameter | Type | Description |
|---|
title | string|null | Project title. Max 30 characters. Set to null to clear. |
mode | string | autonomous, collaborative, or none (hand project to studio). |
video_model | string | Default video model ID. |
image_model | string | Default image model ID. |
agent_model | string | opus (default) or sonnet. |
craft | string | Craft slug. |
craft_auto | boolean | Let agent auto-select crafts. |
webhook_url | string|null | Webhook URL. Set to null to remove. |
expected_output | string|null | assembled, assets, or null to auto-detect. |
Response 200
{
"title": "My Project",
"mode": "collaborative",
"aspect_ratio": "16:9",
"video_model": "kling-3.0",
"image_model": "nano-banana-pro",
"agent_model": "opus",
"craft": "cinema",
"craft_auto": false,
"webhook_url": "https://your-server.com/webhooks/eversince",
"expected_output": "assembled"
}
Cancel a project
POST /projects/:id/cancel
Stop the agent. Valid when status is queued, running, generating, or idle. Generations already in progress at the provider level will still complete, but the agent won’t continue to the next step.
Response 200
{
"id": "proj_abc123",
"status": "cancelled"
}
Send a message
POST /projects/:id/messages
Send feedback or direction to the agent. Only valid when the project is idle. Requires at least 10 credits.
Request body
| Parameter | Type | Required | Description |
|---|
message | string | Yes | Your feedback or direction. Max 10,000 characters. |
references | array | No | Reference media (same format as project creation). |
extract_content | boolean | No | Extract content from reference URLs. Default true. |
Response 202
{
"id": "proj_abc123",
"status": "running"
}
The agent resumes work with your feedback.
Example
curl -X POST https://eversince.ai/api/v1/projects/proj_abc123/messages \
-H "Authorization: Bearer $EVERSINCE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "The music is too intense. Make it more subtle and add a female voiceover."
}'
Get messages
GET /projects/:id/messages
Retrieve conversation history.
| Parameter | Type | Default | Description |
|---|
limit | integer | 20 | Messages per page. 1–50. |
after | string | | Message ID cursor. Returns messages newer than this ID. |
before | string | | Message ID cursor. Returns messages older than this ID. |
Response 200
{
"messages": [
{
"id": "msg_001",
"role": "user",
"content": "Your brief here.",
"source": "chat",
"created_at": "2025-03-15T10:30:00Z"
},
{
"id": "msg_002",
"role": "assistant",
"content": "I've created a 4-scene project ready for review...",
"source": "chat",
"created_at": "2025-03-15T10:32:00Z"
}
],
"has_more": false
}
Use the after cursor for efficient polling. Store the last message ID you’ve seen and pass it as ?after=msg_002 to get only new messages.