The Interloom API provides programmatic access to every entity in the platform. All operations available in the UI are also available via the API.
Currently live: Two endpoints are callable today —
POST /cases(create a case) andGET /cases/{case_id}(fetch one) — both returning a Task object. Every other endpoint below is published in advance and not yet available.
Authentication
All requests require a bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEY
API keys are scoped to an organization. Contact your administrator to generate a key, or create one under Settings → API Keys if you have admin access.
Base URL
https://app.interloom.com/api/v1/public
If your organization is on a dedicated instance, swap the host for your instance domain:
https://YOUR_INSTANCE.interloom.com/api/v1/public
Response Format
Successful responses return the resource payload at the top level. Metadata is returned in response headers.
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Northwest Claims Intake",
"created_at": "2025-01-15T09:30:00Z"
}
X-Request-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
X-Response-Timestamp: 2025-01-15T09:30:00Z
List endpoints return JSON arrays. Pagination uses RFC 5988-style Link headers (similar to GitHub’s REST API), so pagination metadata is kept out of the response body.
[
...
]
X-Request-Id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
X-Response-Timestamp: 2025-01-15T09:30:00Z
Link: <https://api.interloom.com/v1/cases?first=50>; rel="first", <https://api.interloom.com/v1/cases?first=50&after=eyJpZCI6ImNhc2VfMDAwNTAifQ>; rel="next"
Paginated endpoints accept:
| Parameter | Type | Description |
|---|---|---|
first | integer | Number of items to return (default 50, max 100). |
after | string | Cursor token from the previous page’s Link header. |
If results fit on one page, the Link header may be omitted.
Spaces
| Method | Endpoint | Description |
|---|---|---|
| GET | /spaces | List spaces in the organization |
| POST | /spaces | Create a new space |
| GET | /spaces/{id} | Get a space by ID |
| PATCH | /spaces/{id} | Update a space |
| GET | /spaces/{id}/members | List space memberships |
| POST | /spaces/{id}/members | Add a member to a space |
Cases
| Method | Endpoint | Description |
|---|---|---|
| GET | /cases | List cases (filterable by space, phase, motion, priority) |
| POST | /cases | Create a new case |
| GET | /cases/{id} | Get a case by ID |
| PATCH | /cases/{id} | Update a case (title, description, priority, assignment) |
| POST | /cases/{id}/commence | Transition from intake to active |
| POST | /cases/{id}/resolve | Transition to resolved |
| POST | /cases/{id}/reopen | Reopen a resolved case (requires reason) |
| POST | /cases/{id}/close | Transition to closed (terminal) |
| PATCH | /cases/{id}/motion | Set motion (working, waiting, blocked, paused) |
| GET | /cases/{id}/subcases | List subcases of a case |
Filtering Cases
The GET /cases endpoint supports query parameters:
| Parameter | Type | Example |
|---|---|---|
space_id | uuid | Filter by space |
phase | enum | active, intake, resolved, closed |
motion | enum | working, waiting, blocked, paused, idle |
priority | enum | critical, high, medium, low |
assigned_actor_id | uuid | Filter by assigned actor |
procedure_id | uuid | Filter by procedure |
Stages
| Method | Endpoint | Description |
|---|---|---|
| GET | /cases/{id}/stages | List stages for a case |
| GET | /stages/{id} | Get a stage by ID |
| PATCH | /stages/{id} | Update a stage (assignment, motion) |
| POST | /stages/{id}/complete | Mark stage as completed |
| POST | /stages/{id}/skip | Mark stage as skipped |
| POST | /stages/{id}/spawn-subcase | Spawn a subcase from this stage |
Instructions
| Method | Endpoint | Description |
|---|---|---|
| GET | /stages/{id}/instructions | List instructions for a stage |
| POST | /stages/{id}/instructions | Add an instruction to a stage |
| PATCH | /instructions/{id} | Update an instruction |
| POST | /instructions/{id}/complete | Mark instruction as completed |
Procedures
| Method | Endpoint | Description |
|---|---|---|
| GET | /procedures | List procedures (filterable by space) |
| POST | /procedures | Create a new procedure |
| GET | /procedures/{id} | Get a procedure by ID |
| PATCH | /procedures/{id} | Update a procedure |
| GET | /procedures/{id}/stages | List procedure stage templates |
| POST | /procedures/{id}/stages | Add a stage template to a procedure |
| POST | /cases/{id}/apply-procedure | Apply a procedure to an existing case |
Actors
| Method | Endpoint | Description |
|---|---|---|
| GET | /actors | List actors in the organization |
| POST | /actors | Create an actor (human or AI) |
| GET | /actors/{id} | Get an actor by ID |
| PATCH | /actors/{id} | Update an actor |
AI Actor Configuration
When creating an AI actor, include the agent configuration:
{
"type": "ai",
"name": "Claims Triage Agent",
"model_id": "claude-sonnet-4-5-20250929",
"system_prompt": "You are a claims triage specialist...",
"capabilities": ["triage", "document-review", "correspondence"]
}
Threads
| Method | Endpoint | Description |
|---|---|---|
| GET | /threads | List threads (filterable by space, case) |
| POST | /threads | Create a standalone thread |
| GET | /threads/{id} | Get a thread by ID |
| GET | /threads/{id}/activities | List activities in a thread |
| POST | /threads/{id}/activities | Post an activity to a thread |
Activity Types
When posting an activity, specify the type:
{
"type": "comment",
"content": "Reviewed the police report — liability is clear.",
"visibility": "public"
}
Valid types: comment, status_change, stage_transition, tool_call, note_edit, system_event.
Artifacts
| Method | Endpoint | Description |
|---|---|---|
| GET | /artifacts | List artifacts (filterable by case, thread, space) |
| POST | /artifacts | Upload an artifact |
| GET | /artifacts/{id} | Get artifact metadata |
| GET | /artifacts/{id}/download | Download artifact content |
| DELETE | /artifacts/{id} | Remove an artifact |
DataTables
| Method | Endpoint | Description |
|---|---|---|
| GET | /datatables | List data tables |
| POST | /datatables | Create a data table |
| GET | /datatables/{id} | Get data table metadata and schema |
| GET | /datatables/{id}/rows | Query rows (supports filtering, sorting, pagination) |
EmailMessages
| Method | Endpoint | Description |
|---|---|---|
| GET | /emails | List email messages |
| POST | /emails | Create a draft email |
| GET | /emails/{id} | Get an email by ID |
| PATCH | /emails/{id} | Update a draft email |
| POST | /emails/{id}/send | Queue an email for sending |
Tools
| Method | Endpoint | Description |
|---|---|---|
| GET | /spaces/{id}/tools | List tools available in a space |
| POST | /spaces/{id}/tools | Register a tool in a space |
| POST | /tools/{id}/attach | Attach a tool to an actor |
Labels
| Method | Endpoint | Description |
|---|---|---|
| GET | /spaces/{id}/labels | List labels in a space |
| POST | /spaces/{id}/labels | Create a label |
| POST | /cases/{id}/labels | Apply a label to a case |
| DELETE | /cases/{id}/labels/{label_id} | Remove a label from a case |
Rate Limits
API requests are limited to 1,000 requests per minute per API key. Rate limit headers are included in all responses:
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 947
X-RateLimit-Reset: 1705312800
Errors
Validation errors return 422 with a detail array describing each problem — its location, a human-readable message, and a type code:
{
"detail": [
{
"loc": ["path", "case_id"],
"msg": "Invalid case ID",
"type": "value_error"
}
]
}
Need Help?
For API support, contact us at hello@interloom.com.