- Keep your Clients list up to date from your case system — add and update clients (
POST /clients) and read them back (GET /clients). - Mark a case settled (
POST /cases/settled), which is what case-settled client letters wait for. - Send our prospects to your CRM as cold leads (
GET /prospects). Digital bundle only.
The API is in early access, turned on together with the Clients list. Until it’s on for your account, every request returns
403 not_enabled. Email support@outboundlegal.com to turn it on.Base URL
Authentication
Create a key in Settings → Integrations → API keys (see API keys). The account owner creates keys; teammate logins can’t. The key is shown once. Send it on every request as a Bearer token:obl_ followed by 43 letters, numbers, - or _.
A key stops working when:
- it’s revoked in Settings,
- the account’s access is suspended, or
- the login that made it becomes a view-only teammate login.
GET /me to check a key. It returns the account the key belongs to.
Rate limit
120 requests per minute per key. Over that, you get429 rate_limited with a Retry-After header: the number of seconds to wait before trying again.
Errors
Every error has the same shape:code; it doesn’t change. message is a sentence for a person and may change.
POST /clients handles a batch, so problems with single clients don’t fail the request. Each client gets its own result with a status of created, updated, conflict or error (with a message).
Matching clients
A client is found byexternal_id (the client’s id in your case system), otherwise by name + street address + ZIP — all three. Send external_id whenever you have it.
- Blank or missing fields never erase what’s saved.
do_not_mailcan be turned on through the API, never off. Turning it off is done by a person, on the client’s record.- A client who already has a different
external_id(the same person, another matter) is reported as aconflictinstead of being merged. - When a client’s
settled_onchanges,new_settlementsays whether it’s a new settlement (may get another thank-you letter) or a correction. It defaults tofalseonPOST /clientsandtrueonPOST /cases/settled.
Paging
GET /clients and GET /prospects (with order=oldest) return a page of results and a next_cursor. Pass next_cursor back as cursor until it’s null. Treat cursors as opaque strings.
- A client change shows up in
GET /clientsabout a minute after it’s saved. - A prospect shows up in
GET /prospectsabout an hour after it’s added. This delay is what lets paging never skip a row.
Prospects are cold leads
GET /prospects returns the same prospects you see on your Prospects pages: your counties and your dates. Each one is a cold lead — a person who has not contacted your firm. Every record says so with "lead_type": "cold" and "source": "OutboundLegal". Keep them separate from people who reached out to you.
emailandphoneare included only if your account also has contact enrichment.- Fields you can’t see in the app are left out of the API too.
- If your county access changes (a county added, earlier dates opened), an old cursor gets
409 cursor_stale. Start again without a cursor. - Re-syncing from the start about once a week is a good habit. Matching on
idkeeps it from creating duplicates. order=newestreturns the newest prospects from the last 30 days, up to 500 at once, with no cursor. It’s meant for polling tools, like Zapier, that skip ids they’ve already seen.
The digital bundle
GET /prospects is part of the digital bundle. Without it, the request returns 403 bundle_required. The client endpoints don’t need the bundle. To add it, email support@outboundlegal.com.
