Skip to content

Data Access API

The Data Access API is an enrichment API for retrieving firmographic, technographic, and professional profile data for companies and persons.

https://api.onfire.ai/data-access-api

All endpoints require an X-Api-Key header. Your API key determines your tenant identity, rate limits, and available query fields.

X-Api-Key: your-api-key

Missing or invalid keys return 401 Unauthorized.

EndpointDescription
POST /v1/company/enrichEnrich companies by website or LinkedIn identifier.
POST /v1/person/enrichEnrich persons by LinkedIn URL, work email, or name + company domain.
POST /v1/signals/get-signalsRetrieve intent signals for the authenticated tenant.
POST /v1/prospecting/startKick off an AI prospecting run for a company; returns a job_id.
GET /v1/prospecting/jobs/{job_id}Poll status for a prospecting job.
GET /v1/prospecting/jobs/{job_id}/resultsFetch the ranked prospects payload for a completed job.
GET /healthLiveness and performance metrics. Exempt from authentication and rate limits.

Requests are rate-limited per IP: a burst quota over a sliding window and a maximum request rate per second. If you exceed either limit you will receive a 429 Too Many Requests response.

{
"detail": "Rate limit exceeded"
}

The health check endpoint is exempt from rate limiting.

Credits are consumed per entity in each request. Only successfully matched results are billed. Contact data (email/phone) is billed separately under the contact-data feature.

  • Company / person enrichment — charged per input entity upfront, confirmed against the matched count.
  • Contact data — charged per input person when include_contact_data is true, confirmed against the number of results that returned an email or phone.
  • AI prospecting — each call to POST /v1/prospecting/start consumes prospecting credits against the tenant’s prospecting feature, independent of the enrichment quota.

All enrichment endpoints return a results array in the same order as the input identifiers, so you can align rows by index. Each result contains:

  • identifier — the caller-supplied identifier fields, echoed back. Use this to correlate the result with the input row you sent.
  • data — the enriched fields you requested. Keys are present with null values when a field was requested but no data is available.
  • matched — whether a matching record was found. Only matched results are billed.

Correlating results with your input — external_id

Section titled “Correlating results with your input — external_id”

Every identifier (company or person) accepts an optional external_id string. It’s not used for matching — Onfire ignores it when looking up the record. Its only purpose is to be echoed back unchanged in the result’s identifier object so you can stitch the response back to the row you sent.

Use it whenever index-based alignment isn’t enough — for example when you’re enriching a CSV, a CRM list, or any batch where each input has its own primary key. Pass any string you want: a row number, a UUID, a Salesforce account id, etc.

// Request
{ "companies": [{ "website": "crowdstrike.com", "external_id": "row_42" }] }
// Response
{
"results": [
{
"identifier": { "website": "crowdstrike.com", "external_id": "row_42" },
"data": { "name": "crowdstrike", "industry": "computer & network security" },
"matched": true
}
]
}
Statusdetail.statusMeaning
400NO_COMPANIES_PROVIDEDNo company identifiers in the request.
400NO_PERSONS_PROVIDEDNo person identifiers in the request.
400NO_FIELDS_PROVIDEDNo fields / options requested for the call.
401Missing or invalid X-Api-Key header.
429Burst or per-second rate limit exceeded.
500ENRICHMENT_FAILEDInternal enrichment failure.
500GET_SIGNALS_FAILEDInternal failure while fetching signals.

4xx validation errors always return a JSON body with a structured detail object containing status and message. 401 and 429 return a plain string detail.