Skip to main content
5 min read

Batch jobs & webhooks

Run one enrichment. Run a thousand. The mechanics are the same. Every enrichment you submit becomes a job that abm.dev tracks for you — you submit, you check, you get told when it’s done. No queue to babysit. No state machine to wire by hand.

This article covers two things: how a single enrichment is created and read back, and the two ways abm.dev tells you a job finished — webhooks for batches, streaming for agent loops.

The two endpoints

There are two. That’s the whole surface.

HTTP
POST https://api.abm.dev/api/v2/enrichments
GET  https://api.abm.dev/api/v2/enrichments/{id}

POST creates an enrichment. GET reads it back by id. Both want a key in the header.

HTTP
x-api-key: YOUR_API_KEY
Content-Type: application/json

A request body lists the targets you’re enriching, each with one input to resolve from:

JSON
{
  "targets": [
    { "type": "person", "email": "[email protected]" }
  ]
}

A target’s input can be an email, a LinkedIn URL, or a company domain. Pick one. abm.dev resolves the rest.

Note

Send your key as either x-api-key (used here) or Authorization: Bearer on POST /api/v2/enrichments. Confirm against the live API reference.

What comes back

One response. Eighty-nine canonical fields — forty-three for the person, forty-six for the company — plus forty signals. Ten data sources, resolved into a single answer: LinkedIn, Companies House, Perplexity, Tavily, Hunter, and others.

Every value carries three things:

  • A source — which provider it came from.
  • A confidence— a score from 0 to 1. Higher means more sources agreed. Lower means they didn’t, or only one spoke.
  • A selection_reason — why that value was chosen.

A value is either cited or it isn’t returned. No fabricated facts. No silent fallbacks. If abm.dev can’t stand behind a field, you won’t see it.

See confidence scores and canonical fields for the full shape.

Jobs

Enrichment requests are tracked as jobs automatically. You don’t open a job, fill a queue, and close it. You POST an enrichment and abm.dev does the bookkeeping.

To check on one, read it back:

HTTP
GET https://api.abm.dev/api/v2/enrichments/{id}

The id comes from the create response. Poll it if you want a pull-based loop. Or let abm.dev push to you — that’s the next two sections.

Webhooks: for batches

Run a batch of enrichments and you don’t want to sit and poll. Webhooks fire when batch jobs finish. abm.dev calls you back; you react.

The mechanics of registering a webhook — the configuration surface, the payload shape, headers, signatures, retries — are not documented here, and we won’t guess at them. Check the current Jobs API reference and Enrichment API reference for the live specifics before you depend on them.

What’s settled: webhooks are the completion signal for batch work. You submit many, you get told when they’re done.

Streaming: for agent loops

An agent doesn’t want a callback to a server it doesn’t run. It wants the answer in the loop.

For that, abm.dev streams results in real time over SSE. The enrichment lands as it resolves, inside the same turn the agent asked. No polling. No second request. Right where the agent is working.

Two patterns, then:

  • Batch, server-side — fire many enrichments, take a webhook when they finish.
  • Agent loop — stream over SSE and read the result inline.

Wiring it from where you work

Claude

Add the MCP server. Settings → Connectors → Custom → paste https://mcp.abm.dev/mcp. The server exposes abm.dev’s enrichment tools inside Claude. The exact tool list isn’t documented here — see /for-agents.

Cursor, Claude Code, Windsurf

Paste a prompt telling the agent to read https://abm.dev/llms.txt, request a key, save it to .env, run one test enrichment, and report back with citations. The agent sets itself up.

Scripts and the terminal

Call REST directly. The two endpoints above are all you need. For a CLI, /docs/cli is the source of truth — binary name, commands, and flags are documented there, not here.

What it costs to run a batch

Per enrichment. No subscription. Credits never expire. Every source is included in the price — no per-source bills, no per-field charges. From about €0.29 per enrichment. Packs:

PackPrice
30€2.89
100€9.29
500€36.99 (best value)
2,000€119.99

A batch of five hundred costs what five hundred enrichments cost. Nothing else. The Playground is free to try. Free launch credits with code LAUNCHCODES. Full pricing at /#pricing.

Where to go next

abm.dev is operated by Foxley Farm Operations Ltd (UK Company No. 16392009), Oakham, United Kingdom. GDPR-compliant.

Stuck on a batch or a callback that won’t fire? Open a ticket.