Coming soon The public API is not generally available yet. This reference is published in advance. Endpoints, payloads, and authentication may still change before release.

API Reference Coming soon

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: This reference is published ahead of general availability, and only a small set of endpoints is callable today. Browse the preview API reference to see what’s live, or point your agents at the OpenAPI spec.

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 → Personal Access Tokens 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 use cursor pagination and return results in a data envelope with pagination metadata:

{
  "data": [
    ...
  ],
  "next_cursor": "eyJjcmVhdGVkX2F0IjoiLi4uIiwiaWQiOiIuLi4ifQ",
  "has_more": true
}

Paginated endpoints accept:

ParameterTypeDescription
limitintegerMaximum number of items to return, capped at a server-enforced maximum.
cursorstringOpaque cursor from the previous response’s next_cursor.
sortstringField to sort by. Supported fields vary by endpoint; common fields include created_at and updated_at.
directionstringSort direction: asc or desc.
GET /cases?limit=50&cursor=eyJjcmVhdGVkX2F0IjoiLi4uIiwiaWQiOiIuLi4ifQ

When has_more is false, you have reached the last page. Ordering is stable: results are sorted by the selected sort field with id as a tie-breaker, and the cursor encodes both.

List endpoints that support sorting use sort for the field and direction for the order. The default is endpoint-specific; when unspecified, results are normally ordered by newest created item first.

GET /cases?sort=updated_at&direction=desc

Spaces

MethodEndpointDescription
GET/spacesList spaces in the organization
POST/spacesCreate a new space
GET/spaces/{id}Get a space by ID
PATCH/spaces/{id}Update a space
GET/spaces/{id}/membersList space memberships
POST/spaces/{id}/membersAdd a member to a space

Cases

MethodEndpointDescription
GET/casesList cases (filterable by space, phase, motion, priority)
POST/casesCreate a new case
GET/cases/{id}Get a case by ID
PATCH/cases/{id}Update a case (title, description, priority, assignment)
POST/cases/{id}/commenceTransition from intake to active
POST/cases/{id}/resolveTransition to resolved
POST/cases/{id}/reopenReopen a resolved case (requires reason)
POST/cases/{id}/closeTransition to closed (terminal)
PATCH/cases/{id}/motionSet motion (working, waiting, blocked, paused)
GET/cases/{id}/subcasesList subcases of a case

Filtering Cases

The GET /cases endpoint supports query parameters:

ParameterTypeExample
space_iduuidFilter by space
phaseenumactive, intake, resolved, closed
motionenumworking, waiting, blocked, paused, idle
priorityenumcritical, high, medium, low
assigned_actor_iduuidFilter by assigned actor
procedure_iduuidFilter by procedure

Stages

MethodEndpointDescription
GET/cases/{id}/stagesList stages for a case
GET/stages/{id}Get a stage by ID
PATCH/stages/{id}Update a stage (assignment, motion)
POST/stages/{id}/completeMark stage as completed
POST/stages/{id}/skipMark stage as skipped
POST/stages/{id}/spawn-subcaseSpawn a subcase from this stage

Instructions

MethodEndpointDescription
GET/stages/{id}/instructionsList instructions for a stage
POST/stages/{id}/instructionsAdd an instruction to a stage
PATCH/instructions/{id}Update an instruction
POST/instructions/{id}/completeMark instruction as completed

Procedures

MethodEndpointDescription
GET/proceduresList procedures (filterable by space)
POST/proceduresCreate a new procedure
GET/procedures/{id}Get a procedure by ID
PATCH/procedures/{id}Update a procedure
GET/procedures/{id}/stagesList procedure stage templates
POST/procedures/{id}/stagesAdd a stage template to a procedure
POST/cases/{id}/apply-procedureApply a procedure to an existing case

Actors

MethodEndpointDescription
GET/actorsList actors in the organization
POST/actorsCreate 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

MethodEndpointDescription
GET/threadsList threads (filterable by space, case)
POST/threadsCreate a standalone thread
GET/threads/{id}Get a thread by ID
GET/threads/{id}/activitiesList activities in a thread
POST/threads/{id}/activitiesPost 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

MethodEndpointDescription
GET/artifactsList artifacts (filterable by case, thread, space)
POST/artifactsUpload an artifact
GET/artifacts/{id}Get artifact metadata
GET/artifacts/{id}/downloadDownload artifact content
DELETE/artifacts/{id}Remove an artifact

DataTables

MethodEndpointDescription
GET/datatablesList data tables
POST/datatablesCreate a data table
GET/datatables/{id}Get data table metadata and schema
GET/datatables/{id}/rowsQuery rows (supports filtering, sorting, pagination)

EmailMessages

MethodEndpointDescription
GET/emailsList email messages
POST/emailsCreate a draft email
GET/emails/{id}Get an email by ID
PATCH/emails/{id}Update a draft email
POST/emails/{id}/sendQueue an email for sending

Tools

MethodEndpointDescription
GET/spaces/{id}/toolsList tools available in a space
POST/spaces/{id}/toolsRegister a tool in a space
POST/tools/{id}/attachAttach a tool to an actor

Labels

MethodEndpointDescription
GET/spaces/{id}/labelsList labels in a space
POST/spaces/{id}/labelsCreate a label
POST/cases/{id}/labelsApply 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

Errors use a structured envelope. code is a stable, machine-readable reason: use the HTTP status for status-class behavior and code for specific error handling.

{
  "error": {
    "code": "case_not_found",
    "message": "Case not found."
  }
}

Validation errors include a fields array describing each problem:

{
  "error": {
    "code": "validation_error",
    "message": "The request body is invalid.",
    "fields": [
      {
        "path": "parent_case_id",
        "message": "Cannot be set together with space_id.",
        "type": "mutually_exclusive"
      }
    ]
  }
}

Resources you cannot access return 404 with the resource-specific code (e.g. case_not_found), never 403. A missing resource and one outside your organization look the same.

Need Help?

For API support, contact us at hello@interloom.com.