> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.hollr.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.hollr.ai/_mcp/server.

# Errors and rate limits

## Error shape

API errors use the following structure:

```json
{
  "status": "error",
  "error_code": "400",
  "message": "Missing campaign_id"
}
```

`error_code` is the HTTP status code represented as a string. `message` contains a human-readable explanation intended for debugging and logs.

## HTTP status codes

| Status | Meaning                                                                                   |
| ------ | ----------------------------------------------------------------------------------------- |
| `400`  | The request is missing a required field or contains invalid input.                        |
| `401`  | The `hollr-api-key` header is missing or the key is not recognized.                       |
| `403`  | The key is valid but is not authorized for the requested resource.                        |
| `404`  | The requested campaign or conversation was not found or is not accessible to the account. |
| `429`  | A request or concurrency limit has been exceeded.                                         |
| `500`  | An unexpected error occurred on HollrAI's side.                                           |

## Rate limits

The current API contract documents two limits:

#### 60 requests / minute

Applies per API key across the API.

#### 5 concurrent calls

Applies per API key to <code>POST /v1/call/make-call</code>. The bulk
endpoint does not enforce this specific concurrency limit.

A `429` response uses the standard error shape.

```json
{
  "status": "error",
  "error_code": "429",
  "message": "Too many requests. Please wait before trying again."
}
```

If you need to trigger many calls, prefer `/v1/call/bulk-calls` rather than issuing many individual `make-call` requests in parallel.

## Handling errors

* Fix `400` errors before retrying.
* Check your API key for `401` and `403` errors.
* Confirm the campaign or conversation identifier for `404` errors.
* Back off and retry when appropriate for `429` and transient `500` responses.