> ## Documentation Index
> Fetch the complete documentation index at: https://docs.julian.11x.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentication

> Authenticate requests with your organization's API key.

All API requests are authenticated with an API key sent in the `x-api-key` header:

```bash theme={null}
curl https://julian.11x.ai/api/v1/credits/usage \
  -H "x-api-key: $JULIAN_API_KEY"
```

## API keys

* Get your API key from the 11x team, or from the platform when invited to your organization.
* API keys are scoped to your **organization** and grant access to all of its agents.
* Store keys securely and **never** expose them in client-side code.

Requests with a missing or invalid key return `401` with an `UNAUTHORIZED` or `INVALID_API_KEY` error code.
Requests for an agent that doesn't belong to your organization return `401`/`404`.

## Validating your key

To check that your API key works, call a read-only endpoint. Credit usage authenticates the key at the
organization level:

```bash theme={null}
curl https://julian.11x.ai/api/v1/credits/usage \
  -H "x-api-key: $JULIAN_API_KEY"
```

To also verify access to a specific agent, list its outcomes:

```bash theme={null}
curl https://julian.11x.ai/api/v1/agents/$AGENT_ID/outcomes \
  -H "x-api-key: $JULIAN_API_KEY"
```

A `200` from both means your key is valid and the agent is reachable. Both calls are pure reads — they can't
schedule or modify anything, regardless of how they're invoked.

<Note>The scheduling endpoints also respond to `HEAD` requests for connectivity checks without scheduling.</Note>

## Rate limiting

* Requests are limited to **10 requests per second per API key**.
* Exceeding the limit returns HTTP `429`. Back off and retry with jitter.

## Error format

All error responses share one shape:

```json theme={null}
{
  "error": "ERROR_CODE",
  "message": "Human-readable explanation"
}
```

Each endpoint's reference page lists its specific error codes.
