Getting started
Errors & rate limits
The API uses standard HTTP status codes. Errors always have a JSON body with a detail field.
Error format
Most errors carry a human-readable message you can show or log as-is:
{
"detail": "Agent not found"
}Validation errors (422) return a list instead, one entry per problem. loc points at the field:
{
"detail": [
{
"type": "missing",
"loc": [
"body",
"llm_model"
],
"msg": "Field required",
"input": {}
},
{
"type": "extra_forbidden",
"loc": [
"body",
"tenant_id"
],
"msg": "Extra inputs are not permitted",
"input": "..."
}
]
}Status codes
OK
The request succeeded.
Created
A resource was created (agents, tools, invitations).
Bad request
The request is well-formed but not allowed, e.g. an unsupported language for the STT provider.
Unauthorized
The API key is missing, invalid, revoked or expired.
Plan limit
Your plan doesn't allow this, e.g. no agent slots left. The message says what to upgrade.
Forbidden
The workspace is suspended.
Not found
The resource doesn't exist, or belongs to another workspace.
Conflict
The request clashes with the current state, e.g. a duplicate tool or a closed WhatsApp window.
Validation error
The body or query failed validation: a missing field, wrong type, or unknown field.
Too many requests
You hit the rate limit. Wait for Retry-After seconds.
Server error
Something went wrong on our side. Safe to retry with backoff.
Upstream error
A provider we depend on (e.g. WhatsApp) failed or couldn't be reached.
Rate limits
Each API key can make 120 requests per minute. The window resets at the start of every minute. Every response tells you where you stand:
| Header | Description |
|---|---|
X-RateLimit-Limit | Requests allowed per minute for this key. |
X-RateLimit-Remaining | Requests left in the current minute. |
X-RateLimit-Reset | Seconds until the window resets. |
Retry-After | On 429 only: seconds to wait before retrying. |
Over the limit, you get:
{
"detail": "Rate limit exceeded"
}limit and pass updated_since where available, instead of re-reading everything. Need a higher limit? Write to support@tarangnow.com.Retrying
- Retry
429,500and502with exponential backoff. For 429, wait at leastRetry-Afterseconds. - Don't retry other
4xxerrors unchanged -- fix the request first. - Creating resources isn't idempotent. If a create request times out, list the resources before retrying so you don't make a duplicate.