Law Hired

Law Hired

v1
REST API · Bearer auth · Webhooks · OpenAPI 3.0

Law Hired API

Integrate legal automation into your product. Sync matters, clients, time, leads — and react to events in real time via webhooks. Built for CRM, ERP, and billing integrations.

6

Resources

6

Webhook Events

Zapier · Make

Integrations
Ready to integrate?

Sign in to your Law Hired account to create API keys and manage webhooks.

Ready-made integrations
Zapier
Make
HubSpot
Salesforce
Postman

Quick Start

All requests go to https://www.lawhired.com/api/v1 with your API key as a Bearer token. Sign in to create a key →

# List matters (delta sync — only records changed since Jan 1)
curl 'https://www.lawhired.com/api/v1/matters?updated_since=2026-01-01T00:00:00Z' \
  -H 'Authorization: Bearer lh_live_YOUR_KEY'

# Upsert a client from your CRM
curl -X PUT 'https://www.lawhired.com/api/v1/clients' \
  -H 'Authorization: Bearer lh_live_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"external_id":"CRM-123","company_name":"Acme Corp","email":"ap@acme.com"}'

REST Data API

Read and write your core records — built for two-way ERP/CRM sync. Every writable resource supports list, get-by-id, create, update, delete, and idempotent upsert by your own external_id. All responses are scoped to your account.

ResourceReadWriteUpsert (ERP sync)
/mattersGET list · GET /:idPOST · PATCH /:id · DELETE /:idPUT by external_id
/clientsGET list · GET /:idPOST · PATCH /:id · DELETE /:idPUT by external_id
/time-entriesGET list · GET /:idPOST · PATCH /:id · DELETE /:idPUT by external_id
/invoicesGET list · GET /:idRead-only—
/leadsGET listPOST—
Delta sync (pull changed records)
curl 'https://www.lawhired.com/api/v1/matters?updated_since=2026-01-01T00:00:00Z&limit=50' \
  -H 'Authorization: Bearer lh_live_xxx'
Upsert from your ERP/CRM
curl -X PUT 'https://www.lawhired.com/api/v1/clients' \
  -H 'Authorization: Bearer lh_live_xxx' \
  -H 'Content-Type: application/json' \
  -d '{"external_id":"HUBSPOT-123","company_name":"Acme","email":"ap@acme.com"}'

Webhooks

Subscribe an endpoint and we POST signed events in real time — so your CRM or ERP reacts the moment something happens. Delivery is signed with HMAC-SHA256:

// Every delivery includes these headers:
X-LawHired-Event:    lead.created
X-LawHired-Delivery: 550e8400-e29b-41d4-a716-446655440000
X-LawHired-Signature: sha256=a3f1b2c9d4e5...

// Example payload body:
{
  "event": "lead.created",
  "delivery_id": "550e8400-e29b-41d4-a716-446655440000",
  "timestamp": "2026-03-15T10:00:00Z",
  "data": {
    "lead_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "first_name": "John",
    "email": "john.doe@email.com",
    "practice_area": "Family Law",
    "status": "new"
  }
}

// Verify signature (Node.js) — strip "sha256=" prefix first:
const crypto = require('crypto');
const received = req.headers['x-lawhired-signature'].replace('sha256=', '');
const expected = crypto.createHmac('sha256', 'whsec_YOUR_SECRET')
  .update(rawBody).digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected)))
  throw new Error('Invalid signature');
lead.created
Fires when a new lead is captured from any source
matter.created
Fires when a new legal matter is opened
client.created
Fires when a new client is added
invoice.paid
Fires when an invoice status changes to paid
document.signed
Fires when an e-signature request is completed
ping.test
Sent by POST /webhooks/:id/test to verify your endpoint and signature logic
# Register a webhook — secret returned once
curl -X POST 'https://www.lawhired.com/api/v1/webhooks' \
  -H 'Authorization: Bearer lh_live_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://your-crm.com/hooks/lawhired",
    "events": ["lead.created", "invoice.paid", "document.signed"]
  }'

Ready-Made Integrations

No-code and low-code options for connecting Law Hired to your CRM without writing API calls.

Zapier

Triggers (new lead, new matter, invoice paid) + Actions (create matter, capture lead, upsert client). Connect 6,000+ apps — HubSpot, Salesforce, Gmail, Slack, Google Sheets.

App definition ready — submit to Zapier Developer Platform
Make (Integromat)

Instant webhook triggers + full action suite. 5× cheaper than Zapier for high-volume automation. Connect to 1,000+ apps with visual scenario builder.

Module definitions ready — submit to Make Developer Hub
OpenAPI / HubSpot / Salesforce

Import the OpenAPI 3.0 spec directly into HubSpot's API connector, Salesforce External Objects, Postman, or any tool that accepts OpenAPI.

Spec live at /openapi.json

API Resources

Seven resource groups covering every aspect of legal practice management.

Identity

Introspect the API key in use — name, environment, scopes, rate tier, and account UUID.

GET /me
Matters

Full CRUD on legal matters — create, update, delete, and ERP upsert by external_id.

GET /mattersGET /matters/:idPOST /mattersPUT /mattersPATCH /matters/:idDELETE /matters/:id
Clients

Manage client records. Bi-directional sync with HubSpot, Salesforce, or any CRM via external_id upsert.

GET /clientsGET /clients/:idPOST /clientsPUT /clientsPATCH /clients/:idDELETE /clients/:id
Time Entries

Log billable and non-billable time. Sync from Harvest, Toggl, or your own timekeeping system.

GET /time-entriesGET /time-entries/:idPOST /time-entriesPUT /time-entriesPATCH /time-entries/:idDELETE /time-entries/:id
Invoices

Read-only invoice access — ideal for syncing to QuickBooks, Xero, or accounting dashboards.

GET /invoicesGET /invoices/:id
Leads

Capture leads from websites, CRMs, ad platforms, or call centers. Auto-deduplication and scoring.

POST /leadsGET /leads
Webhooks

Real-time push events. Subscribe to lead.created, matter.created, invoice.paid, and more.

GET /webhooksPOST /webhooksPOST /webhooks/:id/testDELETE /webhooks/:id

Endpoint Reference

Detailed examples for each endpoint with real request/response bodies.

Returns the authenticated key's name, environment (live/test), scopes, rate tier, and the owner's account UUID. Useful for verifying a key is valid and checking what it can access.

Request
curl 'https://www.lawhired.com/api/v1/me' \
  -H 'Authorization: Bearer lh_live_xxx'
Response
{
  "key": {
    "id": 1,
    "name": "My CRM Integration",
    "environment": "live",
    "scopes": ["matters:read", "clients:read", "leads:write"],
    "rate_tier": "pro"
  },
  "owner_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Returns your matters paginated. Pass updated_since for incremental/delta sync — only records changed since that timestamp are returned.

Request
curl 'https://www.lawhired.com/api/v1/matters?limit=50&updated_since=2026-01-01T00:00:00Z' \
  -H 'Authorization: Bearer lh_live_xxx'
Response
{
  "count": 12,
  "limit": 50,
  "offset": 0,
  "data": [
    {
      "id": 1,
      "title": "Smith v. Jones",
      "status": "In Progress",
      "case_category": "Litigation",
      "client_id": 42,
      "external_id": "ERP-MATTER-001",
      "created_at": "2026-03-01T10:00:00Z",
      "updated_at": "2026-03-15T14:32:00Z"
    }
  ]
}

Idempotent create-or-update keyed on external_id. If a matter with that external_id already exists for your account it is updated; otherwise a new one is created. Safe to call every time your ERP syncs.

Request
curl -X PUT 'https://www.lawhired.com/api/v1/matters' \
  -H 'Authorization: Bearer lh_live_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "external_id": "ERP-MATTER-001",
    "title": "Smith v. Jones",
    "status": "In Progress",
    "client_id": 42
  }'
Response
{
  "data": { "id": 1, "title": "Smith v. Jones", "external_id": "ERP-MATTER-001", ... },
  "created": false
}

Sync clients from HubSpot, Salesforce, or any CRM. Pass the CRM's contact ID as external_id — creates on first call, updates on subsequent ones.

Request
curl -X PUT 'https://www.lawhired.com/api/v1/clients' \
  -H 'Authorization: Bearer lh_live_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "external_id": "HUBSPOT-CONTACT-123",
    "company_name": "Acme Corp",
    "email": "ap@acme.com",
    "client_type": "business"
  }'
Response
{
  "data": { "id": 7, "company_name": "Acme Corp", "external_id": "HUBSPOT-CONTACT-123", ... },
  "created": true
}

Submit a new lead from any source — website form, CRM, ad platform, or call center. Automatic deduplication by email and urgency-based scoring.

Request
curl -X POST 'https://www.lawhired.com/api/v1/leads' \
  -H 'Authorization: Bearer lh_live_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "leadData": {
      "first_name": "John",
      "last_name": "Doe",
      "email": "john.doe@email.com",
      "phone": "+1-555-0123",
      "practice_area": "Family Law",
      "description": "Need help with custody dispute",
      "urgency": "high"
    }
  }'
Response
{
  "success": true,
  "lead": {
    "lead_id": "550e8400-e29b-41d4-a716-446655440000",
    "first_name": "John",
    "email": "john.doe@email.com",
    "status": "new",
    "created_at": "2026-03-15T10:00:00Z"
  }
}

Subscribe a URL to one or more events. The signing secret (whsec_…) is returned once — store it immediately to verify delivery signatures with HMAC-SHA256.

Request
curl -X POST 'https://www.lawhired.com/api/v1/webhooks' \
  -H 'Authorization: Bearer lh_live_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://your-crm.com/hooks/lawhired",
    "events": ["lead.created", "invoice.paid"],
    "description": "HubSpot CRM sync"
  }'
Response
{
  "id": 3,
  "url": "https://your-crm.com/hooks/lawhired",
  "events": ["lead.created", "invoice.paid"],
  "is_active": true,
  "secret": "whsec_a1b2c3d4e5f6...",
  "created_at": "2026-03-15T10:00:00Z"
}

Record a billable or non-billable time entry against a matter. Supports ERP upsert by external_id for syncing from Harvest, Toggl, or other timekeeping systems.

Request
curl -X POST 'https://www.lawhired.com/api/v1/time-entries' \
  -H 'Authorization: Bearer lh_live_xxx' \
  -H 'Content-Type: application/json' \
  -d '{
    "case_id": 1,
    "description": "Draft motion for summary judgment",
    "duration": 2.5,
    "is_billable": true,
    "rate": 350.00,
    "activity_type": "Research"
  }'
Response
{
  "data": {
    "id": 42,
    "case_id": 1,
    "description": "Draft motion for summary judgment",
    "duration": 2.5,
    "is_billable": true,
    "rate": 350.00
  }
}

Returns invoices for your account. Read-only — write operations are handled through QuickBooks or Xero sync.

Request
curl 'https://www.lawhired.com/api/v1/invoices?limit=50&updated_since=2026-01-01T00:00:00Z' \
  -H 'Authorization: Bearer lh_live_xxx'
Response
{
  "count": 8,
  "data": [
    {
      "invoice_id": 1,
      "invoice_number": "INV-2026-001",
      "total_amount": 5000.00,
      "status": "paid",
      "paid_date": "2026-03-10"
    }
  ]
}

Authentication & Rate Limits

Authentication

Every request requires an API key as a Bearer token:
Authorization: Bearer lh_live_…

Keys are hashed at rest (SHA-256) and shown only once at creation. Create and revoke them in your developer dashboard.

Rate Limits

Free tier: 100 req/min
Pro tier: 1,000 req/min
Enterprise: Unlimited

When exceeded, you receive 429 Too Many Requests with a Retry-After header.

Scopes

Keys can be scoped to specific resources and operations:

matters:read, matters:write
clients:read, clients:write
leads:read, leads:write
invoices:read, webhooks:write


Ready to Build?

Create a free Law Hired account to get your API key and start integrating today.

We use essential cookies to operate this platform, and optional analytics cookies (PostHog) to understand how it is used. We do not use advertising cookies. Cookie Policy · Privacy Policy