Skip to main content

Create a project


POST /projects
Start a new project. The agent begins working immediately.

Request body

ParameterTypeRequiredDescription
briefstringYesCreative direction for the agent. Max 10,000 characters.
titlestringNoProject title. Max 30 characters.
modestringNoautonomous (default) or collaborative.
aspect_ratiostringNo16:9 (default), 9:16, 1:1, or 21:9.
craftstringNoCraft: auto (default), general, cinema, animation, music-video, ugc, product-shots, motion-graphics, humor, audio-engineering.
craft_autobooleanNoLet the agent auto-select crafts. Default true when craft is auto, false otherwise.
video_modelstringNoDefault video model ID. Agent selects if not set.
image_modelstringNoDefault image model ID. Agent selects if not set.
agent_modelstringNoopus (default) or sonnet.
expected_outputstringNoassembled (rendered video) or assets (standalone assets, no render). Auto-detected if not set.
webhook_urlstringNoHTTPS URL for status change notifications.
idempotency_keystringNoPrevent duplicate projects on retries. Max 256 characters.
referencesarrayNoReference media. See below.
extract_contentbooleanNoExtract 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


POST /projects/adopt
Adopt an existing studio project for API management.

Request body

ParameterTypeRequiredDescription
project_idstringYesID of the studio project to adopt.
modestringNoautonomous 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


GET /projects
ParameterTypeDefaultDescription
limitinteger20Results per page. 1–100.
offsetinteger0Pagination offset.
statusstringFilter by status.
titlestringSearch 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


GET /projects/:id
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"
}
FieldDescription
output_typeassembled (rendered video available), assets (standalone assets, no render needed), or pending (still in progress).
assembled_urlURL of the rendered video. Expires after 24 hours. Render again or create a share link for a permanent URL.
agent_messageThe agent’s last message. In collaborative mode, this contains what the agent wants feedback on.
credits_warningPresent when balance is below 100 credits.
variation_idThe currently active variation.
error_messagePresent 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.
ParameterTypeDescription
titlestring|nullProject title. Max 30 characters. Set to null to clear.
modestringautonomous, collaborative, or none (hand project to studio).
video_modelstringDefault video model ID.
image_modelstringDefault image model ID.
agent_modelstringopus (default) or sonnet.
craftstringCraft slug.
craft_autobooleanLet agent auto-select crafts.
webhook_urlstring|nullWebhook URL. Set to null to remove.
expected_outputstring|nullassembled, 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

ParameterTypeRequiredDescription
messagestringYesYour feedback or direction. Max 10,000 characters.
referencesarrayNoReference media (same format as project creation).
extract_contentbooleanNoExtract 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.
ParameterTypeDefaultDescription
limitinteger20Messages per page. 1–50.
afterstringMessage ID cursor. Returns messages newer than this ID.
beforestringMessage 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.