Developer Manual
Authentication
Every request except the health check needs a bearer API key. Keys begin with eck_live_ or eck_test_ and carry their own organization and scopes, so there is no separate organization header.
Bearer keys
Send your API key in the Authorization header as a bearer token. Live keys begin with eck_live_. The server looks up the organization and scopes from the key. An X-Api-Key header works too.
curl https://api.eclips.tech/v1/run \
-H "Authorization: Bearer eck_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "agent_type": "rfq_generator", "task": "Draft an RFQ for 500 laptops" }'In the SDK, pass the key to the constructor. Nothing else is required:
import { EClipsClient } from "@eclips/sdk";
// The org and scopes come from the key, so there is no organizationId to pass.
const client = new EClipsClient({ apiKey: process.env.ECLIPS_API_KEY! });# Store the key as a secret. Never commit it.
export ECLIPS_API_KEY=eck_live_xxxxxxxxxxxxxxxxxxxxxxxxCreating keys
Create keys in the dashboard under Settings → API Keys. Choose the scopes the key needs when you create it. Scopes are checked on every endpoint. The full eck_live_ value is shown once, so copy it then. Only a SHA-256 hash is stored. A key can have an expiry date and can be revoked at any time. A revoked or expired key returns 401.
Scopes
A key only works on an endpoint if it carries the matching scope. Otherwise the API returns 403 Insufficient scope with the required and provided scopes in the body.
{
"error": "Insufficient scope",
"required": "agents:run",
"provided": ["agents:read"]
}| agents:run | Start agent runs (POST /v1/run). |
| agents:read | Read runs, stream status, and read usage (GET /v1/runs, /v1/runs/:id, /v1/runs/:id/stream, /v1/usage*). |
| triage:read | List triage items waiting for a person (GET /v1/triage). |
| triage:write | Approve or reject triage items (POST /v1/triage/:id/approve|reject). |
| webhooks:read | List registered webhooks (GET /v1/webhooks). |
| webhooks:write | Create and delete webhooks (POST /v1/webhooks, DELETE /v1/webhooks/:id). |
| batch:run | Create and cancel batch jobs (POST /v1/batches, POST /v1/batches/:id/cancel). |
| batch:read | List and read batch jobs (GET /v1/batches, GET /v1/batches/:id). |
agents:read and not agents:run.