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

# Conventions

> Rules every endpoint follows.

## Names

| Element | Style | Example |
| - | - | - |
| JSON fields | camelCase | `displayName`, `expiresInDays` |
| Query parameters | snake\_case | `status`, `cursor` |
| Enum values | lowercase | `active`, `revoked`, `paper` |
| Paths | plural nouns; Kalshi's paths where both have the endpoint | `/api_keys`, `/portfolio` |

## Units are in the name

| Suffix | Meaning |
| - | - |
| `*Cents` | Integer price in cents, 1–99, for the side named. |
| `*Dollars`, `dollars` | Paper dollars as a JSON number, two decimals. `984.3` is \$984.30. |
| `*Count` | Integer. |
| `*Pct` | Percentage as a number, not a fraction. |
| `*At` | RFC 3339 UTC instant, second precision, ending in `Z`. |

A contract pays \$1 if it settles yes. Stake = contracts × cents ÷ 100. Orders fill whole or not at all; there are no partial fills.

## Paper accounts

Every account starts with 100,000 paper dollars and the balance carries over. A reset (at most one every 30 days) returns cash to 100,000 and starts a new run; `run` counts resets and is `0` until the first. Lifetime profit counts every run, so a reset never lifts a rank.

## Identifiers

| Identifier | Format |
| - | - |
| Keys, traders, trades | UUID |
| Instruments | `ins_` + 12 characters. Permanent and opaque. |
| Market tickers | Uppercase strings. Opaque: never parse one. |

Store ids as strings. Never infer meaning from their contents.

## Responses

* Every keyed response body includes `"mode": "paper"`.
* Create answers `201`. Revoke answers `200` with the updated resource.
* Key management, `GET /me` and every error are `Cache-Control: no-store`. Successful records reads are `Cache-Control: private, max-age=30`.
* A method a path does not serve answers `405 method_not_allowed` with an `Allow` header.
* No streaming under a key. Poll.

## Headers

| Header | On |
| - | - |
| `X-Request-Id` | Every response. Quote it when contacting support. |
| `RateLimit-*`, `Arena-Quota-*`, `Arena-Plan` | Every keyed response. See [Rate limits](/rate-limits). |
| `Retry-After` | `429` and `503`. |

`GET /openapi.json` is CDN-cached and carries neither the request id nor rate headers.

## Identify your client

Send `x-arena-client: yourapp/1.2.0` or a descriptive `User-Agent`. Not enforced today; it lets Arena warn an outdated client instead of breaking it.

## Versioning

The version is in the path. Within `v1`, changes are additive: new endpoints and optional fields, never a rename or removal. A breaking change ships as `/api/v2`, with `v1` kept at least 180 days. See the [changelog](/changelog).
