External API v1

Cases and documents

Cases group documents for one matter. Documents are uploaded through an upload session, then processed and redacted. Paths are relative to /api/v1.

Cases

GET/cases

Scope: cases:read · Paginated

List cases in your organization. Query: limit, cursor.

POST/cases

Scope: cases:write · Idempotency-Key required

Create a case.

FieldTypeRequiredDescription
namestringYesCase name.
descriptionstringNoFree-text description.

Returns 201 with the created case.

GET/cases/{case_id}

Scope: cases:read

Return one case. Returns 404 if the case is not in your organization.

PATCH/cases/{case_id}

Scope: cases:write · Idempotency-Key required

Update case metadata. Send only the fields you want to change.

FieldTypeDescription
statusstringCase status. Use POST /cases/{case_id}/actions to move through the workflow.
prioritystringCase priority.
dueDatestringDue date (ISO 8601).
descriptionstringFree-text description.

DELETE/cases/{case_id}

Scope: cases:write

Delete a case. The case is soft-deleted (its status changes) and the endpoint returns 204 No Content.

POST/cases/{case_id}/actions

Scope: cases:write · Idempotency-Key required

Run a workflow action on a case.

FieldTypeRequiredDescription
actionstringYesOne of start, submit, approve, reject, cancel.

The action moves the case to in_progress, in_review, approved, rejected, or cancelled. A transition that the current status does not allow returns 409 invalid_transition.

Documents in a case

GET/cases/{case_id}/documents

Scope: documents:read · Paginated

List the documents in a case. Query: limit, cursor.

POST/cases/{case_id}/upload-sessions

Scope: documents:write · Idempotency-Key required

Start an upload session for one or more files. The response lists each file in the session with its upload_url.

FieldTypeRequiredDescription
filesarrayNoFiles to upload. Each item has a name and size in bytes.

POST/upload-sessions/{upload_session_id}/complete

Scope: documents:write · Idempotency-Key required

Mark an upload session as complete after the files have been sent to their upload_url.

Documents

GET/documents/{document_id}

Scope: documents:read

Return one document. Returns 404 if it is not in your organization.

PATCH/documents/{document_id}

Scope: documents:write · Idempotency-Key required

Update document metadata.

FieldTypeDescription
fileNamestringDisplay name of the document.
descriptionstringFree-text description.

DELETE/documents/{document_id}

Scope: documents:write

Delete a document. Returns 204 No Content.

GET/documents/{document_id}/download-url

Scope: documents:read

Return a URL for downloading the original document file. Request a fresh URL for each download.