Skip to main content
The OutboundLegal API lets your tools do three things:
  1. Keep your Clients list up to date from your case system — add and update clients (POST /clients) and read them back (GET /clients).
  2. Mark a case settled (POST /cases/settled), which is what case-settled client letters wait for.
  3. Send our prospects to your CRM as cold leads (GET /prospects). Digital bundle only.
Prefer not to write code? See Connect with Zapier.
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

All requests and responses are JSON. Responses are never cached.

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:
A key looks like 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.
Use 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 get 429 rate_limited with a Retry-After header: the number of seconds to wait before trying again.

Errors

Every error has the same shape:
Branch on 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 by external_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_mail can 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 a conflict instead of being merged.
  • When a client’s settled_on changes, new_settlement says whether it’s a new settlement (may get another thank-you letter) or a correction. It defaults to false on POST /clients and true on POST /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 /clients about a minute after it’s saved.
  • A prospect shows up in GET /prospects about 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.
  • email and phone are 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 id keeps it from creating duplicates.
  • order=newest returns 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.