Data Access API
The Data Access API is an enrichment API for retrieving firmographic, technographic, and professional profile data for companies and persons.
Base URL
Section titled “Base URL”https://api.onfire.ai/data-access-apiAuthentication
Section titled “Authentication”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-keyMissing or invalid keys return 401 Unauthorized.
Endpoints overview
Section titled “Endpoints overview”| Endpoint | Description |
|---|---|
POST /v1/company/enrich | Enrich companies by website or LinkedIn identifier. |
POST /v1/person/enrich | Enrich persons by LinkedIn URL, work email, or name + company domain. |
POST /v1/signals/get-signals | Retrieve intent signals for the authenticated tenant. |
POST /v1/prospecting/start | Kick 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}/results | Fetch the ranked prospects payload for a completed job. |
GET /health | Liveness and performance metrics. Exempt from authentication and rate limits. |
Rate limiting
Section titled “Rate limiting”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.
Billing
Section titled “Billing”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_dataistrue, confirmed against the number of results that returned an email or phone. - AI prospecting — each call to
POST /v1/prospecting/startconsumes prospecting credits against the tenant’s prospecting feature, independent of the enrichment quota.
Response conventions
Section titled “Response conventions”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 withnullvalues 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 } ]}Errors
Section titled “Errors”| Status | detail.status | Meaning |
|---|---|---|
| 400 | NO_COMPANIES_PROVIDED | No company identifiers in the request. |
| 400 | NO_PERSONS_PROVIDED | No person identifiers in the request. |
| 400 | NO_FIELDS_PROVIDED | No fields / options requested for the call. |
| 401 | — | Missing or invalid X-Api-Key header. |
| 429 | — | Burst or per-second rate limit exceeded. |
| 500 | ENRICHMENT_FAILED | Internal enrichment failure. |
| 500 | GET_SIGNALS_FAILED | Internal 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.
Next steps
Section titled “Next steps”POST /v1/company/enrich— enrich companies.POST /v1/person/enrich— enrich persons.POST /v1/signals/get-signals— fetch signals.POST /v1/prospecting/start— run AI prospecting against a company.- Schemas — shared request and response models.