⟨ FOR DEVELOPERS AND AI BUILDERS ⟩

Company and person data your agents can call.

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.

TYPED END TO ENDMCP NATIVEBUDGETS BELOW YOUR CODE
60+
tools on one surface

Company, person, enrichment, signal, list and audience capabilities behind POST /api/v1, typed end to end.

3
surfaces, one meter

REST, MCP and the CLI call the same registries under the same credit ledger and scopes.

402
at the ceiling

Budget exhaustion is a status code you handle in code, ahead of any invoice.

1
key per surface

Scoped bearer keys minted per product, cron or agent, revocable in one click with the audit log behind them.

⟨ THE JOB TODAY ⟩

Where the week actually goes.

01 /

Provider sprawl

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.

02 /

Waterfalls are your problem to build

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.

03 /

Agents need governed tools

Handing an LLM raw vendor keys is how budgets die. Assistants need scoped, metered, schema-described tools with hard ceilings and a log.

⟨ ONE CALL ⟩POST /api/v1
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 }
⟨ WITH ASTROFABRIC ⟩

What changes when agents carry the work.

One surface, typed end to end

Company discovery, enrichment, people search, verification, signals, lists and audiences behind POST /api/v1, zod-validated inputs, structured errors, OpenAPI 3.1 published.

openapi 3.1 · zod schemas

The waterfall, done

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.

sources: ["waterfall:2/4"]

MCP native

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.

one URL · claude · cursor

Async that behaves

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.

signed HMAC · reserve → execute → settle
⟨ HOW IT WORKS ⟩

From objective to delivered rows.

  1. 01 · AUTHENTICATE

    Mint a scoped key

    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.

  2. 02 · CALL

    Call a tool

    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.

  3. 03 · ENRICH

    Let the waterfall run

    One call per field family; sources are tried in order and only the one that answered is charged, with provenance in the response.

  4. 04 · QUEUE

    Go async at list scale

    Queue a list job, poll or take a signed webhook with at-least-once delivery, and make retries safe with an Idempotency-Key.

  5. 05 · CONNECT

    Hand tools to your agent

    One MCP URL exposes the catalog to Claude, Cursor or your own agents, scope-checked per call under the same meter.

  6. 06 · DELIVER

    Deliver and observe

    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.

⟨ THE DATA ON EVERY ROW ⟩
Company record by domainDomain from company nameTechnology stackFunding eventsHiring signalsCompany newsBuying-intent companiesPerson by emailPeople by title and companyEmail verification statusDirect phoneSource family per fieldCost per callJob status and webhook eventsPer-key usageWorkspace ceiling remaining
⟨ USE CASES ⟩

The jobs this page was written for.

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.

→ One endpoint replaces four vendor integrations.

Nightly enrichment cron

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.

→ Your data warehouse stays current without a vendor pipeline to maintain.

Tools for your own agent

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.

→ An agent with governed data access and a hard ceiling.

Lead scoring in your pipeline

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.

→ Scoring logic that lives in your code with data that lives in ours.
⟨ BEFORE AND AFTER ⟩

Shipping a data feature, before and after

By handWith AstroFabric
IntegrationsFour vendors, four auth flows, four schemasOne key, one envelope, one OpenAPI spec
WaterfallYour retry, dedupe and fallback codeDone server-side, provenance returned
BillingCharged per attempt, reconciled monthlyCharged per answered field, visible per call
BudgetsDiscovered on the invoiceReserved ahead, 402 at the ceiling
AgentsRaw vendor keys in a promptScoped MCP tools with a log
ErrorsVendor-specific strings401/402/403/409/422 with machine-readable bodies
⟨ MISSIONS YOU WOULD RUN ⟩

Described in plain language. Delivered end to end.

DATA FOR AGENTS

Enrichment endpoint for your product

POST a domain or an email, render the company record and verified contact in your product. One endpoint replaces four vendor integrations.

EnrichmentEmail VerificationREST
ONE MISSION · EVIDENCE ATTACHED
DATA FOR AGENTS

Nightly enrichment cron → your DB

A cron that enriches new signups with firmographics, stack and intent, writes back to your database, and posts anomalies to Slack.

FirmographicsIntent DataWebhooks
ONE MISSION · EVIDENCE ATTACHED
DATA FOR AGENTS

MCP: your assistant, our data tools

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.

MCPAgents
ONE MISSION · EVIDENCE ATTACHED

Three of a hundred. The full playbook library ships in every workspace, and anything you can describe becomes a mission.

⟨ GOVERNED AUTONOMY ⟩

Safe enough to actually turn on.

⟨ CONTROL PLANE ⟩ENFORCED AT RUNTIME · NOT ADVISORY

Scoped keys

Mint keys per surface with exactly the scopes they need. Revoke in one click; the audit log remembers.

Tenant isolation is structural

Every query is workspace-bound at the data layer with row-level security behind it. Careless code returns zero rows.

Contract-grade errors

401/403/402/409/422 with machine-readable bodies. Budget exhaustion is a status code you handle in code, ahead of any invoice.

FAQ

Questions, answered.

What does the developer surface include?

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.

How is data provenance exposed?

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.

How do we meter and cap programmatic usage?

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.

Is there a sandbox or free tier for development?

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.

How do async jobs and webhooks work?

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.

Which SDKs and clients exist?

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.

What are the rate limits?

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.

How does tenant isolation work under the API?

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.

⟨ DEPLOY ASTROFABRIC ⟩

Ship the data feature this sprint.

One key. One schema. Company, person and signal data behind it.