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

# Authentication: User-Agent header requirements

> Astra requires a User-Agent header on every request. Learn the required AppName/Version format, see multi-language examples, and handle 403 errors.

Every request to the Astra API must include a `User-Agent` header. There is no API key or account signup required — the `User-Agent` header is the only form of identification Astra needs. This lets the team understand how the API is being used and contact you if something goes wrong with your integration.

## Required header format

Your `User-Agent` must follow this pattern:

```
{AppName}/{Version} (+{URL})
```

| Part      | Rules                                                      | Example                |
| --------- | ---------------------------------------------------------- | ---------------------- |
| `AppName` | Alphanumeric characters and hyphens only, case-insensitive | `my-app`, `ValTracker` |
| `Version` | Semver recommended                                         | `1.0`, `1.2.3`         |
| `URL`     | Optional — a URL to your app or service info page          | `+https://example.com` |

## Examples

<CodeGroup>
  ```bash curl theme={null}
  curl https://astra.teamfortuna.xyz/v1/agents \
    -H "User-Agent: my-app/1.0.0 (+https://example.com)"
  ```

  ```python Python (requests) theme={null}
  import requests

  headers = {
      "User-Agent": "my-app/1.0.0 (+https://example.com)"
  }

  response = requests.get(
      "https://astra.teamfortuna.xyz/v1/agents",
      headers=headers
  )
  data = response.json()
  ```

  ```javascript JavaScript (fetch) theme={null}
  const response = await fetch("https://astra.teamfortuna.xyz/v1/agents", {
    headers: {
      "User-Agent": "my-app/1.0.0 (+https://example.com)",
    },
  });

  const data = await response.json();
  ```

  ```javascript Node.js (axios) theme={null}
  const axios = require("axios");

  const response = await axios.get("https://astra.teamfortuna.xyz/v1/agents", {
    headers: {
      "User-Agent": "my-app/1.0.0 (+https://example.com)",
    },
  });

  const data = response.data;
  ```
</CodeGroup>

<Warning>
  Requests with a missing or empty `User-Agent` header will receive a **403 Forbidden** response. Make sure every request your application sends includes a valid header.
</Warning>

## Common errors

| Status          | Cause                                               | Fix                                                                                 |
| --------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------- |
| `403 Forbidden` | `User-Agent` header is missing, empty, or malformed | Add a valid `User-Agent` header following the `{AppName}/{Version} (+{URL})` format |

<Tip>
  Include your app's URL in the `User-Agent` header. This makes it possible for the Astra team to reach out if your requests are causing issues, rather than having your access silently interrupted.
</Tip>
