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

# API reference

> Conventions that hold across every endpoint — base URLs, auth, envelopes, casing, pagination, and errors.

The reference in this section is generated from the OpenAPI spec, which is itself generated from the API's Zod schemas. If an endpoint is described here, the server serves it.

## Base URLs

| Environment | Base URL |
| - | - |
| Local (self-hosted, default) | `http://localhost:3000` |
| Production | `https://api.moneyline.co` |

## Authentication

Send an API key as `Authorization: Bearer <key>` or `X-Api-Key: <key>`. See [authentication](https://docs.moneyline.co/get-started/authentication.md) for key types and rotation.

```bash theme={null}
curl http://localhost:3000/v1/submissions \
  -H "Authorization: Bearer $MONEYLINE_API_KEY"
```

## Conventions

> **Request bodies are snake\_case; responses are camelCase**
>
> You send `external_id`, you read back `externalId`. The TypeScript and Python
> SDKs pass your parameters through verbatim, so their params are snake\_case too.
> This is the single most common surprise for new integrators.

> **Single resources are wrapped in a data envelope**
>
> `GET /v1/submissions/{id}` returns a `data` envelope. List endpoints return
> `data` alongside `has_more` and `next_cursor`. Every SDK unwraps this for you.

> **Lists are cursor-paginated**
>
> Pass `next_cursor` back as `cursor`. `limit` defaults to 25 and caps at 100. See
> [pagination](https://docs.moneyline.co/guides/pagination.md).

> **Writes accept an Idempotency-Key**
>
> Retrying a `POST` with the same key returns the original result instead of
> creating a duplicate. See [idempotency](https://docs.moneyline.co/guides/idempotency.md).

> **Errors carry a stable code and a request\_id**
>
> Branch on the error `code`, never on the message. Quote the request id in
> support tickets. See [errors](https://docs.moneyline.co/get-started/errors.md).

> **Rate limit is 1000 requests per minute per key**
>
> Exceeding it returns `429`. The SDKs retry automatically. See
> [rate limits](https://docs.moneyline.co/guides/rate-limits.md).

## SDK examples

Endpoints that an SDK actually implements show TypeScript, Python, and Go tabs alongside cURL. Those snippets are generated from each SDK's real method signatures, so they cannot drift from the code.

Endpoints with no SDK method show cURL only — that is accurate rather than incomplete: 84 of the 310 operations have an SDK method today, and the rest are reached over plain HTTP.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.