API Reference
RESTful API for MatterFirst: legal practice management. Responses follow JSON:API-like conventions. ## Surfaces and credentials MatterFirst exposes seven HTTP surfaces; this document describes the first two in full and indexes the rest: | Surface | Base path | Credential | |---|---|---| | v1 REST API | `/api/v1` | `Authorization: Bearer mf_live_…` API key | | Referral partner API | `/api/v1/referral-contracts` | `Authorization: Bearer mf_ref_…` partner key | | Content API | `/api/content/v1` | `Authorization: Bearer mf_content_…` content key | | Marketing lead capture | `/api/marketing/leads` | none (anonymous form capture) | | Provider webhook receivers | `/api/webhooks/*` | each provider's own signature (Stripe, Xero, Resend, Google, Microsoft) | | MCP server | `/mcp` | Bearer token or OAuth, JSON-RPC 2.0, outside this document | | Signed document downloads | `/api/v1/documents/{id}/content` | single-use signed `token` query param, no API key | ## Error envelope Every error on the JSON surfaces is the same shape (see `ErrorResponse`): `{"errors": [{"status", "code", "title", "detail", "source"}]}`. A client branches on `code` (stable), shows `detail` (prose, may change), and never needs to parse `title`. ## Pagination and filtering List endpoints take `page_number` and `page_size` and answer with `meta` (`total`, `page`, `page_size`, `total_pages`) plus `links` (`self`, `first`, `last`, `prev`, `next`). Filtering is `filter[field]=value` against each resource's declared filterable fields; sorting is `sort=field` or `sort=-field` against its sortable fields; sparse fieldsets are `fields[type]=a,b`; related resources are embedded with `include=`. ## Outbound webhook signatures Deliveries to endpoints registered via `/api/v1/webhooks` carry `x-matterfirst-timestamp` and `x-matterfirst-signature: v1=<hex>`, where the signature is HMAC-SHA256 over `"v1.<timestamp>.<body>"`. Verify the signature, then reject timestamps outside your tolerance window (300 seconds is the reference tolerance) to stop replays. ## Links Interactive docs: `/api/v1/swaggerui`. This document: `/api/v1/openapi`. What your key can do: `GET /api/v1/capabilities`. ## Rate limits Rate limits: 300 requests per minute per API key and 1,000 per minute per organization, with a tighter 30-per-minute per-key limit on expensive POST endpoints (paths ending in /send, /run, /convert, /uploads, /test or /merge). Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers; exceeding a limit returns 429 with error code `rate_limited` and a Retry-After header. Safe retries: POST endpoints accept an optional `Idempotency-Key` header (max 255 chars). Retrying with the same key and body replays the original response byte-identically with `Idempotency-Replayed: true`; the same key with a different body is refused with 409 `idempotency_key_reuse`, and a key whose first request is still running answers 409 `idempotency_key_in_flight` with Retry-After. 5xx responses are never stored, so retrying them re-runs the request. Optimistic concurrency: GET and update responses for matters, invoices, tasks and leads carry a weak `ETag`. Sending it back as `If-Match` on PATCH/PUT makes the update conditional: a stale tag is refused with 412 `precondition_failed` before anything is written. Both headers are optional; omitting them keeps today's behaviour.
Authentication
All API endpoints require a Bearer token passed in the
Authorization
header. You can generate API keys from your organization settings.
Include the token as a Bearer authorization header on all requests.
Requests without valid authentication will return a
401
status code.
curl -H "Authorization: Bearer {YOUR_API_KEY}" \
https://app.matterfirst.com.au/api/v1/matters
Errors
The API returns standard HTTP status codes. Error responses include a JSON body
with an
errors
key describing what went wrong.
-
- Status
-
400 - Description
- Bad Request: the request was malformed
-
- Status
-
401 - Description
- Unauthorized: invalid or missing API key
-
- Status
-
403 - Description
- Forbidden: insufficient permissions
-
- Status
-
404 - Description
- Not Found: resource does not exist
-
- Status
-
422 - Description
- Unprocessable Entity: validation errors
-
- Status
-
429 - Description
- Rate Limited: too many requests
-
- Status
-
500 - Description
- Internal Server Error
{
"errors": {
"detail": "Resource not found"
}
}
Pagination
List endpoints support pagination via
page[number]
and
page[size]
query parameters.
-
- Name
-
total - Type
- integer
- Description
- Total number of records.
-
- Name
-
page - Type
- integer
- Description
- Current page number.
-
- Name
-
page_size - Type
- integer
- Description
- Number of records per page.
-
- Name
-
total_pages - Type
- integer
- Description
- Total number of pages.
{
"data": [],
"meta": {
"total": 100,
"page": 1,
"page_size": 20,
"total_pages": 5
}
}
Audit Log
List audit log entries
Parameters
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
resource_type - Type
- string
- In
- in query
- Description
-
- Name
-
action - Type
- string
- In
- in query
- Description
-
- Name
-
user_id - Type
- string (uuid)
- In
- in query
- Description
{
"data": [
{
"attributes": {
"action": "create",
"changed_fields": [
"string"
],
"inserted_at": "2026-01-01T00:00:00Z",
"metadata": {},
"resource_id": "00000000-0000-0000-0000-000000000000",
"resource_type": "string",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "audit-logs"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Get audit log entries for a specific resource
Parameters
-
- Name
-
resource_type - Type
- string
- required
- In
- in path
- Description
-
- Name
-
resource_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"action": "create",
"changed_fields": [
"string"
],
"inserted_at": "2026-01-01T00:00:00Z",
"metadata": {},
"resource_id": "00000000-0000-0000-0000-000000000000",
"resource_type": "string",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "audit-logs"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Automation Actions
List actions for an automation
Parameters
-
- Name
-
automation_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
}
],
"meta": {
"count": 0,
"timestamp": "2026-01-01T00:00:00Z"
}
}
Create an automation action
Parameters
-
- Name
-
automation_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"action_type": "string",
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
}
}
{
"data": {
"attributes": {
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get an automation action
Parameters
-
- Name
-
automation_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update an automation action
Parameters
-
- Name
-
automation_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"action_type": "string",
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
}
}
{
"data": {
"attributes": {
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update an automation action
Parameters
-
- Name
-
automation_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"action_type": "string",
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
}
}
{
"data": {
"attributes": {
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-actions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete an automation action
Parameters
-
- Name
-
automation_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/automations/{automation_id}/actions/{id}
Automations
List automations
Parameters
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"actions": [
{
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
}
],
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
}
],
"meta": {
"count": 0,
"timestamp": "2026-01-01T00:00:00Z"
}
}
Create an automation
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
}
}
{
"data": {
"attributes": {
"actions": [
{
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
}
],
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
List an automation's execution logs
The run history for one automation, newest first, paginated. Serves the outcome of each run (status, timing, error message), never the raw `trigger_data` or per-action results, which are free-form maps that can carry anything the trigger passed.
Parameters
-
- Name
-
automation_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"automation_id": "00000000-0000-0000-0000-000000000000",
"completed_at": "2026-01-01T00:00:00Z",
"duration_ms": 0,
"error_message": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"started_at": "2026-01-01T00:00:00Z",
"status": "running",
"trigger_type": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automation-logs"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Get an automation
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"actions": [
{
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
}
],
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update an automation
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
}
}
{
"data": {
"attributes": {
"actions": [
{
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
}
],
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update an automation
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
}
}
{
"data": {
"attributes": {
"actions": [
{
"action_type": "string",
"automation_id": "00000000-0000-0000-0000-000000000000",
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"configuration": {},
"continue_on_error": false,
"delay_seconds": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
}
],
"conditions": [
{
"field": "string",
"operator": "equals",
"type": "field",
"value": {}
}
],
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"trigger_config": {},
"trigger_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "automations"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete an automation
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/automations/{id}
Manually trigger an automation
Enqueues a run of an active, manual-trigger automation, optionally against a matter (`?matter_id=`). Refused (409) for an inactive automation or one whose trigger type is not `manual`. The run is asynchronous: poll `GET /automations/:automation_id/logs` for its outcome.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
matter_id - Type
- string (uuid)
- In
- in query
- Description
{
"meta": {
"status": "enqueued"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Calendar Events
List calendar events
Parameters
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, created_by.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
-
- Name
-
start_date - Type
- string (date)
- In
- in query
- Description
- Start of an overlap window (YYYY-MM-DD, inclusive), resolved in the firm's timezone. Returns every event still running on or after this date, including one that began before it.
-
- Name
-
end_date - Type
- string (date)
- In
- in query
- Description
- End of an overlap window (YYYY-MM-DD, inclusive), resolved in the firm's timezone. Returns every event that begins on or before the end of this date, including one that runs past it.
{
"data": [
{
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a calendar event
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
}
}
{
"data": {
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a calendar event
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, created_by.
{
"data": {
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a calendar event
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
}
}
{
"data": {
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a calendar event
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
}
}
{
"data": {
"attributes": {
"attendee_ids": [
"00000000-0000-0000-0000-000000000000"
],
"color": "string",
"contact_ids": [
"00000000-0000-0000-0000-000000000000"
],
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"end_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"location": "string",
"matter_id": "00000000-0000-0000-0000-000000000000",
"start_at": "2026-01-01T00:00:00Z",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "calendar-events"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a calendar event
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/calendar-events/{id}
Contact Types
List contact types
Parameters
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a contact type
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"is_active": false,
"name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
}
}
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a contact type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a contact type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"is_active": false,
"name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
}
}
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a contact type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"is_active": false,
"name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
}
}
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Deactivate a contact type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contact-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Contacts
List contacts
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
- Field filters, e.g. `filter[email]=*@acme.com`. Also supports `filter[lead_id]=<uuid>` to return only the contacts linked to that lead.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"avatar_url": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"custom_fields": {},
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_archived": false,
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"position": "string",
"postcode": "string",
"preferred_name": "string",
"source": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a contact
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"postcode": "string",
"preferred_name": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
}
}
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"avatar_url": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"custom_fields": {},
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_archived": false,
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"position": "string",
"postcode": "string",
"preferred_name": "string",
"source": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a contact
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"avatar_url": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"custom_fields": {},
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_archived": false,
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"position": "string",
"postcode": "string",
"preferred_name": "string",
"source": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a contact
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"postcode": "string",
"preferred_name": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
}
}
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"avatar_url": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"custom_fields": {},
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_archived": false,
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"position": "string",
"postcode": "string",
"preferred_name": "string",
"source": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a contact
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"postcode": "string",
"preferred_name": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
}
}
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"avatar_url": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"custom_fields": {},
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_archived": false,
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"position": "string",
"postcode": "string",
"preferred_name": "string",
"source": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a contact
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Merge two contacts
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
- Primary contact ID
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"field_selections": {},
"secondary_id": "00000000-0000-0000-0000-000000000000"
}
}
}
{
"data": {
"attributes": {
"abn": "string",
"acn": "string",
"address_line_1": "string",
"address_line_2": "string",
"avatar_url": "string",
"company_name": "string",
"contact_type_id": "00000000-0000-0000-0000-000000000000",
"country": "string",
"custom_fields": {},
"date_of_birth": "2026-01-01",
"email": "string",
"first_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_archived": false,
"is_company": false,
"last_name": "string",
"mobile": "string",
"notes": "string",
"phone": "string",
"position": "string",
"postcode": "string",
"preferred_name": "string",
"source": "string",
"state": "string",
"suburb": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "contacts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Disbursements
List disbursements
Parameters
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, user, invoice.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"receipt_document_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a disbursement
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"receipt_document_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a disbursement
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, user, invoice.
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"receipt_document_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a disbursement
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"receipt_document_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a disbursement
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"receipt_document_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "disbursements"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a disbursement
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/disbursements/{id}
Discovery
API version, scopes, limits and enum catalogs
{}
List connected integrations
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"capabilities": [
"string"
],
"connected_by_id": "00000000-0000-0000-0000-000000000000",
"display_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"mailbox_email": "string",
"provider": "google",
"service": "calendar",
"status": "active",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "integrations"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
List active lead pipelines
{
"data": [
{
"attributes": {
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_default": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-pipelines"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
List a pipeline's stages, in position order
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"color": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_terminal": false,
"name": "string",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"step_type": "sequential",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-pipeline-stages"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
The API key's owner and the key's own delegation
{
"data": {
"attributes": {
"email": "string",
"full_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"role": "owner",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "users"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Get the caller's organization
{
"data": {
"attributes": {
"currency": "string",
"date_format": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"name": "string",
"timezone": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "organizations"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
List teams
Parameters
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"archived_at": "2026-01-01T00:00:00Z",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_user_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "teams"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Get a team
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"archived_at": "2026-01-01T00:00:00Z",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_user_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "teams"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
List users
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"email": "string",
"full_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"role": "owner",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "users"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Get a user
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
{
"data": {
"attributes": {
"email": "string",
"full_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"role": "owner",
"title": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "users"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Document Request Templates
List document request templates
Parameters
-
- Name
-
matter_type_id - Type
- string (uuid)
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"is_active": false,
"items": [
{
"name": "string"
}
],
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
}
],
"meta": {
"count": 0,
"timestamp": "2026-01-01T00:00:00Z"
}
}
Create a document request template
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"instructions": "string",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
}
}
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"is_active": false,
"items": [
{
"name": "string"
}
],
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a document request template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"is_active": false,
"items": [
{
"name": "string"
}
],
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a document request template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"instructions": "string",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
}
}
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"is_active": false,
"items": [
{
"name": "string"
}
],
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a document request template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"instructions": "string",
"is_active": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
}
}
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"is_active": false,
"items": [
{
"name": "string"
}
],
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"requested_items": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-request-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a document request template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Document Requests
List secure document requests
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"contact_id": "00000000-0000-0000-0000-000000000000",
"email_id": "00000000-0000-0000-0000-000000000000",
"expires_at": "2026-01-01T00:00:00Z",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"items": [
{
"description": "string",
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"received_at": "2026-01-01T00:00:00Z",
"status": "string"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"recipient_email": "string",
"recipient_name": "string",
"requested_by_id": "00000000-0000-0000-0000-000000000000",
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z",
"uploads_count": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-requests"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create and send a secure document request
A document request's whole lifecycle is create → close (W2.6). Creating one mints a live public upload link and emails it; closing revokes the link. There is deliberately no reopen and no delete: the link that was sent is evidence of what the firm asked for, and a closed request stays closed. Send a new request instead.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"expires_at": "2026-01-01T00:00:00Z",
"folder_id": "00000000-0000-0000-0000-000000000000",
"instructions": "string",
"items": [
{
"description": "string",
"name": "string"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"recipient_email": "string",
"recipient_name": "string",
"subject": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-requests"
}
}
{
"data": {
"attributes": {
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"contact_id": "00000000-0000-0000-0000-000000000000",
"email_id": "00000000-0000-0000-0000-000000000000",
"expires_at": "2026-01-01T00:00:00Z",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"items": [
{
"description": "string",
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"received_at": "2026-01-01T00:00:00Z",
"status": "string"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"recipient_email": "string",
"recipient_name": "string",
"requested_by_id": "00000000-0000-0000-0000-000000000000",
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z",
"uploads_count": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-requests"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a secure document request
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
{
"data": {
"attributes": {
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"contact_id": "00000000-0000-0000-0000-000000000000",
"email_id": "00000000-0000-0000-0000-000000000000",
"expires_at": "2026-01-01T00:00:00Z",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"items": [
{
"description": "string",
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"received_at": "2026-01-01T00:00:00Z",
"status": "string"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"recipient_email": "string",
"recipient_name": "string",
"requested_by_id": "00000000-0000-0000-0000-000000000000",
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z",
"uploads_count": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-requests"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Close a secure document request upload link
Revokes the request's live public upload link (COMP-01). This is the terminal state: a closed request cannot be reopened, because the revoked link must never come back to life, so further documents need a new request.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"contact_id": "00000000-0000-0000-0000-000000000000",
"email_id": "00000000-0000-0000-0000-000000000000",
"expires_at": "2026-01-01T00:00:00Z",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"instructions": "string",
"items": [
{
"description": "string",
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"position": 0,
"received_at": "2026-01-01T00:00:00Z",
"status": "string"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"recipient_email": "string",
"recipient_name": "string",
"requested_by_id": "00000000-0000-0000-0000-000000000000",
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subject": "string",
"updated_at": "2026-01-01T00:00:00Z",
"uploads_count": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "document-requests"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Documents
List documents
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, contact, folder.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Register an uploaded document
Second half of the two-step upload flow: registers the document row for a file already PUT to the presigned URL from `POST /documents/uploads`. The upload is verified to exist in storage before the document is created.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"upload_key": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
}
}
{
"data": {
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Request a presigned upload URL for a document file
First half of the two-step upload flow. Returns a short-lived presigned URL; PUT the raw file bytes to it (with the returned headers), then register the document with `POST /documents`, passing the returned `upload_key`.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"byte_size": 0,
"content_type": "string",
"filename": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
}
}
{
"data": {
"attributes": {
"expires_in": 0,
"headers": {},
"method": "PUT",
"upload_key": "string",
"upload_url": "string"
},
"type": "document-uploads"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a document
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, contact, folder.
{
"data": {
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a document
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
}
}
{
"data": {
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a document
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
}
}
{
"data": {
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a document
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/documents/{id}
Fetch a document's file bytes via a signed link
Serves the raw file for a document to a caller holding a valid signed token minted by `POST /documents/:id/download`. The token authorises this single document for a short window; no API key is required (and none is accepted) on this endpoint: the token is the whole authorization, exactly like a presigned S3 URL.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
token - Type
- string
- required
- In
- in query
- Description
curl -X GET \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/documents/{id}/content
Get a download URL for a document
Returns a short-lived, signed URL for the document's file. For `:s3` storage this is a presigned, expiring S3 GET URL; for `:local` storage it is a signed link to `GET /documents/:id/content` that expires in 900 seconds. Either way the URL carries its own authorization and stops working once it expires. It is not a permanent, public path.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"url": "string"
}
Get version history for a document
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
}
],
"meta": {
"count": 0,
"timestamp": "2026-01-01T00:00:00Z"
}
}
Upload a new version of a document
Registers a file already PUT to a presigned URL (from `POST /documents/uploads`) as the next version of this document, the same two-step flow as document creation. Only the current version accepts a new one; a superseded version is refused with 409. The existing head is marked no longer current and the new version becomes the head, linked to it.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"content_type": "string",
"description": "string",
"filename": "string",
"upload_key": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
}
}
{
"data": {
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Restore a previous version of a document
Restores `version_id` by creating a NEW head version carrying its file, so the chain only ever grows forward (DOC-11): the version history of a legal file is evidence and is never rewritten. Restoring the version that is already current is refused with 409.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
version_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"ai_analyzed_at": "2026-01-01T00:00:00Z",
"ai_classification": "string",
"ai_summary": "string",
"archived_at": "2026-01-01T00:00:00Z",
"archived_by_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"content_type": "string",
"description": "string",
"file_size": 0,
"filename": "string",
"folder_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_current": false,
"is_portal_visible": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"retention_expires_at": "2026-01-01T00:00:00Z",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"uploaded_by_id": "00000000-0000-0000-0000-000000000000",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "documents"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Email Templates
List email templates
Parameters
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"system_key": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create an email template
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
}
}
{
"data": {
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"system_key": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get an email template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"system_key": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update an email template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
}
}
{
"data": {
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"system_key": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update an email template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
}
}
{
"data": {
"attributes": {
"body_html": "string",
"body_text": "string",
"category": "string",
"editor_design": {},
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"system_key": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete an email template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Emails
List email drafts
Parameters
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_edited_by_id": "00000000-0000-0000-0000-000000000000",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"source": "manual",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create an email draft
`sender_integration_id` is an *explicit* mailbox pick and is optional. A draft that leaves it null is still sendable: the sender is resolved at send time by `MatterFirst.Integrations.Senders`, which tries the explicit pick, then the acting user's own connected mailbox, then the matter's or lead's responsible user, then the firm's default mailbox. Sendability therefore cannot be decided when the draft is created (a mailbox can be connected or disconnected in between), so this endpoint does not refuse a draft for want of one. List the pickable mailboxes with `GET /api/v1/integrations?filter[capability]=send_email`.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
}
}
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_edited_by_id": "00000000-0000-0000-0000-000000000000",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"source": "manual",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get an email draft
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_edited_by_id": "00000000-0000-0000-0000-000000000000",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"source": "manual",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update an email draft
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
}
}
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_edited_by_id": "00000000-0000-0000-0000-000000000000",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"source": "manual",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update an email draft
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
}
}
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"last_edited_by_id": "00000000-0000-0000-0000-000000000000",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"reply_to_email_id": "00000000-0000-0000-0000-000000000000",
"reply_to_inbound_email_id": "00000000-0000-0000-0000-000000000000",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"source": "manual",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"use_branding": false
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "email-drafts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Discard an email draft
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/email-drafts/{id}
Send an email draft
Runs the draft through the full outbound pipeline (template render, merge tags, branding, sender resolution) and deletes it. Returns the created email. A draft already sent or discarded returns 404. Sender resolution happens here rather than at create time: the draft's `sender_integration_id`, if set, is the explicit pick, and otherwise the chain falls through to the acting user's mailbox, the matter's or lead's responsible user, and the firm default. When no step of that chain yields a send-ready mailbox the send is refused with 422 rather than delivered from an unintended address.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"body_text": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"from_address": "string",
"from_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"opened_at": "2026-01-01T00:00:00Z",
"reply_to": "string",
"scheduled_at": "2026-01-01T00:00:00Z",
"sent_at": "2026-01-01T00:00:00Z",
"sent_by_id": "00000000-0000-0000-0000-000000000000",
"source": "string",
"status": "queued",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "emails"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
List emails
Parameters
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"body_text": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"from_address": "string",
"from_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"opened_at": "2026-01-01T00:00:00Z",
"reply_to": "string",
"scheduled_at": "2026-01-01T00:00:00Z",
"sent_at": "2026-01-01T00:00:00Z",
"sent_by_id": "00000000-0000-0000-0000-000000000000",
"source": "string",
"status": "queued",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "emails"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Schedule an email for future delivery
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"bcc": [
"string"
],
"bcc_addresses": [
"string"
],
"body_html": "string",
"body_text": "string",
"cc": [
"string"
],
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"from": "string",
"from_address": "string",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"scheduled_at": "2026-01-01T00:00:00Z",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to": [
"string"
],
"to_addresses": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "emails"
}
}
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"body_text": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"from_address": "string",
"from_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"opened_at": "2026-01-01T00:00:00Z",
"reply_to": "string",
"scheduled_at": "2026-01-01T00:00:00Z",
"sent_at": "2026-01-01T00:00:00Z",
"sent_by_id": "00000000-0000-0000-0000-000000000000",
"source": "string",
"status": "queued",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "emails"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Send an email
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"bcc": [
"string"
],
"bcc_addresses": [
"string"
],
"body_html": "string",
"body_text": "string",
"cc": [
"string"
],
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"from": "string",
"from_address": "string",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"scheduled_at": "2026-01-01T00:00:00Z",
"sender_address": "string",
"sender_integration_id": "00000000-0000-0000-0000-000000000000",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to": [
"string"
],
"to_addresses": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "emails"
}
}
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"body_text": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"from_address": "string",
"from_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"opened_at": "2026-01-01T00:00:00Z",
"reply_to": "string",
"scheduled_at": "2026-01-01T00:00:00Z",
"sent_at": "2026-01-01T00:00:00Z",
"sent_by_id": "00000000-0000-0000-0000-000000000000",
"source": "string",
"status": "queued",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "emails"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get an email
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"bcc_addresses": [
"string"
],
"body_html": "string",
"body_text": "string",
"cc_addresses": [
"string"
],
"contact_id": "00000000-0000-0000-0000-000000000000",
"from_address": "string",
"from_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"opened_at": "2026-01-01T00:00:00Z",
"reply_to": "string",
"scheduled_at": "2026-01-01T00:00:00Z",
"sent_at": "2026-01-01T00:00:00Z",
"sent_by_id": "00000000-0000-0000-0000-000000000000",
"source": "string",
"status": "queued",
"subject": "string",
"template_id": "00000000-0000-0000-0000-000000000000",
"to_addresses": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "emails"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Field Definitions
List field definitions
Parameters
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_readonly": false,
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a field definition
Parameters
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
}
}
{
"data": {
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_readonly": false,
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a field definition
Parameters
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_readonly": false,
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a field definition
Parameters
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
}
}
{
"data": {
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_readonly": false,
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a field definition
Parameters
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
}
}
{
"data": {
"attributes": {
"code": "string",
"default_value": "string",
"description": "string",
"field_group_id": "00000000-0000-0000-0000-000000000000",
"field_type": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_readonly": false,
"is_required": false,
"name": "string",
"options": [
{}
],
"placeholder": "string",
"position": 0,
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"validation_rules": {}
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-definitions"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a field definition
Parameters
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Field Groups
List field groups
Parameters
-
- Name
-
matter_type_id - Type
- string (uuid)
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a field group
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"is_active": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
}
}
{
"data": {
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a field group
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a field group
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"is_active": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
}
}
{
"data": {
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a field group
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"is_active": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
}
}
{
"data": {
"attributes": {
"code": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_system": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-groups"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a field group
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Field Values
Get field values for a matter + field group
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"field_definition_id": "00000000-0000-0000-0000-000000000000",
"field_record_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"value_boolean": false,
"value_contact_id": "00000000-0000-0000-0000-000000000000",
"value_date": "2026-01-01",
"value_datetime": "2026-01-01T00:00:00Z",
"value_json": {},
"value_number": 0.0,
"value_text": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-values"
}
],
"meta": {
"record_id": "00000000-0000-0000-0000-000000000000"
}
}
Set field values for a matter + field group
Idempotent upsert of the whole value set: creates the field record when none exists, then applies each `{field_definition_id => value}` entry. All-or-nothing: an unknown or cross-group definition id fails the entire request with nothing written. Responds with the same shape as the index.
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
field_group_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"values": {}
},
"type": "field-values"
}
}
{
"data": [
{
"attributes": {
"field_definition_id": "00000000-0000-0000-0000-000000000000",
"field_record_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"value_boolean": false,
"value_contact_id": "00000000-0000-0000-0000-000000000000",
"value_date": "2026-01-01",
"value_datetime": "2026-01-01T00:00:00Z",
"value_json": {},
"value_number": 0.0,
"value_text": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "field-values"
}
],
"meta": {
"record_id": "00000000-0000-0000-0000-000000000000"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Folders
List folders for a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_system": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a folder
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
}
}
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_system": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a folder
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_system": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a folder
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
}
}
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_system": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a folder
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
}
}
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_system": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "folders"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a folder
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Invoices
List invoices
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, contact.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create an invoice
Supports the optional Idempotency-Key request header (max 255 chars): retrying the POST with the same key and body replays the original response instead of creating a second invoice.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"payment_terms": "string",
"tax_rate": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
}
}
{
"data": {
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Preview what an invoice for a matter would bill
Computes what "include unbilled work" would sweep onto a draft for the matter: counts, cents and the entries held back for having no price, without creating anything. The same predicate that refuses an issue at send time, so the preview and the refusal cannot disagree.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"matter_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
}
}
{
"data": {
"attributes": {
"disbursement_cents": 0,
"disbursement_count": 0,
"empty": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"time_entry_cents": 0,
"time_entry_count": 0,
"total_cents": 0,
"unpriced_count": 0
},
"type": "invoice-previews"
}
}
Get an invoice
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, contact.
{
"data": {
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update an invoice
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this invoice. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"payment_terms": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
}
}
{
"data": {
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update an invoice
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this invoice. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"payment_terms": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
}
}
{
"data": {
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a draft invoice
Only a draft with no payments recorded against it can be deleted. An issued invoice is a document the client has: void it instead.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Issue an invoice without emailing it
Marks a draft as issued (status "sent") with no email: the explicit no-inbox path; the PDF can be delivered manually. POST /invoices/:id/send is the emailed variant of the same transition.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Send an invoice
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Void an invoice
Withdraws a draft, sent or viewed invoice that has no money recorded against it, releasing the work it billed back into unbilled WIP. A part-paid invoice cannot be voided: issue a credit note instead.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"accounting_provider": "string",
"accounting_sync_status": "string",
"balance_cents": 0,
"contact_id": "00000000-0000-0000-0000-000000000000",
"currency": "string",
"delivered_at": "2026-01-01T00:00:00Z",
"delivery_status": "string",
"due_date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_number": "string",
"invoice_type": "string",
"issue_date": "2026-01-01",
"issued_at": "2026-01-01T00:00:00Z",
"last_sync_error": "string",
"line_items": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"paid_at": "2026-01-01T00:00:00Z",
"paid_cents": 0,
"payment_mode": "string",
"payment_provider": "string",
"payment_status": "string",
"payment_terms": "string",
"payments": [
{
"amount_cents": 0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"method": "string",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
}
],
"sent_at": "2026-01-01T00:00:00Z",
"status": "string",
"subtotal_cents": 0,
"tax_cents": 0,
"total_cents": 0,
"updated_at": "2026-01-01T00:00:00Z",
"voided_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoices"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
List an invoice's line items
Parameters
-
- Name
-
invoice_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Add a line item to a draft invoice
Parameters
-
- Name
-
invoice_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a line item on a draft invoice
Parameters
-
- Name
-
invoice_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a line item on a draft invoice
Parameters
-
- Name
-
invoice_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"line_type": "fee",
"position": 0,
"quantity": "string",
"tax_rate": "string",
"taxable": false,
"unit_price_cents": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "invoice-line-items"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Remove a line item from a draft invoice
Parameters
-
- Name
-
invoice_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
List an invoice's payments
Parameters
-
- Name
-
invoice_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"amount_cents": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"method": "bank_transfer",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string",
"status": "pending",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "payments"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Record a payment against an issued invoice
Records money received. Refuses drafts and voided invoices (409). A payment larger than the balance is accepted: the invoice settles for its own total and the surplus is held as an explicit overpayment credit for the client.
Parameters
-
- Name
-
invoice_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"amount_cents": 0,
"method": "bank_transfer",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "payments"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"method": "bank_transfer",
"paid_at": "2026-01-01T00:00:00Z",
"reference": "string",
"status": "pending",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "payments"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Key Date Types
List key date types
Parameters
-
- Name
-
matter_type_id - Type
- string (uuid)
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a key date type
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
}
}
{
"data": {
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a key date type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a key date type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
}
}
{
"data": {
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a key date type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
}
}
{
"data": {
"attributes": {
"auto_complete": false,
"code": "string",
"color": "string",
"default_reminder_days": 0,
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_milestone": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"name": "string",
"position": 0,
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-date-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a key date type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Key Dates
List key dates for a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"source": "string",
"source_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"time": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a key date
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"date": "2026-01-01",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"status": "string",
"time": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
}
}
{
"data": {
"attributes": {
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"source": "string",
"source_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"time": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a key date
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"source": "string",
"source_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"time": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a key date
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"date": "2026-01-01",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"status": "string",
"time": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
}
}
{
"data": {
"attributes": {
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"source": "string",
"source_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"time": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a key date
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"date": "2026-01-01",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"status": "string",
"time": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
}
}
{
"data": {
"attributes": {
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"date": "2026-01-01",
"inserted_at": "2026-01-01T00:00:00Z",
"is_all_day": false,
"key_date_type_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"notes": "string",
"source": "string",
"source_id": "00000000-0000-0000-0000-000000000000",
"status": "string",
"time": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "key-dates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a key date
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/key-dates/{id}
Leads
List leads
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: pipeline, pipeline_stage, matter_type, owner, conversion_matter.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a lead
Supports the optional Idempotency-Key request header (max 255 chars): retrying the POST with the same key and body replays the original response instead of creating a second lead.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"owner_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"summary": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
}
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a lead
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: pipeline, pipeline_stage, matter_type, owner, conversion_matter.
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a lead
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this lead. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"owner_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"summary": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
}
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a lead
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this lead. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"owner_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"summary": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
}
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a lead
Deletes the lead and the work it alone justified: its notes, its tasks and its unsent email drafts all go with it. Correspondence that actually happened (sent and received emails) and any referral survive, detached. A lead that has been converted to a matter is the provenance of that matter and cannot be deleted: archive it instead.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Archive a lead
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Mark a lead as lost
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- Description
{
"data": {
"attributes": {
"reason": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
}
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Add a contact to a lead
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"is_primary": false,
"role": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-contacts"
}
}
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"role": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-contacts"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Convert a lead to a matter
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"team_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
}
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"conversion": {
"matter_id": "00000000-0000-0000-0000-000000000000",
"matter_name": "string"
}
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Defer a lead for later follow-up
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"next_follow_up_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
}
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Move a lead to a different pipeline stage
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"stage_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
}
}
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Mark a lead as qualified
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Reopen a lost, deferred or archived lead
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"consultation_scheduled_at": "2026-01-01T00:00:00Z",
"conversion_matter_id": "00000000-0000-0000-0000-000000000000",
"converted_at": "2026-01-01T00:00:00Z",
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"jurisdiction_country": "string",
"jurisdiction_region": "string",
"last_contacted_at": "2026-01-01T00:00:00Z",
"lost_at": "2026-01-01T00:00:00Z",
"lost_reason": "string",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"next_follow_up_at": "2026-01-01T00:00:00Z",
"owner_id": "00000000-0000-0000-0000-000000000000",
"pipeline_id": "00000000-0000-0000-0000-000000000000",
"pipeline_stage_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"qualified_at": "2026-01-01T00:00:00Z",
"referral_source": "string",
"source": "portal",
"source_detail": "string",
"status": "open",
"summary": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "leads"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
List notes on a lead
Parameters
-
- Name
-
lead_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"pinned": false,
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000",
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
}
],
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Create a note on a lead
Parameters
-
- Name
-
lead_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"content": "string",
"pinned": false,
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
}
}
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"pinned": false,
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000",
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a note on a lead
Parameters
-
- Name
-
lead_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"pinned": false,
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000",
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a note on a lead
Parameters
-
- Name
-
lead_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"content": "string",
"pinned": false,
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
}
}
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"pinned": false,
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000",
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a note on a lead
Parameters
-
- Name
-
lead_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"content": "string",
"pinned": false,
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
}
}
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"lead_id": "00000000-0000-0000-0000-000000000000",
"pinned": false,
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000",
"visibility": "internal"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "lead-notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a note on a lead
Parameters
-
- Name
-
lead_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/leads/{lead_id}/notes/{id}
Matter Roles
List roles for a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Add a role to a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
}
}
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a matter role
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a matter role
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
}
}
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a matter role
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
}
}
{
"data": {
"attributes": {
"contact_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"notes": "string",
"role_name": "string",
"source": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-roles"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Remove a role from a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/matters/{matter_id}/roles/{id}
Matter Types
List matter types
Parameters
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"name": "string",
"reference_format": "string",
"required_contact_types": [
"string"
],
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a matter type
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"is_active": false,
"name": "string",
"reference_format": "string",
"settings": {},
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
}
}
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"name": "string",
"reference_format": "string",
"required_contact_types": [
"string"
],
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a matter type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"name": "string",
"reference_format": "string",
"required_contact_types": [
"string"
],
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a matter type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"is_active": false,
"name": "string",
"reference_format": "string",
"settings": {},
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
}
}
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"name": "string",
"reference_format": "string",
"required_contact_types": [
"string"
],
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a matter type
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"is_active": false,
"name": "string",
"reference_format": "string",
"settings": {},
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
}
}
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"name": "string",
"reference_format": "string",
"required_contact_types": [
"string"
],
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Deactivate a matter type
The declared end of a matter type's lifecycle (W2.6). Matter types have no delete on purpose, because matters keep referencing their type forever, so an unused type is deactivated instead: it keeps its history and stops being offered for new matters. Mirrors `POST /contact-types/:id/deactivate`.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"code": "string",
"color": "string",
"default_tags": [
"string"
],
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"name": "string",
"reference_format": "string",
"required_contact_types": [
"string"
],
"settings": {},
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matter-types"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Matter notes
List notes on a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, user.
{
"data": [
{
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_pinned": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a note on a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"content": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
}
}
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_pinned": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a note
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, user.
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_pinned": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a note
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"content": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
}
}
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_pinned": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a note
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"content": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
}
}
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_pinned": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a note
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/matters/{matter_id}/notes/{id}
Pin a note
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_pinned": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Unpin a note
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"content": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_pinned": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "notes"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Matters
List matters
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter_type, assigned_to, team.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"archived_at": "2026-01-01T00:00:00Z",
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"cancelled_at": "2026-01-01T00:00:00Z",
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"conflict_checks": [
{
"acknowledged_at": "2026-01-01T00:00:00Z",
"acknowledged_by": "00000000-0000-0000-0000-000000000000",
"check_type": "new_matter",
"clearance_reason": "string",
"cleared_at": "2026-01-01T00:00:00Z",
"cleared_by_user_id": "00000000-0000-0000-0000-000000000000",
"conflict_type": "same_party",
"conflicting_matter_id": "00000000-0000-0000-0000-000000000000",
"conflicting_matter_name": "string",
"conflicting_matter_reference": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"contact_name": "string",
"disclosure_redacted": false,
"highest_score": 0.0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"rechecked_at": "2026-01-01T00:00:00Z",
"status": "pending",
"subject_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
}
],
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"current_step_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_blocked": false,
"jurisdiction_country": "AU",
"jurisdiction_country_label": "string",
"jurisdiction_region": "NSW",
"jurisdiction_region_label": "string",
"lock_version": 0,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"opened_at": "2026-01-01T00:00:00Z",
"priority": "low",
"reference": "string",
"status": "open",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a matter
Supports the optional Idempotency-Key request header (max 255 chars): retrying the POST with the same key and body replays the original response instead of creating a second matter.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"jurisdiction_country": "AU",
"jurisdiction_region": "NSW",
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"priority": "low",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
}
}
{
"data": {
"attributes": {
"archived_at": "2026-01-01T00:00:00Z",
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"cancelled_at": "2026-01-01T00:00:00Z",
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"conflict_checks": [
{
"acknowledged_at": "2026-01-01T00:00:00Z",
"acknowledged_by": "00000000-0000-0000-0000-000000000000",
"check_type": "new_matter",
"clearance_reason": "string",
"cleared_at": "2026-01-01T00:00:00Z",
"cleared_by_user_id": "00000000-0000-0000-0000-000000000000",
"conflict_type": "same_party",
"conflicting_matter_id": "00000000-0000-0000-0000-000000000000",
"conflicting_matter_name": "string",
"conflicting_matter_reference": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"contact_name": "string",
"disclosure_redacted": false,
"highest_score": 0.0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"rechecked_at": "2026-01-01T00:00:00Z",
"status": "pending",
"subject_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
}
],
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"current_step_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_blocked": false,
"jurisdiction_country": "AU",
"jurisdiction_country_label": "string",
"jurisdiction_region": "NSW",
"jurisdiction_region_label": "string",
"lock_version": 0,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"opened_at": "2026-01-01T00:00:00Z",
"priority": "low",
"reference": "string",
"status": "open",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a matter
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter_type, assigned_to, team.
{
"data": {
"attributes": {
"archived_at": "2026-01-01T00:00:00Z",
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"cancelled_at": "2026-01-01T00:00:00Z",
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"conflict_checks": [
{
"acknowledged_at": "2026-01-01T00:00:00Z",
"acknowledged_by": "00000000-0000-0000-0000-000000000000",
"check_type": "new_matter",
"clearance_reason": "string",
"cleared_at": "2026-01-01T00:00:00Z",
"cleared_by_user_id": "00000000-0000-0000-0000-000000000000",
"conflict_type": "same_party",
"conflicting_matter_id": "00000000-0000-0000-0000-000000000000",
"conflicting_matter_name": "string",
"conflicting_matter_reference": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"contact_name": "string",
"disclosure_redacted": false,
"highest_score": 0.0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"rechecked_at": "2026-01-01T00:00:00Z",
"status": "pending",
"subject_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
}
],
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"current_step_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_blocked": false,
"jurisdiction_country": "AU",
"jurisdiction_country_label": "string",
"jurisdiction_region": "NSW",
"jurisdiction_region_label": "string",
"lock_version": 0,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"opened_at": "2026-01-01T00:00:00Z",
"priority": "low",
"reference": "string",
"status": "open",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a matter
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this matter. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"jurisdiction_country": "AU",
"jurisdiction_region": "NSW",
"metadata": {},
"name": "string",
"priority": "low",
"status": "open",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
}
}
{
"data": {
"attributes": {
"archived_at": "2026-01-01T00:00:00Z",
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"cancelled_at": "2026-01-01T00:00:00Z",
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"conflict_checks": [
{
"acknowledged_at": "2026-01-01T00:00:00Z",
"acknowledged_by": "00000000-0000-0000-0000-000000000000",
"check_type": "new_matter",
"clearance_reason": "string",
"cleared_at": "2026-01-01T00:00:00Z",
"cleared_by_user_id": "00000000-0000-0000-0000-000000000000",
"conflict_type": "same_party",
"conflicting_matter_id": "00000000-0000-0000-0000-000000000000",
"conflicting_matter_name": "string",
"conflicting_matter_reference": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"contact_name": "string",
"disclosure_redacted": false,
"highest_score": 0.0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"rechecked_at": "2026-01-01T00:00:00Z",
"status": "pending",
"subject_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
}
],
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"current_step_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_blocked": false,
"jurisdiction_country": "AU",
"jurisdiction_country_label": "string",
"jurisdiction_region": "NSW",
"jurisdiction_region_label": "string",
"lock_version": 0,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"opened_at": "2026-01-01T00:00:00Z",
"priority": "low",
"reference": "string",
"status": "open",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a matter
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this matter. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"jurisdiction_country": "AU",
"jurisdiction_region": "NSW",
"metadata": {},
"name": "string",
"priority": "low",
"status": "open",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
}
}
{
"data": {
"attributes": {
"archived_at": "2026-01-01T00:00:00Z",
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"cancelled_at": "2026-01-01T00:00:00Z",
"closed_at": "2026-01-01T00:00:00Z",
"completed_at": "2026-01-01T00:00:00Z",
"conflict_checks": [
{
"acknowledged_at": "2026-01-01T00:00:00Z",
"acknowledged_by": "00000000-0000-0000-0000-000000000000",
"check_type": "new_matter",
"clearance_reason": "string",
"cleared_at": "2026-01-01T00:00:00Z",
"cleared_by_user_id": "00000000-0000-0000-0000-000000000000",
"conflict_type": "same_party",
"conflicting_matter_id": "00000000-0000-0000-0000-000000000000",
"conflicting_matter_name": "string",
"conflicting_matter_reference": "string",
"contact_id": "00000000-0000-0000-0000-000000000000",
"contact_name": "string",
"disclosure_redacted": false,
"highest_score": 0.0,
"id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"rechecked_at": "2026-01-01T00:00:00Z",
"status": "pending",
"subject_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
}
],
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"current_step_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_blocked": false,
"jurisdiction_country": "AU",
"jurisdiction_country_label": "string",
"jurisdiction_region": "NSW",
"jurisdiction_region_label": "string",
"lock_version": 0,
"matter_type_id": "00000000-0000-0000-0000-000000000000",
"metadata": {},
"name": "string",
"opened_at": "2026-01-01T00:00:00Z",
"priority": "low",
"reference": "string",
"status": "open",
"tags": [
"string"
],
"team_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "matters"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a matter
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/matters/{id}
List a matter's activity timeline
The audit trail for the matter and everything on it (tasks, notes, documents, step moves), newest first, paginated. Serves the changed field NAMES only, never the changed values: the raw audit `changes` column is whatever a call site passed and cannot be made safe (P0-01).
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
user_id - Type
- string (uuid)
- In
- in query
- Description
-
- Name
-
action - Type
- string
- In
- in query
- Description
-
- Name
-
from - Type
- string (date)
- In
- in query
- Description
-
- Name
-
to - Type
- string (date)
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"action": "create",
"changed_fields": [
"string"
],
"inserted_at": "2026-01-01T00:00:00Z",
"metadata": {},
"resource_id": "00000000-0000-0000-0000-000000000000",
"resource_type": "string",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "audit-logs"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Referral Submissions
Get contract submission spec
Returns the OpenAPI spec describing the expected submission payload for a contract.
Parameters
-
- Name
-
public_id - Type
- string
- required
- In
- in path
- Description
- Contract public ID
{
"info": {},
"openapi": "string",
"paths": {}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Submit a referral
Submit a referral against a contract. Authenticated with a partner API credential (mf_ref_ prefix).
Parameters
-
- Name
-
public_id - Type
- string
- required
- In
- in path
- Description
- Contract public ID
Request body
-
- Name
-
data - Type
- object
- Description
- Submission field data
-
- Name
-
external_reference - Type
- string
- Description
- Partner-side reference ID
{
"data": {},
"external_reference": "string"
}
{
"id": "00000000-0000-0000-0000-000000000000",
"message": "string",
"missing_fields": [
"string"
],
"status": "string"
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Test a referral submission
Validates a referral payload against the contract without creating any records. Use this to test your integration.
Parameters
-
- Name
-
public_id - Type
- string
- required
- In
- in path
- Description
- Contract public ID
Request body
-
- Name
-
data - Type
- object
- Description
- Submission field data
{
"data": {}
}
{
"message": "string",
"missing_fields": [
"string"
],
"normalized": {},
"valid": false
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Reports
List reports
Parameters
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"configuration": {},
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_shared": false,
"is_system": false,
"name": "string",
"report_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a report
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"configuration": {},
"description": "string",
"is_shared": false,
"name": "string",
"report_type": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
}
}
{
"data": {
"attributes": {
"configuration": {},
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_shared": false,
"is_system": false,
"name": "string",
"report_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a report
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"configuration": {},
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_shared": false,
"is_system": false,
"name": "string",
"report_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a report
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"configuration": {},
"description": "string",
"is_shared": false,
"name": "string",
"report_type": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
}
}
{
"data": {
"attributes": {
"configuration": {},
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_shared": false,
"is_system": false,
"name": "string",
"report_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a report
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"configuration": {},
"description": "string",
"is_shared": false,
"name": "string",
"report_type": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
}
}
{
"data": {
"attributes": {
"configuration": {},
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_shared": false,
"is_system": false,
"name": "string",
"report_type": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "reports"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a report
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/reports/{id}
Run a report and return results
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- Description
{
"data": {
"attributes": {
"parameters": {}
}
}
}
{
"data": {}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Role Templates
List role templates for a matter type
Parameters
-
- Name
-
matter_type_id - Type
- string (uuid)
- required
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a role template
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
}
}
{
"data": {
"attributes": {
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a role template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a role template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
}
}
{
"data": {
"attributes": {
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a role template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
}
}
{
"data": {
"attributes": {
"inserted_at": "2026-01-01T00:00:00Z",
"is_primary": false,
"is_required": false,
"matter_type_ids": [
"00000000-0000-0000-0000-000000000000"
],
"max_count": 0,
"position": 0,
"role_name": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "role-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a role template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/role-templates/{id}
Steps
Change matter to a different step
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"reason": "string",
"to_step_id": "00000000-0000-0000-0000-000000000000"
}
}
}
{
"data": {
"current_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"current_step_id": "00000000-0000-0000-0000-000000000000",
"id": "00000000-0000-0000-0000-000000000000",
"message": "string"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get step history for a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"changed_by_name": "string",
"duration_seconds": 0,
"from_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"from_reporting_step_label": "string",
"from_step_name": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"reason": "string",
"reporting_transition": false,
"to_reporting_step_id": "00000000-0000-0000-0000-000000000000",
"to_reporting_step_label": "string",
"to_step_name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "step-changes"
}
],
"meta": {
"count": 0,
"timestamp": "2026-01-01T00:00:00Z"
}
}
Get available step transitions for a matter
Parameters
-
- Name
-
matter_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"step_type": "string"
}
]
}
List steps for a workflow
Parameters
-
- Name
-
workflow_id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a step
Parameters
-
- Name
-
workflow_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
}
}
{
"data": {
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a step
Parameters
-
- Name
-
workflow_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a step
Parameters
-
- Name
-
workflow_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
}
}
{
"data": {
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a step
Parameters
-
- Name
-
workflow_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
}
}
{
"data": {
"attributes": {
"color": "string",
"description": "string",
"icon": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_initial": false,
"is_terminal": false,
"name": "string",
"position": 0,
"reporting_step_id": "00000000-0000-0000-0000-000000000000",
"settings": {},
"step_type": "sequential",
"updated_at": "2026-01-01T00:00:00Z",
"workflow_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "steps"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a step
Parameters
-
- Name
-
workflow_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Task Templates
List task templates
Parameters
-
- Name
-
matter_type_id - Type
- string (uuid)
- In
- in query
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a task template
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
}
}
{
"data": {
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a task template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a task template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
}
}
{
"data": {
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a task template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
}
}
{
"data": {
"attributes": {
"assignments": [
{}
],
"category": "string",
"default_assignee": "string",
"description": "string",
"due_date_mode": "string",
"due_key_date_type_id": "00000000-0000-0000-0000-000000000000",
"due_offset_days": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_compliance": false,
"is_portal_visible": false,
"name": "string",
"position": 0,
"priority": "string",
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-templates"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a task template
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/task-templates/{id}
Task comments
List comments on a task
Parameters
-
- Name
-
task_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: task, user.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"body": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"portal_user_id": "00000000-0000-0000-0000-000000000000",
"task_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a comment on a task
Parameters
-
- Name
-
task_id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"body": "string",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
}
}
{
"data": {
"attributes": {
"body": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"portal_user_id": "00000000-0000-0000-0000-000000000000",
"task_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a comment
Parameters
-
- Name
-
task_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: task, user.
{
"data": {
"attributes": {
"body": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"portal_user_id": "00000000-0000-0000-0000-000000000000",
"task_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a comment
Parameters
-
- Name
-
task_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"body": "string",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
}
}
{
"data": {
"attributes": {
"body": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"portal_user_id": "00000000-0000-0000-0000-000000000000",
"task_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a comment
Parameters
-
- Name
-
task_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"body": "string",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
}
}
{
"data": {
"attributes": {
"body": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"mentioned_user_ids": [
"00000000-0000-0000-0000-000000000000"
],
"portal_user_id": "00000000-0000-0000-0000-000000000000",
"task_id": "00000000-0000-0000-0000-000000000000",
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-comments"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a comment
Parameters
-
- Name
-
task_id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/tasks/{task_id}/comments/{id}
Tasks
List tasks
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, lead, assignee, parent_task.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a task
Supports the optional Idempotency-Key request header (max 255 chars): retrying the POST with the same key and body replays the original response instead of creating a second task.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"description": "string",
"due_date": "2026-01-01",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
}
}
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a task
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, lead, assignee, parent_task.
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a task
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this task. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"description": "string",
"due_date": "2026-01-01",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
}
}
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a task
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
if-match - Type
- string
- In
- in header
- Description
- Optional optimistic-concurrency precondition: the ETag from a previous GET/update of this task. A stale value is refused with 412 precondition_failed before anything is written.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"category": "string",
"description": "string",
"due_date": "2026-01-01",
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"priority": "low",
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
}
}
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a task
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/tasks/{id}
Cancel a task
Sets the task's status to cancelled. Idempotent on an already-cancelled task; refused (409) on a completed one: reopen it first.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Mark a task as completed
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
List a task's dependencies
The tasks this task depends on. A `blocks` dependency prevents completion until the depended-on task is done; `related` is informational. Bounded by one task, so the list is not paginated.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": [
{
"attributes": {
"dependency_type": "blocks",
"depends_on_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"task_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-dependencies"
}
],
"meta": {
"count": 0,
"timestamp": "2026-01-01T00:00:00Z"
}
}
Add a dependency to a task
Makes this task depend on another task in the same firm. A `blocks` dependency that would close a cycle is refused (422): a circular block leaves both tasks permanently uncompletable.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"dependency_type": "blocks",
"depends_on_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
}
}
{
"data": {
"attributes": {
"dependency_type": "blocks",
"depends_on_id": "00000000-0000-0000-0000-000000000000",
"inserted_at": "2026-01-01T00:00:00Z",
"matter_id": "00000000-0000-0000-0000-000000000000",
"task_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "task-dependencies"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Remove a dependency from a task
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
depends_on_id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/tasks/{id}/dependencies/{depends_on_id}
Reopen a task
Moves a completed or cancelled task back to pending, clearing its completion bookkeeping. Refused (409) from any other status.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Start a task
Sets the task's status to in_progress and starts its timer. Idempotent on an already-running task.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
List a task's subtasks
The tasks whose parent_task_id is this task, paginated.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"assigned_to_id": "00000000-0000-0000-0000-000000000000",
"blocked": false,
"category": "string",
"completed_at": "2026-01-01T00:00:00Z",
"completed_by_id": "00000000-0000-0000-0000-000000000000",
"completed_by_portal_user_id": "00000000-0000-0000-0000-000000000000",
"created_by_id": "00000000-0000-0000-0000-000000000000",
"description": "string",
"due_date": "2026-01-01",
"due_time": "string",
"elapsed_seconds": 0,
"estimated_minutes": 0,
"finished_at": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"is_portal_visible": false,
"is_recurring": false,
"lead_id": "00000000-0000-0000-0000-000000000000",
"matter_id": "00000000-0000-0000-0000-000000000000",
"name": "string",
"parent_task_id": "00000000-0000-0000-0000-000000000000",
"position": 0,
"priority": "low",
"recurrence_rule": {},
"source": "string",
"started_at": "2026-01-01T00:00:00Z",
"status": "pending",
"step_id": "00000000-0000-0000-0000-000000000000",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "tasks"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Time Entries
List time entries
Parameters
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
filter - Type
- object
- In
- in query
- Description
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, user, invoice.
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
-
- Name
-
sort - Type
- string
- In
- in query
- Description
{
"data": [
{
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"end_time": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"source": "string",
"start_time": "2026-01-01T00:00:00Z",
"status": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a time entry
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"tags": [
"string"
],
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"end_time": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"source": "string",
"start_time": "2026-01-01T00:00:00Z",
"status": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a time entry
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
fields - Type
- object
- In
- in query
- Description
- JSON:API sparse fieldsets: fields[<type>]=a,b limits the attributes returned for that resource type.
-
- Name
-
include - Type
- string
- In
- in query
- Description
- Comma-separated related resources to embed in the top-level `included` array. Supported values: matter, user, invoice.
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"end_time": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"source": "string",
"start_time": "2026-01-01T00:00:00Z",
"status": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a time entry
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"end_time": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"source": "string",
"start_time": "2026-01-01T00:00:00Z",
"status": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a time entry
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"tags": [
"string"
]
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
}
}
{
"data": {
"attributes": {
"amount_cents": 0,
"category": "string",
"date": "2026-01-01",
"description": "string",
"duration_minutes": 0,
"end_time": "2026-01-01T00:00:00Z",
"inserted_at": "2026-01-01T00:00:00Z",
"invoice_id": "00000000-0000-0000-0000-000000000000",
"is_billable": false,
"matter_id": "00000000-0000-0000-0000-000000000000",
"rate_cents": 0,
"source": "string",
"start_time": "2026-01-01T00:00:00Z",
"status": "string",
"tags": [
"string"
],
"updated_at": "2026-01-01T00:00:00Z",
"user_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "time-entries"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a time entry
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/time-entries/{id}
Webhooks
Retry a webhook delivery
Enqueues a fresh delivery of the same event and payload to the same endpoint, as a new delivery record with its own attempt counter.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"attempt": 0,
"duration_ms": 0,
"error_message": "string",
"event": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"next_retry_at": "2026-01-01T00:00:00Z",
"response_status": 0,
"status": "pending",
"updated_at": "2026-01-01T00:00:00Z",
"webhook_endpoint_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhook-deliveries"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
List subscribable webhook event names
Every event name a webhook endpoint may subscribe to. "*" and "<category>.*" wildcards are also accepted on an endpoint's `events`.
{
"data": [
{
"attributes": {
"category": "string"
},
"id": "string",
"type": "webhook-events"
}
]
}
List webhook endpoints
The signing secret is never included; see the create and rotate-secret operations.
{
"data": [
{
"attributes": {
"description": "string",
"disabled_at": "2026-01-01T00:00:00Z",
"events": [
"string"
],
"failure_count": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"last_triggered_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a webhook endpoint
The signing secret is generated server-side and returned ONCE, as `meta.secret` on this response. Store it: no read endpoint ever returns it again. Use POST /webhooks/{id}/rotate-secret to replace a lost or compromised secret.
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"events": [
"string"
],
"is_active": false,
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
}
}
{
"data": {
"attributes": {
"description": "string",
"disabled_at": "2026-01-01T00:00:00Z",
"events": [
"string"
],
"failure_count": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"last_triggered_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a webhook endpoint
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"description": "string",
"disabled_at": "2026-01-01T00:00:00Z",
"events": [
"string"
],
"failure_count": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"last_triggered_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a webhook endpoint
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"events": [
"string"
],
"is_active": false,
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
}
}
{
"data": {
"attributes": {
"description": "string",
"disabled_at": "2026-01-01T00:00:00Z",
"events": [
"string"
],
"failure_count": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"last_triggered_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a webhook endpoint
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"events": [
"string"
],
"is_active": false,
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
}
}
{
"data": {
"attributes": {
"description": "string",
"disabled_at": "2026-01-01T00:00:00Z",
"events": [
"string"
],
"failure_count": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"last_triggered_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a webhook endpoint
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
curl -X DELETE \
-H "Authorization: Bearer {token}" \
https://app.matterfirst.com.au/api/v1/webhooks/{id}
List delivery attempts for a webhook endpoint
Delivery metadata only: the stored payload and response bodies are not included; they can carry client data and belong to the receiving system.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"attempt": 0,
"duration_ms": 0,
"error_message": "string",
"event": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"next_retry_at": "2026-01-01T00:00:00Z",
"response_status": 0,
"status": "pending",
"updated_at": "2026-01-01T00:00:00Z",
"webhook_endpoint_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhook-deliveries"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Rotate a webhook endpoint's signing secret
Replaces the signing secret. The NEW secret is returned once, as `meta.secret` on this response, and deliveries signed with the old secret stop verifying immediately. The audit log records that a rotation happened, never the value.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"description": "string",
"disabled_at": "2026-01-01T00:00:00Z",
"events": [
"string"
],
"failure_count": 0,
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"last_triggered_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"url": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhooks"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Send a test delivery to a webhook endpoint
Queues a `test.ping` delivery, signed exactly as real deliveries are.
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"attempt": 0,
"duration_ms": 0,
"error_message": "string",
"event": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"next_retry_at": "2026-01-01T00:00:00Z",
"response_status": 0,
"status": "pending",
"updated_at": "2026-01-01T00:00:00Z",
"webhook_endpoint_id": "00000000-0000-0000-0000-000000000000"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "webhook-deliveries"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Workflows
List workflows
Parameters
-
- Name
-
page_number - Type
- integer
- In
- in query
- Description
-
- Name
-
page_size - Type
- integer
- In
- in query
- Description
{
"data": [
{
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_template": false,
"name": "string",
"updated_at": "2026-01-01T00:00:00Z",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
}
],
"links": {
"first": "string",
"last": "string",
"next": "string",
"prev": "string",
"self": "string"
},
"meta": {
"page": 0,
"page_size": 0,
"total": 0,
"total_pages": 0
}
}
Create a workflow
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"is_active": false,
"is_template": false,
"name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
}
}
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_template": false,
"name": "string",
"updated_at": "2026-01-01T00:00:00Z",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Get a workflow
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_template": false,
"name": "string",
"updated_at": "2026-01-01T00:00:00Z",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
Update a workflow
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"is_active": false,
"is_template": false,
"name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
}
}
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_template": false,
"name": "string",
"updated_at": "2026-01-01T00:00:00Z",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Update a workflow
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"description": "string",
"is_active": false,
"is_template": false,
"name": "string"
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
}
}
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_template": false,
"name": "string",
"updated_at": "2026-01-01T00:00:00Z",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Delete a workflow
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}
Clone a workflow
Parameters
-
- Name
-
id - Type
- string (uuid)
- required
- In
- in path
- Description
Request body
-
- Name
-
data - Type
- object
- required
- Description
{
"data": {
"attributes": {
"name": "string"
}
}
}
{
"data": {
"attributes": {
"description": "string",
"inserted_at": "2026-01-01T00:00:00Z",
"is_active": false,
"is_template": false,
"name": "string",
"updated_at": "2026-01-01T00:00:00Z",
"version": 0
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "workflows"
},
"meta": {
"timestamp": "2026-01-01T00:00:00Z"
}
}
{
"errors": [
{
"detail": "string",
"source": {
"pointer": "string"
},
"status": "string",
"title": "string"
}
]
}