Skip to main content
Eversince is a creative agent that works across video, image, audio, and motion graphics. It orchestrates the latest AI models with 8 craft specializations, does agentic video editing, and delivers ready assets or 1080p/4K exported videos.

Base URL

https://eversince.ai/api/v1

Authentication

All requests require an API key in the Authorization header.
Authorization: Bearer YOUR_API_KEY
API keys start with es_live_ and can be created in your account settings or via the API. Each account can have up to 10 active keys.

Quick start

Create a project, poll until it’s done, then get the result.
# 1. Create a project
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"
  }'

# Response: { "id": "proj_abc123", "status": "queued", ... }

# 2. Poll for status
curl https://eversince.ai/api/v1/projects/proj_abc123 \
  -H "Authorization: Bearer $EVERSINCE_API_KEY"

# 3. When status is "idle", trigger a render
curl -X POST https://eversince.ai/api/v1/projects/proj_abc123/render \
  -H "Authorization: Bearer $EVERSINCE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "quality": "1080p" }'

# 4. Poll again until status is "idle", then get the assembled_url

Project lifecycle

Every project follows this status flow:
queued → running → generating → idle
                              → failed

idle → (call /render) → rendering → idle
                                  → failed

cancelled (from queued, running, generating, or idle)
StatusMeaningPoll interval
queuedWaiting to start5s
runningAgent is planning and executing30s
generatingWaiting for model outputs30-60s
renderingCompositing final video30s
idleReady for next action (see below)Stop
failedSomething went wrong. Check error_message. Send a message to retryStop
cancelledStopped by userStop
The idle status appears twice in a typical flow. First idle: the agent finished its work. assembled_url is null, the project is ready for feedback or rendering. Second idle (after you call /render): rendering is complete and assembled_url contains the video URL. Always check assembled_url to distinguish between the two.

Two modes

Autonomous (API default). The agent handles everything start to finish. Create the project, poll until idle, get the result. Collaborative. The agent stops at decision points and returns idle with a message in agent_message. Review the message, send feedback via POST /projects/:id/messages, and the agent continues. Good for guiding creative direction.
The API defaults to autonomous mode. In the studio, the default is collaborative.
Switch modes anytime via PATCH /projects/:id/settings.

Rate limits

LimitValue
Requests30 per minute per user
Concurrent projects5 active simultaneously
Renders50 per day
Request payload1 MB max
For higher limits, contact us at support@eversince.ai Rate limit headers are included on every response:
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 28
X-RateLimit-Reset: 1711929600
When rate limited, you’ll receive a 429 response with a Retry-After header.

Errors

All errors follow the same format:
{
  "error": {
    "code": "validation_error",
    "message": "brief: brief is required",
    "status": 400
  }
}
CodeStatusMeaning
validation_error400Invalid request parameters
unauthorized401Missing or invalid API key
insufficient_credits402Not enough credits
forbidden403Permission denied or feature requires Pro plan
not_found404Resource doesn’t exist
conflict409Status conflict (e.g., project is already running)
payload_too_large413Request body exceeds 1 MB
project_limit429Concurrent project or daily project limit exceeded
rate_limited429Too many requests
internal_error500Server error
service_unavailable503Temporarily unavailable
Validation errors join multiple field errors with semicolons: "brief: brief is required; mode: mode must be autonomous or collaborative".

Response headers

Every response includes:
HeaderDescription
X-Request-IdUnique request identifier for debugging
X-RateLimit-LimitRequests allowed per window
X-RateLimit-RemainingRequests remaining
X-RateLimit-ResetUnix timestamp when the window resets

Minimum credit requirements

ActionMinimum credits
Create project50
Send message10
Render (1080p)Free (rate limited to 50/day)
Render (4K)Requires Pro subscription

Best practices

Network retries can duplicate projects. Include an idempotency_key to prevent this. Existing projects return 200, new projects return 202. Handle both as success.
Webhooks are delivered once. Use them as a trigger, then confirm state with GET /projects/:id.
assembled_url expires after 24 hours. Create a share link for a permanent URL, or download the video. Check assembled_url_expires_at for the exact expiry.
When balance drops below 100 credits, responses include credits_warning. Use this to trigger top-up flows before the agent runs out mid-project.
Store the last message ID and pass it as ?after=msg_id to get only new messages.
Every response includes an X-Request-Id header. Log these alongside your requests for debugging with support.