Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.eversince.ai/llms.txt

Use this file to discover all available pages before exploring further.

Create a project


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

Request body

ParameterTypeRequiredDescription
briefstringYesCreative direction for the agent. Max 8,000 characters.
titlestringNoProject title. Max 30 characters.
modestringNoautonomous (default) or collaborative.
aspect_ratiostringNo16:9 (default), 9:16, 1:1, or 21:9.
skillsstring[]NoSkills to activate on this project. Each entry is an Eversince skill (cinema, animation, ugc, music, photography, motion-graphics) or a custom-skill UUID from GET /account/skills. Stack freely up to the 40,000-token combined budget. Omit or pass [] for no skills.
video_modelstringNoDefault video model ID. Agent selects if not set.
image_modelstringNoDefault image model ID. Agent selects if not set.
agent_modelstringNoOne of opus-4.7, opus-4.6, sonnet-4.6.
reasoning_modestringNothinking (default) — deeper reasoning. fast — quicker turns.
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...",
      "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_modelstringOne of opus-4.7, opus-4.6, sonnet-4.6.
reasoning_modestringthinking (default) — deeper reasoning. fast — quicker turns.
skillsstring[]Replace the active skill set. Each entry is an Eversince skill slug (cinema, animation, ugc, music, photography, motion-graphics) or a custom-skill UUID. Pass [] to clear. Combined token budget across active skills is 40,000.
webhook_urlstring|nullWebhook URL. Set to null to remove.

Response 200

{
  "title": "My Project",
  "mode": "collaborative",
  "aspect_ratio": "16:9",
  "video_model": "seedance-2.0",
  "image_model": "nano-banana-pro",
  "agent_model": "sonnet-4.6",
  "reasoning_mode": "thinking",
  "skills": ["skill-cinema"],
  "webhook_url": "https://your-server.com/webhooks/eversince"
}

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. Valid when the project is idle, completed, cancelled, or failed. Returns 400 if the agent is still actively working (running, generating, rendering). Requires at least 10 credits.

Request body

ParameterTypeRequiredDescription
messagestringYesYour feedback or direction. Max 8,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.