Base URL
Your deployment has a unique base URL printed under Settings → API & MCP in the app. Copy it from there rather than assembling it by hand./mcp.
Format
Every request and response uses JSON. SendContent-Type: application/json on any request that carries a body; responses always return Content-Type: application/json. Nothing else is parsed.
Two surfaces, one credential
Authentication
Create API keys, understand scopes, and learn the authorization header format.
Read Endpoints
Retrieve days, workouts, measurements, goals, and computed insights.
Write Endpoints
Log food, water, weight, workouts, and rest days programmatically.
MCP Endpoint
Connect AI assistants using the Model Context Protocol — same keys, same data.
Rate limits
Rate limits are per key, not per account, so a runaway script cannot lock you out of your own app.
Limits run in a fixed window. When you exceed a limit the API responds with
429 and a Retry-After header telling you how many seconds to wait before retrying. Retry on 429 and 5xx responses; do not retry on 4xx errors.
Verifying your key
To confirm a key is valid without touching any logged data, callGET /v1/me:
GET /v1 returns the full route list filtered to only the routes your key is allowed to call — useful when you are writing a new integration and want a quick reference without leaving your terminal.
Error shape
Every error, regardless of status code, uses the same JSON structure:code; the human-readable message may be reworded between releases. The API never returns a stack trace.