Conventions
Cross-cutting API conventions — id prefixes, snake_case fields, epoch-millisecond time, and credit-denominated money.
These conventions hold across every IonWarp surface — MCP tools, REST endpoints, and the objects in Data.
Field naming
All args, request bodies, responses, and data values are snake_case:
project_id, object_id, event_id, run_id, reported_at. There are no
camelCase aliases — MCP and REST accept the identical name, and a camelCase
argument is simply not read. Never write slug; the server derives the route
slug from name/object_id.
Ids
Ids are prefixed by kind, so a value names its own type:
| Prefix | Kind |
|---|---|
pr_… | project |
ts_… / tk_… | task |
run_… | run |
pat_… | personal access token (PAT) |
evt_… | timeline event id |
art_… | uploaded artifact |
Object ids inside a collection are human-readable, kebab-case, and relative to the
record — learning-tests-run-under-bun — never bare counters like record_3.
Time
Timestamps are epoch milliseconds (integers). Durations are milliseconds
(window_ms, duration_ms, timeout_ms). Use context.touch.fields for
standard timestamp touches like last_computed_data_at.
Money
Money is denominated in credits: 1,000 credits = $1. Plan allowances,
per-run cost, and overage are all in credits — read them with usage_summary
(Core / Usage). Store cost as credits, not dollars.
Errors
Every failure is named — a fixed error_code vocabulary, durable on the row,
with no heuristic recovery and no silent deny. The full vocabulary is generated in
Reference / Errors; list reads follow
Pagination.