Skip to main content
The export service turns a result set into a file. You create an export job, poll it until it is COMPLETE, then download the file. One flow covers Raw Data, stealer logs, Data Brokers listings, saved Telegram and Discord searches, monitor matches and more. Exports belong to your organization. Every export your organization creates, from the API or the dashboard, appears in list_exports. An export and its file stay until you delete them. Some sources have a file endpoint of their own, and original leak files have a separate flow. Downloads and exports compares the routes.

Availability and cost

Availability: every plan with a license in force. No plan feature is checked. Cost: no metered allowance. With an API key, every call counts once toward your monthly API Calls allowance: the create, each poll, the download and the delete. Only 2xx responses count. See Rate limits. When your organization’s license is not active, every endpoint on this page returns 403:
They never return the plan-feature 403, an allowance 429 or a capacity 409. See Plans and quotas.

How an export runs

create_export checks the catalog entry, the file type and the arguments, then records the export and returns 201. What happens next depends on the entry.
  • Built during the create call. Some entries, such as monitor matches and ransomware victims, build the file before create_export answers. The response then already reads COMPLETE or FAILED.
  • Built in the background. The other entries usually answer IN_PROGRESS and build the file afterwards. If the job cannot start, the response already reads FAILED. The service checks running exports every 30 seconds, so the status changes in 30-second steps.

Export a result set

1

Find the catalog entry

list_export_services returns the active catalog entries.
Each entry describes one exportable result set:
  • id is what you send to create_export. It differs between environments, so look it up every time.
  • name is stable. Match the entry by name. Catalog entries lists the common ones.
  • allowed_types lists the file formats the entry accepts. Formats differ per entry.
  • args.params lists the arguments. Each has a name, a type and required. A valid_values string, when present, lists the accepted values, comma-separated.
2

Create the export

create_export takes three fields:
  • service: the entry’s id.
  • type: one of the entry’s allowed_types.
  • args: an object with the entry’s arguments. Always send it, even as {}.
Arguments are type-checked exactly:No argument can be null. Leave an optional argument out instead.user is null for exports created with an API key.
3

Poll until it ends

get_export reads the export by its id in the query string. It returns the same object as create_export.
Stop polling on COMPLETE or FAILED. Poll every 30 seconds. Faster polling does not speed up the export, and each poll is an API call.
4

Download the file

download_export returns the file of a COMPLETE export. The file is named after the export id, such as 9876.csv, and -OJ saves it under that name.

Catalog entries

These entries cover the most common result sets. Match them by name. The catalog can hold more, so read list_export_services for the full list and for each entry’s optional arguments. What the optional arguments do:
  • ControlLeak, ControlLeakDistinct, ControlCertificate, ControlCreditCard export the records the query matches, newest first. Change the order with sortField and sortDirection (default createdAt, desc). Export only some records with queryIds and includeIdStrategy; see Export only some records.
  • ControlCertificate also takes the seven risk filters of the SSL search as booleans: suspiciousKeywords, shortValidity, wildcardCertificates, highRiskTlds, excludeOwnDomain, onlyOwnDomain and sensitiveSubdomains. excludeOwnDomain and onlyOwnDomain cannot both be true.
  • ControlCreditCard takes saleCategory: free (the default), on_sale or all.
  • DataBrokers takes the listing filters site_id, data_type, country, state, city, name, seller, currency, min_price, max_price, min_date, max_date (YYYY-MM-DD), scraped_since (ISO 8601) and is_available. The file holds up to 100,000 listings, newest scraped first. CSV and XLSX put each listing on one row and write details as JSON text. A search with no listings gives one row: {"message": "No records found"}.
  • TelegramSearch and DiscordSearch take the search_history_id that the search returned, sent as history_id.
  • AlertMatch exports every row of the match. Send page (and page_size) to export one page only. show_excluded, filters and ordering work as on the match results endpoint.
  • RansomWatchVictim takes company, domain, targetedCountry, targetedRegion, industryType, startDate, endDate (YYYY-MM-DD) and sort_by (DATE, GROUP, REGION, COUNTRY, COMPANY, INDUSTRY or NONE). targetedCountry, targetedRegion, industryType, startDate and endDate are camelCase here, unlike targeted_country, targeted_region, industry_type, start_date and end_date on the search endpoint. company, domain and sort_by keep their names.
  • DomainSearch takes domain, source, start_date, end_date and ordering, with the same meaning as on domain_search_export.

Export only some records

The Control... entries export the query’s matches. To export a selection, pass the record id values from your search results in queryIds and set includeIdStrategy:
Here 3 is the id of the ControlLeak entry in this environment. Look yours up in the catalog.

Find past exports

list_exports returns your organization’s exports, newest first.
The response holds count, next, previous and results, a list of export objects. Move through pages with page. next is null on the last page; do not call the next URL itself.

Delete exports

delete_exports deletes exports and their files. Pass the export id values in ids, comma-separated.
  • The message lists the exports that were deleted. An id that is not one of your organization’s exports is skipped.
  • If any listed export is IN_PROGRESS, nothing is deleted and the call returns 400. Wait for it to end, then delete.
  • A delete cannot be undone.

Errors

A 504 on create_export does not prove the export was not created. The export is recorded before its file is built. Check list_exports before you create it again. Every error body the API returns is listed in Handle API errors.

Endpoints