API Documentation
REST API reference for external integrations
Authentication
All API requests require a Bearer token in the Authorization header. Generate keys from your API Keys page.
Requests without a valid key receive a 401 response. Features not in your plan return 403.
/api/v1/statsGet firm-wide statistics: user count, client count, matters, revenue.
/api/v1/mattersList all matters belonging to your firm with client and lawyer info.
status | Filter by status: OPEN, PENDING, CLOSED |
/api/v1/mattersCreate a new matter under an existing client.
title | Required. Matter title. |
clientId | Required. ID of an existing client in your firm. |
status / stage / priority / practiceArea / deadline / counterparty | Optional fields. |
/api/v1/clientsList all clients registered under your firm.
/api/v1/clientsCreate a new client record.
name | Required. Client name. |
type | Required. INDIVIDUAL or CORPORATE. |
email / phone / address / referralSource | Optional fields. |
/api/v1/time-entriesList time entries logged by your firm's staff.
billed | Filter by billed status: true or false |
/api/v1/time-entriesLog a time entry against a matter on behalf of a staff member.
matterId / userId / hours | Required fields. |
rate / currency / date / description | Optional fields. |
/api/v1/staffList all staff members in your firm with roles and positions.
Webhooks (outbound events)
Register a URL from the Webhooks page to receive real-time HTTP POSTs when events happen in your practice — no polling required.
client.created |
matter.created |
matter.stage_changed |
invoice.created |
invoice.paid |
lead.converted |
Each request includes an X-PractaHQ-Signature header — an HMAC-SHA256 hex digest of the raw body, signed with your webhook's secret — so you can verify the request is genuine.
Rate Limits
API requests are limited to 1,000 requests per hour per API key. Exceeding this returns 429 Too Many Requests.
Error Responses
401 | Missing or invalid API key |
403 | Feature not enabled on your plan, or firm subscription inactive |
404 | Resource not found |
429 | Rate limit exceeded |
500 | Internal server error |