Skip to main content
The editions release changes how the API authenticates callers, how it limits them, and the contract of a few endpoints. This page lists every change that affects an integration built against the current production API, and what to update. Each section gives the old behavior, the new behavior, and the guide that covers the topic in full. The page ends with a checklist to run against https://client-api.leak.center once the release is live.

What changes for your integration

Authenticate with an API key

To switch:
1

Create a key

Sign in to the dashboard as an Org Admin or System Admin. Open Manage → API tokens, click Create token, and copy the key from the Save your API token dialog. The key starts with dnst_ and is shown once. Your plan must include an API Calls allowance, or the page offers no Create token button.
2

Switch to the X-API-Key header

Send the key in the X-API-Key header on every request, and remove the Authorization header everywhere. The API reads Authorization before X-API-Key, so a leftover header decides which account the request acts as, or fails the request with 401.
3

Confirm the key

Call get_direct_org_info. A 200 with your organization’s id and name confirms the key works and acts as the organization you expect.
A request with no key returns 401 with {"detail": "Authentication credentials were not provided."}. An unknown, expired or revoked key returns 401 with {"detail": "Invalid or expired API key."}. Store the key in a secret manager, never in source code. Authentication covers expiry, revocation and replacing a key without downtime.

Act as one organization per key

To switch:
  • Remove org_id from every query string and request body. A key needs no organization parameter.
  • Expect 403 for another organization. A request that names any organization other than the key’s own returns 403 with {"detail": "You don't have access to this organization"}.
  • Serve clients from your own organization, or create a key per client workspace. Most partners register each client’s domains and other assets in their own organization, which the dashboard calls a workspace, and use one key for all of them. A client workspace that the client signs in to is a separate organization: as a System Admin, pick it in the workspace switcher at the top of the dashboard sidebar, open Manage → API tokens and create the key there. It belongs to that client workspace. Store a key per client workspace and pick the key, not a parameter. See Client organizations.
  • A client workspace’s plan applies to its key. A client workspace key gets that workspace’s plan features and allowances, and its requests count toward its API Calls allowance, not yours.
  • List clients from your own records. With a key, organization_list returns a one-item array with the key’s own organization. organization_info/{org_id} answers only for that organization’s id and returns 404 for any other.

Read organization data

get_direct_org_info, organization_info and organization_list return a smaller profile.
The response is trimmed here. Read an organization’s profile lists every field.
  • Country lookups use codes. country_list returns {code, name} instead of {id, name}, with ISO country names. If you store country IDs, map them to codes once: take each stored country’s name, match it to a name in the new list, and keep the code. ISO names can differ from the names you stored.
  • No license field replaces license. Your plan is in the dashboard under Manage → Buy more, and your usage under Manage → Usage. At call time, the refusals in Handle the new refusals tell you what the plan does not cover.

Plans replace credits and daily limits

Every request now passes these checks: Rate limits explains the per-second limit and the API Calls allowance. Plans and quotas explains plan features, allowances and slots.

Plan features

These areas need a feature in your plan. Without it, the endpoints return 403 with {"detail": "This feature is not included in your plan."}. Monitors check the data source of each rule. See Create monitors and set up delivery.

Metered allowances

These calls take units from a monthly allowance before the work starts. A call that ends in any status other than 2xx gets its units back. Allowances reset at 00:00 UTC on the 1st of each month. Endpoints that are new in this release, such as Attack Surface assessments and domain takedowns, state their allowances in their own guides: Start an assessment and Domain takedowns.

Capacity slots

Some resources have a fixed number of slots. Creating one more than the plan allows returns 409. Creating an inactive report schedule takes no slot. Activating it later with update_report_schedule does.

Handle the new refusals

Authentication, license, plan, capacity and allowance refusals now carry a detail field. The rate-limit 429 keeps message. Four new kinds of refusal appear. The new refusals: Where the API reports a license refusal, detail begins with “Your license is not active.” Some endpoints add a sentence after it.
Do not retry every 429. Tell them apart by the body: an allowance 429 has resource and period, a rate-limit 429 has retry_after_seconds. Only the per-second 429 clears within seconds.
A refusal from the license, plan or rate-limit check uses no API call, and an allowance or capacity refusal is refunded. Errors lists every error body the API returns.

Replace removed endpoints

Two routes are removed and return 404.

Start Domain monitoring scans

Domain monitoring is the API tag SpoofGuard. start_domain_analysis has a new contract. The call also has two new refusals:
  • Plan feature. Without the Domain Monitoring plan feature, it returns 403 with {"detail": "This feature is not included in your plan."}.
  • Monitored Assets slots. Each distinct domain you scan takes one Monitored Assets slot, from the same pool as your monitors. When every slot is taken, the call returns 409.
Two optional fields switch on modules: a logo_id adds Google Lens, and a wordlist_code adds domain word combination. Create logos, branding keyword sets, whitelists and word lists first, then pass their IDs. See Set up a brand library.
A domain that is not a registered asset returns 400:
Register domains with organization_assets_create or in the dashboard under Manage → Assets. When every Monitored Assets slot is taken, the call returns 409:
Scan an organization’s domain for look-alikes covers the flow.

Read quick search and Telegram results

The quick search Data Brokers entry answers inline

The response is trimmed to the one entry, and data to a few fields. items holds listings in the shape data_broker_search returns. Stop polling a forum task for the Data Brokers entry. Data Brokers describes the listings.

Two new source statuses

A source your plan excludes, or that a limit refuses, no longer reports submission_failed. It reports one of two new statuses, and the rest of the search goes on.
Treat both as final for that source. Neither uses an allowance unit. Search across all data sources lists every status.

Telegram totals can be estimates

telegram-search-create returns a new boolean, total_is_estimate. When it is true, total is an estimate, not an exact count, so do not present it as exact. Discord search already returned the same field. See Telegram.

Create monitors and set up delivery

A monitor is an alert rule in the API. alert_system_alert_create_alert_rule refuses the create before it reaches the monitoring service when every slot is in use:
The plan feature each data source needs: Every other source is in every plan. A rule whose service is missing or unknown also returns 403. Create and manage monitors and Delivery cover the rest.

Check the integration after the cut-over

Once the release is live at https://client-api.leak.center, run each check with your API key.

Endpoints