Enrichment inside your product
POST a signup email and render the company record, the person’s title and a verified contact in your own UI, with provenance shown beside each value.
Sixty-plus data capabilities and autonomous AI agents behind one typed REST surface, an MCP server and a CLI: identify companies, enrich records, verify contacts, read signals and push audiences from your product, your cron jobs or your own agents.
Company, person, enrichment, signal, list and audience capabilities behind POST /api/v1, typed end to end.
REST, MCP and the CLI call the same registries under the same credit ledger and scopes.
Budget exhaustion is a status code you handle in code, ahead of any invoice.
Scoped bearer keys minted per product, cron or agent, revocable in one click with the audit log behind them.
Shipping one enrichment feature means integrating a company-data vendor, a contact vendor, a verifier and an intent feed, each with its own auth, schema and billing surprise.
Try source A, fall back to B, dedupe, normalize, retry, and pay for the misses. The plumbing is most of the work and none of the product.
Handing an LLM raw vendor keys is how budgets die. Assistants need scoped, metered, schema-described tools with hard ceilings and a log.
curl -X POST .../api/v1/tools/person_enrich \
-H "Authorization: Bearer ek_live_..." \
-d '{"email": "jane@acme.com"}'
{ "ok": true,
"person": { "title": "VP Sales", "company": "acme.com",
"email_status": "valid", "phone": "+1…" },
"sources": ["waterfall:2/4"], "cost_usd": 0.06 }Company discovery, enrichment, people search, verification, signals, lists and audiences behind POST /api/v1, zod-validated inputs, structured errors, OpenAPI 3.1 published.
One call per field family; the platform tries sources in order, charges only for the one that answered and returns the provenance with the value.
One URL turns the whole data catalog into tools inside Claude, Cursor or your own agents, OAuth sign-in, scope-checked per call, same meter as REST.
Queue list-scale jobs, poll or take signed webhooks with at-least-once delivery. Idempotency-Key makes retries safe; the 402 at the ceiling is clean and catchable.
A key per surface with exactly the scopes it needs: read for enrichment in your product, write for a cron that upserts, none for a demo.
POST /api/v1/tools/{name} with a zod-validated body; company_lookup, person_enrich, email_verify and the rest share one envelope and one error shape.
One call per field family; sources are tried in order and only the one that answered is charged, with provenance in the response.
Queue a list job, poll or take a signed webhook with at-least-once delivery, and make retries safe with an Idempotency-Key.
One MCP URL exposes the catalog to Claude, Cursor or your own agents, scope-checked per call under the same meter.
Write results to your database or push to a connected CRM, and read the ledger, the audit log and per-key usage from the API.
POST a signup email and render the company record, the person’s title and a verified contact in your own UI, with provenance shown beside each value.
A cron enriches the day’s new accounts with firmographics, stack and intent, writes back to your database, and posts anomalies to Slack through a signed webhook.
Add the MCP URL to your agent config; it calls company, person and signal tools under your workspace budget, with structured errors it can reason about.
Reverse-enrich inbound leads, score them against the ICP over the API and route the result into your CRM or queue, all from a worker you already run.
| By hand | With AstroFabric | |
|---|---|---|
| Integrations | Four vendors, four auth flows, four schemas | One key, one envelope, one OpenAPI spec |
| Waterfall | Your retry, dedupe and fallback code | Done server-side, provenance returned |
| Billing | Charged per attempt, reconciled monthly | Charged per answered field, visible per call |
| Budgets | Discovered on the invoice | Reserved ahead, 402 at the ceiling |
| Agents | Raw vendor keys in a prompt | Scoped MCP tools with a log |
| Errors | Vendor-specific strings | 401/402/403/409/422 with machine-readable bodies |
POST a domain or an email, render the company record and verified contact in your product. One endpoint replaces four vendor integrations.
A cron that enriches new signups with firmographics, stack and intent, writes back to your database, and posts anomalies to Slack.
Add the MCP URL to your agent config; it calls company, person and signal tools under your workspace’s budget and returns provenance with every value.
Three of a hundred. The full playbook library ships in every workspace, and anything you can describe becomes a mission.
Mint keys per surface with exactly the scopes they need. Revoke in one click; the audit log remembers.
Every query is workspace-bound at the data layer with row-level security behind it. Careless code returns zero rows.
401/403/402/409/422 with machine-readable bodies. Budget exhaustion is a status code you handle in code, ahead of any invoice.
A public REST API with scoped bearer keys, an MCP server so assistants like Claude and Cursor use the data tools natively, a zero-dependency CLI, signed webhooks for job completions, and an OpenAPI spec generated from the same registries the runtime executes, so the docs cannot drift from reality.
Every enriched value returns with the source family that filled it and the date, and list-scale jobs return per-field coverage. Your product can show where a number came from, and your agents can decide whether a value is fresh enough to act on.
Every call meters against the same credit ledger as console missions, with per-workspace ceilings and daily caps enforced at the platform level. Paid sources reserve before they run and settle after, keys are scoped and revocable individually, and a leaked credential is a one-key rotation.
Plans start at $65 per month with credits included, and a development key can be scoped read-only with its own daily cap so a test loop cannot spend the workspace ceiling. Every response carries its cost, and tool lookups that find nothing are free, so exploratory calls stay cheap.
List-scale calls return a job id; poll it or register a webhook endpoint and receive signed events with at-least-once delivery when the job completes or fails. Signatures are HMAC over the body, an Idempotency-Key on the request makes retries safe, and event history is readable from the API.
The API is plain HTTPS with JSON bodies and an OpenAPI 3.1 spec, so generated clients work in any language. A zero-dependency CLI wraps every endpoint for scripts and CI, and the MCP server exposes the same tools to Claude, Cursor and any MCP-capable agent framework.
Limits are set per key and per workspace, returned as headers on every response, and exceeded calls get a 429 with a retry-after value. List jobs queue rather than fail, so a burst of ten thousand rows becomes one job with progress you can poll instead of a retry storm.
Every query is bound to the workspace behind the key at the data layer, with row-level security beneath it, so a bug in your code returns zero rows rather than another tenant’s. Keys are scoped per surface, revocable individually, and every call is attributed in the audit log.
One key. One schema. Company, person and signal data behind it.