Stibnite Person Data API

Use the API to look up individual people, search people by natural-language ICP, discover domains with strong contact coverage, list people at a company, and inspect usage for an API key.

Base URL
https://platform.stibnite.co
Format
JSON over HTTPS
Page size
100 max

Authentication

External API clients authenticate with an API key in the x-api-keyheader. Console users can also call the same endpoints with a signed-in bearer session from the hosted console.

x-api-key: stib_live_...

Endpoints

POST/v1/persons/search/jobs

Create async person search job

Queues an interpreted person search for worker execution. Job creation validates auth, rate limit, max_records, dedupe_token, native geo filters, and the search interpretation, but does not bill or record delivered rows until a worker succeeds. Each job returns one page; submit another job with next_cursor when more pages are available.

ParameterRequiredDescription
qYesNatural-language person search. Same semantics as GET /v1/persons/search.
location_cityNoOptional server-side company city filter.
location_stateNoOptional server-side company state filter.
limitNoPage size for the job result. Defaults to 100 and is capped at 100.
max_recordsNoTotal cap carried into the queued search.
cursorNoOpaque cursor when queueing a later page of a dynamic search.
dedupe_tokenNoOptional campaign or workflow token that prevents repeat delivery after the worker succeeds for this interpreted criteria and token.
dedupe_user_idNoOptional integration end-user ID for customers using a single API key across multiple users. When omitted, dedupe stays scoped to the API key's account.

Response fields

FieldTypeDescription
job_idstringOpaque async job identifier.
statusstringInitial job status. New jobs start as queued.
search_strategystringResolved execution path: taxonomy, dynamic, or indexed_dynamic.
interpretationobjectThe validated search interpretation stored with the job so workers do not reinterpret it.
created_atstringISO timestamp for when the job was queued.

Example response

{
  "job_id": "018f4f8f-1f42-7a8c-8cf2-8a4c2b0d3a4e",
  "status": "queued",
  "search_strategy": "indexed_dynamic",
  "interpretation": {
    "roles": [{ "key": "dynamic_role", "label": "CMO" }],
    "industries": [{ "key": "dynamic_industry", "label": "SaaS companies" }],
    "warnings": []
  },
  "created_at": "2026-05-17T18:42:10.000Z"
}
GET/v1/persons/search/jobs/{job_id}

Get async person search job

Returns a queued, running, succeeded, or failed async person search job. Poll this endpoint with backoff until the job reaches succeeded or failed. Succeeded jobs return the same interpreted result, pagination, data, and billable_records shape as synchronous person search.

ParameterRequiredDescription
job_idYesJob identifier returned by POST /v1/persons/search/jobs.

Response fields

FieldTypeDescription
job_idstringOpaque async job identifier.
statusstringCurrent lifecycle state: queued, running, succeeded, or failed.
search_strategystringResolved execution path: taxonomy, dynamic, or indexed_dynamic.
interpretationobjectThe validated search interpretation stored with the job.
paginationobjectPresent when the job succeeded. Same shape as synchronous person search pagination.
dataarray<Person>Present when the job succeeded. Returned person records for the completed job.
billable_recordsintegerPresent when the job succeeded. Worker-recorded billable record count.
errorstringPresent when the job failed.

Example response

{
  "job_id": "018f4f8f-1f42-7a8c-8cf2-8a4c2b0d3a4e",
  "status": "succeeded",
  "search_strategy": "indexed_dynamic",
  "interpretation": {
    "roles": [{ "key": "dynamic_role", "label": "CMO" }],
    "industries": [{ "key": "dynamic_industry", "label": "SaaS companies" }],
    "warnings": []
  },
  "pagination": {
    "limit": 100,
    "total_records": 101,
    "total_records_relation": "gte",
    "total_pages": 2,
    "next_cursor": "opaque-cursor-or-null",
    "max_records": 2000
  },
  "data": [
    {
      "person_id": "person_123",
      "first_name": "Jordan",
      "last_name": "Lee",
      "job_title": "Chief Marketing Officer",
      "business_email": "jordan@example.com",
      "company": {
        "company_id": "company_123",
        "name": "Example SaaS Co",
        "domain": "example.com"
      }
    }
  ],
  "billable_records": 1,
  "timings_ms": {
    "interpretation": 0,
    "search": 842,
    "total": 851,
    "search_strategy": "indexed_dynamic"
  }
}
GET/v1/persons/search/taxonomy

Person search taxonomy

Returns role and company-search dictionaries for suggestion chips and fast-path routing. Use this to keep user prompts inside precomputed or indexed paths where possible.

Response fields

FieldTypeDescription
fast_paths.taxonomyobjectPrecomputed role and industry keys with exact count support, plus role/industry compatibility metadata for safe suggestion chips.
fast_paths.indexed_dynamicobjectIndexed dynamic role buckets and company filters that avoid live title scans.
native_geo_parametersarray<string>Geo parameters accepted by /v1/persons/search for server-side company city/state filters.

Example response

{
  "fast_paths": {
    "taxonomy": {
      "description": "Precomputed person-search serving paths with exact count support.",
      "roles": [
        { "key": "chief_executive", "label": "CEO / Chief Executive Officer" },
        { "key": "owner", "label": "Owner" },
        { "key": "partner", "label": "Partner" },
        { "key": "real_estate_agent", "label": "Real estate agent" },
        { "key": "financial_advisor", "label": "Financial advisor" }
      ],
      "industries": [
        { "key": "marketing_agency", "label": "Marketing agencies" },
        { "key": "law_firm", "label": "Law firms" },
        { "key": "real_estate", "label": "Real estate brokerages" },
        { "key": "insurance_agency", "label": "Insurance agencies" },
        { "key": "software", "label": "SaaS and software companies" }
      ],
      "compatibility": {
        "law_firm": ["chief_executive", "owner", "partner", "attorney"],
        "real_estate": ["chief_executive", "owner", "real_estate_agent", "broker"],
        "healthcare_practice": ["chief_executive", "owner", "doctor", "provider"]
      },
      "example_queries": [
        "owners of insurance agencies in Las Vegas",
        "real estate agents in Nevada",
        "partners at law firms"
      ]
    },
    "indexed_dynamic": {
      "description": "Indexed dynamic role buckets that avoid bounded live title scans when combined with company filters, employee filters, or native geo filters.",
      "roles": [
        { "key": "owner", "label": "Owner", "phrases": ["owner", "owners", "office owner"] }
      ],
      "company_filters": ["location_city", "location_state"]
    }
  },
  "native_geo_parameters": ["location_city", "location_state"]
}
GET/v1/persons/lookup

Exact person lookup

Looks up people by exact identifiers. Provide at least one supported lookup field.

ParameterRequiredDescription
emailNoBusiness email address.
company_domainNoCompany domain. URLs are normalized to domains.
linkedin_urlNoLinkedIn profile URL.
phoneNoPhone number.

Response fields

FieldTypeDescription
dataarray<Person>People matching the supplied exact identifier fields.
data[].companyobjectCompany and firmographic context for each matching person.
billable_recordsintegerNumber of returned records billed for this response.

Example response

{
  "data": [
    {
      "person_id": "person_123",
      "first_name": "Jordan",
      "last_name": "Lee",
      "job_title": "Chief Marketing Officer",
      "business_email": "jordan@example.com",
      "mobile_phone": "+12085550123",
      "linkedin_url": "https://www.linkedin.com/in/jordan-lee",
      "company": {
        "company_id": "company_123",
        "name": "Example SaaS Co",
        "domain": "example.com",
        "phone": "+12085550100",
        "employee_count": 82,
        "industry": "Software",
        "sic": "7372",
        "naics": "541511",
        "city": "Boise",
        "state": "ID"
      }
    }
  ],
  "billable_records": 1
}
GET/v1/partner-customers/{partner_customer_id}/wallet

Partner customer wallet

Returns the wallet balance, active limits, usage, wallet policy, and limit state for one partner customer. Authenticate with a managed-account API key; ownership is scoped to the authenticated partner account.

ParameterRequiredDescription
partner_customer_idYesPartner customer identifier returned by POST /v1/partner-customers.

Response fields

FieldTypeDescription
partner_customer_idstringPartner customer identifier.
statusstringCurrent partner customer status, such as active or suspended.
wallet.available_credit_unitsinteger|nullRemaining wallet credit units from active grants. Null means no finite grant-backed wallet is configured.
wallet.granted_credit_unitsintegerActive credit units granted to the customer wallet.
wallet.applied_credit_unitsintegerCredit units applied to the current wallet period: lifetime for rollover wallets, current month for monthly_reset wallets.
wallet.credit_enforcement_modestringenforced hard-stops on customer limits and finite wallet balances; metered keeps usage reporting without customer-level hard stops.
wallet.credit_reset_policystringrollover carries unused wallet credits forward; monthly_reset renews the active grant balance each calendar month.
wallet.limitsobjectConfigured monthly and lifetime credit, search-session, and record-reveal limits.
wallet.usageobjectMonthly and lifetime customer usage counters.
wallet.limit_stateobjectComputed can_search, can_reveal, and block reason flags.

Example response

{
  "partner_customer_id": "customer_123",
  "status": "active",
  "allowed_result_actions": ["push_endpoint", "csv_export"],
  "result_action_labels": {
    "push_endpoint": "Add to HubSpot",
    "csv_export": "Export CSV"
  },
  "wallet": {
    "available_credit_units": 75,
    "granted_credit_units": 100,
    "applied_credit_units": 25,
    "monthly_applied_credit_units": 25,
    "lifetime_applied_credit_units": 25,
    "credit_enforcement_mode": "enforced",
    "credit_reset_policy": "monthly_reset",
    "active_credit_grants": 1,
    "monthly_credit_units_used": 25,
    "lifetime_credit_units_used": 25,
    "limits": {
      "monthly_credit_units": 100,
      "monthly_search_sessions": 20,
      "monthly_record_reveals": 100
    },
    "usage": {
      "monthly_credit_units": 25,
      "lifetime_credit_units": 25,
      "monthly_search_sessions": 4,
      "lifetime_search_sessions": 4,
      "monthly_record_reveals": 21,
      "lifetime_record_reveals": 21
    },
    "limit_state": {
      "can_search": true,
      "can_reveal": true,
      "search_block_reason": null,
      "reveal_block_reason": null
    },
    "allowed_result_actions": ["push_endpoint", "csv_export"],
    "result_action_labels": {
      "push_endpoint": "Add to HubSpot",
      "csv_export": "Export CSV"
    }
  }
}
POST/v1/partner-customers/{partner_customer_id}/wallet/credits

Grant partner customer wallet credits

Adds a virtual credit grant to one partner customer wallet and returns the updated wallet summary. Authenticate with a managed-account API key.

ParameterRequiredDescription
partner_customer_idYesPartner customer identifier returned by POST /v1/partner-customers.
credit_unitsYesPositive number of credit units to grant to this customer wallet.
credit_typeNoOptional grant type label, for example prepaid or partner.
starts_atNoOptional ISO timestamp when the grant becomes active. Defaults to now.
expires_atNoOptional ISO timestamp when the grant expires.
noteNoOptional internal note for the grant.

Response fields

FieldTypeDescription
credit_grantobjectCreated credit grant row.
partner_customer_idstringPartner customer identifier.
walletobjectUpdated wallet balance, usage, limits, and limit state.

Example response

{
  "credit_grant": {
    "id": "grant_123",
    "partner_customer_id": "customer_123",
    "credit_units_granted": 50
  },
  "partner_customer_id": "customer_123",
  "status": "active",
  "allowed_result_actions": ["push_endpoint", "csv_export"],
  "result_action_labels": {
    "push_endpoint": "Add to HubSpot",
    "csv_export": "Export CSV"
  },
  "wallet": {
    "available_credit_units": 125,
    "granted_credit_units": 150,
    "applied_credit_units": 25,
    "credit_enforcement_mode": "enforced",
    "credit_reset_policy": "monthly_reset",
    "limit_state": {
      "can_search": true,
      "can_reveal": true
    },
    "allowed_result_actions": ["push_endpoint", "csv_export"],
    "result_action_labels": {
      "push_endpoint": "Add to HubSpot",
      "csv_export": "Export CSV"
    }
  }
}
POST/v1/prospecting/embed-keys

Create prospecting public loader key

Creates a browser-safe public loader key for the hosted prospecting widget. The public loader key is restricted by allowed_origins and default customer wallet policy, and the public_key value is returned only on creation.

ParameterRequiredDescription
allowed_originsYesHTTPS origins allowed to bootstrap iframe sessions, for example https://partner.example. A full page path is normalized to its origin.
credit_enforcement_modeNoDefault customer wallet mode for auto-created customers: enforced for hard stops or metered for usage reporting without customer-level blocking. Defaults to metered.
credit_reset_policyNoDefault wallet reset policy for auto-created customers: monthly_reset or rollover.
limitsNoDefault monthly/lifetime credit, search-session, and record-reveal limits applied to auto-created customers.
result_delivery_urlNoHTTPS endpoint that receives full purchased records when the iframe user pushes selected, page, or all results.
result_delivery_ctaNoButton text shown in the iframe for the partner delivery endpoint action. Defaults to Push.
csv_export_enabledNoSet true to allow iframe users to export selected, page, or all purchased results as CSV. Defaults to false.

Response fields

FieldTypeDescription
public_keystringBrowser-safe public key to put in data-partner-key. Returned only once.
embed_keyobjectStored public loader key metadata, including origin allowlist and default customer wallet policy.

Example response

{
  "public_key": "stib_embed_pk_abc123",
  "embed_key": {
    "id": "embed_key_123",
    "key_prefix": "stib_embed_pk_abc",
    "label": "Partner app loader",
    "status": "active",
    "allowed_origins": ["https://partner.example"],
    "result_delivery_url": "https://partner.example/api/prospects",
    "result_delivery_cta": "Add to HubSpot",
    "csv_export_enabled": true,
    "default_credit_enforcement_mode": "metered",
    "default_credit_reset_policy": "monthly_reset",
    "default_limits": {
      "monthly_credit_units": null
    }
  }
}
POST/v1/prospecting/embed-sessions

Bootstrap prospecting embed session

Exchanges a public loader key and partner-owned external customer ID for a short-lived embed token. The API validates the browser Origin, upserts the scoped partner customer on first use, applies the public key defaults, and returns the token used by the hosted iframe.

ParameterRequiredDescription
partner_keyYesPublic loader key from POST /v1/prospecting/embed-keys or the console Prospecting page.
customer_idYesPartner-owned external customer ID. The first request creates the scoped partner customer; later requests reuse it.
customer_nameNoOptional display name for a first-time auto-created partner customer.
user_idNoOptional partner-owned user ID for usage attribution inside the customer wallet.

Response fields

FieldTypeDescription
tokenstringShort-lived signed embed token for the hosted iframe.
partner_customer_idstringInternal scoped partner customer identifier.
external_customer_idstringPartner-owned customer ID used for the bootstrap request.
expires_atstringISO timestamp when the embed token expires.

Example response

{
  "token": "signed-short-lived-embed-token",
  "partner_customer_id": "customer_123",
  "external_customer_id": "partner-customer-123",
  "expires_at": "2026-05-17T19:42:10.000Z"
}
GET/v1/prospecting/wallet

Prospecting embed wallet

Returns the wallet summary for the scoped customer in a prospecting embed token. Use this from hosted iframes or partner frontends without exposing the partner API key.

ParameterRequiredDescription
authorizationYesBearer embed token returned by POST /v1/prospecting/embed-sessions.

Response fields

FieldTypeDescription
partner_customer_idstringPartner customer identifier from the embed token.
statusstringCurrent partner customer status.
walletobjectScoped wallet balance, usage, limits, and limit state for the embed customer only.
allowed_result_actionsarray<string>Configured result actions available in the iframe, such as push_endpoint and csv_export.
result_action_labelsobjectDisplay labels for configured iframe actions, including the partner-provided result_delivery_cta for push_endpoint.

Example response

{
  "partner_customer_id": "customer_123",
  "status": "active",
  "allowed_result_actions": ["push_endpoint", "csv_export"],
  "result_action_labels": {
    "push_endpoint": "Add to HubSpot",
    "csv_export": "Export CSV"
  },
  "wallet": {
    "available_credit_units": 75,
    "granted_credit_units": 100,
    "applied_credit_units": 25,
    "monthly_applied_credit_units": 25,
    "lifetime_applied_credit_units": 25,
    "credit_enforcement_mode": "enforced",
    "credit_reset_policy": "monthly_reset",
    "active_credit_grants": 1,
    "monthly_credit_units_used": 25,
    "lifetime_credit_units_used": 25,
    "limits": {
      "monthly_credit_units": 100,
      "monthly_search_sessions": 20,
      "monthly_record_reveals": 100
    },
    "usage": {
      "monthly_credit_units": 25,
      "lifetime_credit_units": 25,
      "monthly_search_sessions": 4,
      "lifetime_search_sessions": 4,
      "monthly_record_reveals": 21,
      "lifetime_record_reveals": 21
    },
    "limit_state": {
      "can_search": true,
      "can_reveal": true,
      "search_block_reason": null,
      "reveal_block_reason": null
    },
    "allowed_result_actions": ["push_endpoint", "csv_export"],
    "result_action_labels": {
      "push_endpoint": "Add to HubSpot",
      "csv_export": "Export CSV"
    }
  }
}
POST/v1/prospecting/sessions/{search_id}/push

Push prospecting results to partner

Reveals and purchases the selected prospect previews, then posts full records server-side to the result_delivery_url configured on the partner customer or public embed key. The iframe button can use the configured result_delivery_cta. Supports selected prospect_ids, all records on the loaded page, or all filtered session results.

ParameterRequiredDescription
authorizationYesBearer embed token for the scoped partner customer.
search_idYesProspecting session ID returned by the iframe search endpoint.
selection_modeYesselected, page, or all_results.
prospect_idsNoPreview prospect IDs to deliver when selection_mode is selected or page.
applied_filtersNoCurrent refinement filters when pushing all_results.

Response fields

FieldTypeDescription
deliveredbooleanTrue when the partner endpoint accepted the delivery.
delivery_statusintegerHTTP status returned by the configured partner result_delivery_url.
pushed_recordsintegerNumber of full records posted to the partner endpoint.
net_new_billable_recordsintegerRecords newly purchased for this account and partner customer.
already_purchased_recordsintegerRecords already owned by this account and partner customer, delivered without rebilling.

Delivery headers

content-type: application/json
user-agent: stibnite-prospecting/1.0
stibnite-event-type: prospecting.records.pushed
stibnite-search-id: search_123

Partner delivery payload

{
  "event": "prospecting.records.pushed",
  "search_id": "search_123",
  "partner_customer_id": "customer_123",
  "partner_user_id": "user_123",
  "selection": {
    "mode": "selected",
    "prospect_ids": ["5x5-person-123"],
    "filters": {},
    "total_records": 1
  },
  "pushed_records": 1,
  "net_new_billable_records": 1,
  "already_purchased_records": 0,
  "data": [
    {
      "prospect_id": "5x5-person-123",
      "person_id": "person_123",
      "first_name": "Jane",
      "last_name": "Doe",
      "job_title": "VP Sales",
      "business_email": "jane@example.com",
      "mobile_phone": "+12085550123",
      "linkedin_url": "https://linkedin.com/in/janedoe",
      "company": {
        "company_id": "company_123",
        "name": "Example Inc",
        "domain": "example.com",
        "phone": "+12085550100",
        "linkedin_url": "https://linkedin.com/company/example",
        "revenue": 10000000,
        "employee_count": 42,
        "industry": "Software",
        "sic": "7372",
        "naics": "541511",
        "city": "Austin",
        "state": "TX"
      },
      "reveal_state": "purchased"
    }
  ]
}

Example response

{
  "delivered": true,
  "delivery_status": 202,
  "search_id": "search_123",
  "partner_customer_id": "customer_123",
  "selection": {
    "mode": "selected",
    "prospect_ids": ["5x5-person-123"]
  },
  "pushed_records": 1,
  "net_new_billable_records": 1,
  "already_purchased_records": 0
}
POST/v1/prospecting/sessions/{search_id}/export

Export prospecting results as CSV

Reveals and purchases the selected prospect previews, then returns full records as a CSV download when csv_export_enabled is true for the scoped partner customer. Supports selected prospect_ids, all records on the loaded page, or all filtered session results. Billing is only for net-new records owned by this account and partner customer.

ParameterRequiredDescription
authorizationYesBearer embed token for the scoped partner customer.
search_idYesProspecting session ID returned by the iframe search endpoint.
selection_modeYesselected, page, or all_results.
prospect_idsNoPreview prospect IDs to export when selection_mode is selected or page.
applied_filtersNoCurrent refinement filters when exporting all_results.

Response fields

FieldTypeDescription
content-typeheadertext/csv; charset=utf-8.
content-dispositionheaderAttachment filename for the generated CSV.
x-exported-recordsheaderNumber of full records included in the CSV.
x-net-new-billable-recordsheaderRecords newly purchased for this account and partner customer.
x-already-purchased-recordsheaderRecords already owned by this account and partner customer, exported without rebilling.

Example response

content-type: text/csv; charset=utf-8
content-disposition: attachment; filename="prospecting-search_123.csv"
x-exported-records: 1
x-net-new-billable-records: 1
x-already-purchased-records: 0

prospect_id,person_id,first_name,last_name,job_title,business_email,mobile_phone,linkedin_url,company_name,company_domain,company_phone,company_linkedin_url,company_revenue,company_employee_count,company_industry,company_sic,company_naics,company_city,company_state
5x5-person-123,person_123,Jane,Doe,VP Sales,jane@example.com,+12085550123,https://linkedin.com/in/janedoe,Example Inc,example.com,+12085550100,https://linkedin.com/company/example,10000000,42,Software,7372,541511,Austin,TX
GET/v1/domains

Company domain inventory

Returns non-billable company-domain metadata for accounts with enough known contacts. Use this first when scoring domain coverage before a follow-up /v1/persons/search request.

ParameterRequiredDescription
limitNoPage size. Defaults to 100 and is capped at 100.
cursorNoOpaque cursor from the previous response. Cursors are tied to the same min_contacts, industry, and location_state filters.
min_contactsNoOnly return domains with at least this many contacts. Defaults to 5.
industryNoCase-insensitive contains filter on firmographic primary_industry, for example Software.
location_stateNoOptional company state filter. Accepts a two-letter state code such as ID or a full state name such as Idaho.

Response fields

FieldTypeDescription
dataarray<Domain>Returned domain metadata for the current page.
data[].domainstringNormalized company domain.
data[].contact_countintegerNumber of known contacts for the domain.
data[].industrystringMinimal firmographic industry context when available.
data[].locationobjectMinimal company city/state context when available.
paginationobjectPage metadata. Includes next_cursor.

Example response

{
  "data": [
    {
      "domain": "example.com",
      "contact_count": 12,
      "industry": "Software Development",
      "location": {
        "city": "Boise",
        "state": "ID"
      }
    }
  ],
  "pagination": {
    "next_cursor": null
  }
}
GET/v1/companies/{domain}/people

Company people

Returns people associated with a normalized company domain.

ParameterRequiredDescription
domainYesCompany domain path segment, for example example.com.
limitNoPage size. Defaults to 100 and is capped at 500.
max_recordsNoTotal cap across company people pages.
cursorNoOpaque cursor from the previous response.

Response fields

FieldTypeDescription
dataarray<Person>People associated with the normalized company domain.
paginationobjectPage metadata. Includes limit, next_cursor, and max_records when supplied.
data[].companyobjectCompany and firmographic context for each returned person.
billable_recordsintegerNumber of returned records billed for this response.

Example response

{
  "data": [
    {
      "person_id": "person_123",
      "first_name": "Jordan",
      "last_name": "Lee",
      "job_title": "Chief Marketing Officer",
      "business_email": "jordan@example.com",
      "company": {
        "company_id": "company_123",
        "name": "Example SaaS Co",
        "domain": "example.com",
        "employee_count": 82,
        "industry": "Software"
      }
    }
  ],
  "pagination": {
    "limit": 100,
    "next_cursor": null
  },
  "billable_records": 1
}
POST/v1/webhooks/endpoints

Create webhook endpoint

Registers an account-scoped HTTPS webhook endpoint for async person-search job events. The signing_secret is returned only once on creation; store it and verify the stibnite-signature HMAC header on every delivery. Webhook management is API-first today; use GET /v1/webhooks/endpoints to list registered endpoints because the console does not expose webhook setup yet.

ParameterRequiredDescription
urlYesHTTPS endpoint that receives webhook POST requests.
descriptionNoHuman-readable label for the endpoint.
eventsNoAllowed event types: person_search.job.succeeded and person_search.job.failed. Defaults to both.

Response fields

FieldTypeDescription
idstringWebhook endpoint identifier.
urlstringDestination URL.
eventsarray<string>Subscribed event types.
statusstringEndpoint status.
signing_secretstringHMAC signing secret returned only when the endpoint is created.

Example response

{
  "id": "endpoint_123",
  "url": "https://customer.example/webhooks/stibnite",
  "description": "CRM enrichment workflow",
  "events": ["person_search.job.succeeded", "person_search.job.failed"],
  "status": "active",
  "created_at": "2026-05-17T18:42:10.000Z",
  "signing_secret": "whsec_returned_once"
}
DELETE/v1/webhooks/endpoints/{endpoint_id}

Delete webhook endpoint

Deletes an account-scoped webhook endpoint and stops future deliveries to that URL.

ParameterRequiredDescription
endpoint_idYesWebhook endpoint identifier returned by POST /v1/webhooks/endpoints.

Response fields

FieldTypeDescription
deletedbooleanTrue when the endpoint was deleted.

Example response

{
  "deleted": true
}
GET/v1/usage

Usage summary

Returns usage ledger totals for the calling API key.

Response fields

FieldTypeDescription
requestsintegerCount of successful requests recorded for the authenticated API key.
billable_recordsintegerTotal records billed to the authenticated API key.

Example response

{
  "requests": 12,
  "billable_records": 34
}

Errors And Billing

Billing

Lookup and search endpoints bill only returned records. Broad searches do not bill for records beyond the current response page. Domain inventory requests are tracked for usage but are non-billable.

Rate Limits

Rate-limited responses return 429 with x-ratelimit-limit, x-ratelimit-remaining, and x-ratelimit-reset headers.

Bad Requests

Invalid cursors, missing lookup fields, unsupported searches, and invalid numeric caps return 400 with a JSON error message.