Veto uses API keys for authentication. Every request to the Veto API must include a valid key in theDocumentation Index
Fetch the complete documentation index at: https://docs.veto.tools/llms.txt
Use this file to discover all available pages before exploring further.
Authorization header using the Bearer scheme.
API key format
All Veto API keys are prefixed withveto_ followed by 32 hex characters:
Sending the key
Include your key in theAuthorization header on every request:
Raw HTTP
Node.js SDK
Pass the key toVetoClient at construction time. The SDK attaches the Authorization header automatically on every request.
Key scopes
Each API key has one of two scopes:| Scope | Access |
|---|---|
admin | Full access — create, read, update, and delete agents, policies, and API keys |
read-only | Query access — read agents, policies, and audit logs, but no mutations |
POST /v1/authorize) works with both scopes. For production services that only call authorize, use a read-only key to limit the blast radius of a leaked credential.
Creating API keys
Dashboard
Go to Settings → API Keys and click New API key. Give it a name, choose a scope, and optionally set an expiry date.The raw key is shown once at creation and never again. Copy it before closing the dialog. After creation, only the key prefix (e.g.,
veto_a3f8c2) is shown for identification.API
You can also create keys programmatically. This requires an existing key withadmin scope.
DELETE /v1/api-keys/:id with an admin key.
Rate limits
The Veto API enforces a limit of 600 requests per minute per API key. This applies across all endpoints.
| Header | Description |
|---|---|
X-RateLimit-Limit | Your limit (requests per minute) |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
429 Too Many Requests with a Retry-After header indicating how many seconds to wait.
The SDK surfaces this as a RateLimitError with a retryAfterMs property:
Error reference
| Status | Code | Meaning |
|---|---|---|
401 Unauthorized | UNAUTHORIZED | The API key is missing, malformed, or invalid |
403 Forbidden | FORBIDDEN | The key is valid but its scope does not permit this action (e.g., a read-only key attempting to create a policy) |
429 Too Many Requests | RATE_LIMITED | The per-minute request limit has been exceeded. Check the Retry-After response header |