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

# Neo public API

> Call Neo programmatically — manage agents, read executions and analytics, and automate your MSP from your own scripts and tools.

The Neo public API lets you do from your own code what you'd otherwise do in the dashboard: list and configure agents, read execution history and analytics, pull billing and usage, manage technician approvals, and more. It's the same API the Neo dashboard, the Teams bot, and partner integrations are built on.

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/developers/authentication">
    Create an API key and authenticate your requests.
  </Card>

  <Card title="Quickstart" icon="rocket" href="/developers/quickstart">
    Make your first request in a couple of minutes.
  </Card>

  <Card title="Endpoints" icon="code" href="/developers/quickstart#explore-the-endpoints">
    Browse every endpoint with live request and response schemas.
  </Card>

  <Card title="Errors & rate limits" icon="triangle-exclamation" href="/developers/errors">
    Error codes, the response envelope, and rate limits.
  </Card>
</CardGroup>

## Base URL

All requests go to a single global host. Neo routes your request to the right region (US, UK, or EU) under the hood, based on your tenant — there are no per-region URLs.

```
https://api.neoagent.io
```

## The response envelope

Every response uses the same envelope, so your code can handle success and failure consistently.

**Success** — the payload is in `data`, with request metadata (and pagination, for lists) in `meta`:

```json theme={null}
{
  "data": { "...": "..." },
  "meta": { "request_id": "a1b2c3d4-...", "pagination": { "has_more": false, "next_cursor": null } }
}
```

**Error** — a stable `code`, a human-readable `message`, and a `request_id` to quote to support:

```json theme={null}
{
  "error": { "code": "FORBIDDEN", "message": "API-key management requires admin role." },
  "meta": { "request_id": "a1b2c3d4-..." }
}
```

See [Errors](/developers/errors) for the full list of codes and statuses.

## "Agent" means workflow

In the API, **agent** is what the dashboard and the rest of these docs call a workflow or agent — the `/agents` endpoints cover triggered workflows, scheduled agents, and chat agents alike. The public name is `agent_id`.

<Info>
  The API is **additive and versioned**. New fields and endpoints can appear at any time, so write your client to ignore unknown fields. Breaking changes ship under a new version path with an overlap window — they never change an existing response shape underneath you.
</Info>

## What's next

<CardGroup cols={2}>
  <Card title="Get your API key" icon="key" href="/developers/authentication">
    Create a key in the dashboard and start authenticating.
  </Card>

  <Card title="Make your first call" icon="rocket" href="/developers/quickstart">
    A copy-paste request that lists your agents.
  </Card>
</CardGroup>
