A REST surface for matter, document, and time-entry operations. Available on the Growth tier. Bearer-token auth, JSON in / JSON out.
Generate API keys at /firm/settings → API keys. The full key is shown exactly once at creation — save it to your secrets manager. Pass it in the Authorization header:
Authorization: Bearer sc_live_...
Each key carries a list of scopes. Available scopes:
matters:read · matters:writedocuments:read · documents:writeclients:read · clients:write* — full access (use sparingly)Machine-readable spec for code generation, Postman, Insomnia, etc.:
GET https://synthcounsel.com/api/v1/openapi.json
Failures return { "error": "..." } with an appropriate HTTP status:
/api/v1/mattersscope: matters:readList matters for the firm. Optional ?limit (max 200) and ?status filters.
curl -H "Authorization: Bearer sc_live_..." \ https://synthcounsel.com/api/v1/matters?limit=20&status=active
{
"data": [
{
"id": "8d2e...",
"name": "Smith v. Acme Collections",
"client_name": "John Smith",
"matter_number": "SMI-001",
"status": "active",
"created_at": "2026-04-15T..."
}
]
}/api/v1/mattersscope: matters:writeCreate a matter. Required: name, client_name, jurisdiction (or set a default at /firm/settings). Optional: opposing_party, matter_number, court, case_type, status.
curl -X POST \
-H "Authorization: Bearer sc_live_..." \
-H "Content-Type: application/json" \
-d '{"name":"Doe v. Capital One","client_name":"Jane Doe","jurisdiction":"CA"}' \
https://synthcounsel.com/api/v1/matters{
"data": {
"id": "...",
"name": "Doe v. Capital One",
"client_name": "Jane Doe",
"status": "intake",
"created_at": "..."
}
}/api/v1/matters/{id}scope: matters:readGet one matter by id.
curl -H "Authorization: Bearer sc_live_..." \ https://synthcounsel.com/api/v1/matters/8d2e...
{ "data": { "id": "8d2e...", ... } }/api/v1/matters/{id}scope: matters:writeUpdate one matter. Pass any subset of: name, client_name, opposing_party, matter_number, court, jurisdiction, case_type, status, notes.
curl -X PATCH \
-H "Authorization: Bearer sc_live_..." \
-H "Content-Type: application/json" \
-d '{"status":"closed"}' \
https://synthcounsel.com/api/v1/matters/8d2e...{ "data": { "id": "8d2e...", "status": "closed", ... } }/api/v1/time-entriesscope: matters:readList time entries. Optional ?matter_id, ?from (YYYY-MM-DD), ?to, ?limit (max 500).
curl -H "Authorization: Bearer sc_live_..." \ "https://synthcounsel.com/api/v1/time-entries?matter_id=8d2e...&from=2026-04-01"
{
"data": [
{
"id": "...",
"matter_id": "8d2e...",
"duration_minutes": 90,
"description": "Drafted answer to complaint",
"activity_type": "drafting",
"billable": true,
"entry_date": "2026-04-22",
"rate_cents": 35000,
"pushed_to_clio_at": null
}
]
}/api/v1/time-entriesscope: matters:writeCreate a time entry. Required: matter_id, duration_minutes (1–1440), description. Optional: activity_type, billable, entry_date, rate_cents.
curl -X POST \
-H "Authorization: Bearer sc_live_..." \
-H "Content-Type: application/json" \
-d '{"matter_id":"8d2e...","duration_minutes":45,"description":"Phone call with client","activity_type":"communication","rate_cents":35000}' \
https://synthcounsel.com/api/v1/time-entries{ "data": { "id": "...", "matter_id": "8d2e...", "duration_minutes": 45, ... } }/api/v1/documentsscope: documents:readList matter documents. Optional ?matter_id, ?document_type (answer/motion/rfa/discovery), ?limit (max 200).
curl -H "Authorization: Bearer sc_live_..." \ "https://synthcounsel.com/api/v1/documents?matter_id=8d2e..."
{
"data": [
{
"id": "...",
"matter_id": "8d2e...",
"title": "Answer — Smith v. Acme",
"document_type": "answer",
"version": 2,
"drafted_at": "...",
"approved_at": "...",
"word_count": 1820
}
]
}/api/v1/documents/{id}/downloadscope: documents:readGet a 5-minute signed URL for the latest .docx file on this document.
curl -H "Authorization: Bearer sc_live_..." \ https://synthcounsel.com/api/v1/documents/abc123.../download
{ "url": "https://...supabase.co/...", "expires_in_seconds": 300 }/api/v1/clientsscope: clients:readList clients (deduped from matter.client_name). Optional ?q for fuzzy name search, ?limit (max 500).
curl -H "Authorization: Bearer sc_live_..." \ "https://synthcounsel.com/api/v1/clients?q=smith"
{
"data": [
{
"name": "John Smith",
"matter_count": 3,
"open_matter_count": 2,
"last_activity_at": "2026-04-30T..."
}
]
}Tell us what you’re building and we’ll prioritize. The integration roadmap is at /for-firms/integrations.