# IDs and objects

Store ids whole and never parse them. The prefix tells you the type, so a wrong id fails fast: an `agt_...` id sent to a case route answers `404 not_found`.

| Prefix | Object |
| --- | --- |
| `org_` | Organization |
| `sub_` | Subaccount |
| `agt_` | Agent |
| `agv_` | Agent version |
| `atp_` | Agent template |
| `act_` | Action |
| `mcp_` | MCP server |
| `mtl_` | MCP tool |
| `skl_` | Skill |
| `kbc_`, `kbd_` | Knowledge collection, document |
| `ppl_`, `stg_`, `fld_`, `rr_` | Pipeline, stage, field, routing rule |
| `dcn_`, `dct_` | Data connector, data connector tool |
| `ctc_`, `cfd_` | Contact, contact field |
| `cpy_` | Company |
| `cse_` | Case |
| `msg_` | Message |
| `att_` | Attachment |
| `fil_` | File |
| `not_` | Note |
| `mbr_` | Member |
| `inv_` | Invitation |
| `mae_` | Member audit log entry |
| `wcn_` | WhatsApp connection |
| `pn_` | Phone number |
| `tpl_` | WhatsApp template |
| `wam_` | WhatsApp message |
| `dom_`, `eml_` | Email domain, email message |
| `trg_` | Trigger |
| `cdr_` | Trigger run |
| `lfm_` | Lead form |
| `lni_` | Linear connection |
| `esc_` | Escalation of a case to the technical team |
| `cev_` | Contact event |
| `cmp_` | Campaign |
| `whk_`, `whd_` | Webhook endpoint, delivery |
| `evt_` | Event |
| `key_` | API key |
| `req_` | Request |
| `trn_` | Turn |
| `bgt_` | Budget |
| `sup_` | Suppression (erasure record) |
| `tem_` | Team |
| `apr_` | Approval |
| `dec_` | Automated decision |
| `tqn_` | Team question |
| `agd_` | Agenda |
| `mtg_` | Meeting |
| `rem_` | Case reminder |
| `run_` | Run |
| `sch_` | Scheduled task |

Every object has `object`, `id` and `createdAt`, and `updatedAt` when it can change. Times are ISO 8601 in UTC. Slugs are filters, never part of a URL.
