# API

## Available today

| API | Status | Where |
|-----|--------|-------|
| [Concurrency locks](/docs/api/locks) | Shipped | `https://api.nthpool.cloud` |
| Async job poll | Shipped with [async](/docs/pools/async) | `https://api.nthpool.cloud/pools/{pool}/jobs/{jobId}` |
| [Control API](/docs/api/control) | Shipped | nthbouncer host (`/api/v1`), Bearer token |
| [MCP server](/docs/mcp) | Shipped | `https://nthbouncer.com/mcp`, OAuth from your AI assistant |

## Concurrency locks

Acquire a pool concurrency slot, call the upstream from your own process, then
release the slot. Same keys and concurrency limit as proxy traffic; no proxying of the
upstream HTTP call.

- [Concurrency locks reference](/docs/api/locks)

## Control API

Manage Capacity budgets, the pools on them, pool keys (optional TTL), and
pool Metrics. Authenticate with an API token from **Organization settings →
API tokens**. It is not a pool key and never admits on the proxy.
AI assistants connect at `https://nthbouncer.com/mcp` instead. See
[Agents](/docs/agents).

- [Control API reference](/docs/api/control)
- [OpenAPI 3.1 spec](/docs/api/openapi.json) (machine-readable)

Pool request contracts still live under:

- [Pools](/docs/pools) (hostnames, headers, and status codes)
- [Access](/docs/pools/access) (pool keys and optional signing)
- [Quickstart](/docs/quickstart) (first proxied request with `curl`)
