Authentication
API keys, Clerk JWT, guest access, scopes, and rate limiting for the Ivy Biosciences API
Authentication is how you prove who you are so the API knows which requests to trust and how to rate-limit them. Start with the public guest curl path when you want to try one orchestrated run without an account. Pick an API key for server-side and CLI work, or a Clerk JWT for browser and mobile sessions. Once you've chosen a method, API Keys covers provisioning credentials and Rate Limits covers the ceilings each method carries.
Difficulty
Time
Authentication
Every request carries one of three credentials, and the credential decides which account the run is recorded against.
Authentication Methods
| Method | Use Case | Header |
|---|---|---|
| API Key | Server-side, CLI, scripts, CI/CD | Authorization: Bearer ivy_... |
| Clerk JWT | Browser, mobile (Clerk sessions) | Authorization: Bearer eyJ... |
| Guest orchestrate | Try-before-signup, demos | No credential; quota is keyed to the caller's IP |
API Key Authentication
API keys use the ivy_ prefix (not ivy_sk_). Three header formats are accepted:
The API key prefix is ivy_, not ivy_sk_. Some older documentation references may show ivy_sk_ — this is incorrect.
Creating API Keys
Only a signed-in Clerk session can create an API key; an API key cannot create another key. Create keys in the web app at Settings → API keys, or call the same route with a session token:
See API Keys for full management documentation.
Clerk JWT Authentication
For browser and mobile applications using Clerk:
Guest access
The supported public guest entry point is POST /api/v1/orchestrate. It needs no API key or guest header; send a natural-language prompt and let the orchestrator choose the allowlisted tools.
Guest Restrictions
| Restriction | Value |
|---|---|
| Rate limit | 18 orchestrate calls per day per IP |
| Compute budget | $1.00 of compute per IP per UTC day; whichever limit runs out first refuses the call |
| Allowed tools | Guest allowlist; the route may run selected GPU and sandbox tools |
| Data retention | Ephemeral guest session; no durable account history |
| Project context | None |
See the guest curl quickstart for the supported public flow.
Scopes
An API key carries up to three capabilities. A new key gets read and write unless you ask for others.
| Scope | Permissions |
|---|---|
read | Read jobs, projects, results, and usage |
write | Create and update jobs, files, and projects |
manage | Perform destructive or account-level actions |
Scope Inheritance
Each capability includes the ones below it:
Keys created before this vocabulary existed keep working: older domain scopes such as jobs:read or tools:all map onto these three.
Project Scoping
Jobs and projects can be scoped to an organization:
An API key can also be restricted to a list of projects when you create it in settings (allowedProjectIds). A restricted key reaches only jobs in those projects, on every job route, including status, outputs, downloads, manifests and artifact content. A job with no project, or in any other project, is refused even if your account can open it. The refusal is a 403 or 404 that does not say whether the job exists. A key with no project list reaches every job your account can.
A job's files are stored under the project it ran in. If a job was later moved to another project, a key restricted to the new project can read the job's status but not those files. Use an unrestricted key or a signed-in session for them.
Rate Limits
Limits are set per route and per client, not per authentication method. Signed-in callers (Clerk JWT or API key) get the same per-minute and per-second ceilings; a guest orchestrate call also draws on the daily guest quota in Guest curl.
A throttled request returns HTTP 429 with a Retry-After header. Rate Limits lists the ceilings, the response bodies, and how to back off.
Error Format
Most web API routes, including the Harness routes, return this envelope:
Errors forwarded from the compute backend keep its FastAPI shape, {"detail": "..."}.
| Status | Meaning |
|---|---|
| 401 | Authentication required or token expired |
| 403 | Insufficient permissions (scope too low) |
| 404 | Resource not found |
| 422 | Validation error (bad parameters) |
| 429 | Rate limit exceeded |
| 500 | Server error |
| 503 | Service unavailable (feature disabled) |
Read next
- API Keys — create and manage API keys
- Guest curl — unauthenticated trial access through the public orchestrator
- Rate Limits — detailed rate limit documentation
- Error Codes — complete error reference
Was this page helpful?