>unstuck engine
>Engine
>SignalsForty signal types, one pipeline>Waterfall enrichmentMulti-provider, ranked by reply rate>AudiencesSaved filters that update themselves
>Plays
>PLG AssistTurn free signups into enterprise pipeline>Inbound enrichmentEvery form fill, enriched and routed in seconds>ABMSurround the account, grade the buying committee
>Partners
>AgenciesPipeline as a service. With your name on top.>AdvocatesSix ways to advocate. Pick yours.
>Pricing
Book a Demo

> help

> Help index
  • 01Connecting a destination
  • 02Field mapping
  • 03Using the Signals API
  • 04Using the Enrichment API
  • 05Programmatic access with an API key
Contents

Help / 04 · Destinations & API

> Using the Enrichment API

A standalone reference for the Enrichment API. POST identity, get back enriched contact channels. Same engine as the in-app `Enrich` button.

1 min read·Never reviewed

TL;DR: POST identity hints, get back enriched fields. Same waterfall, same credit model, programmatic. Most usage looks like { email: "..." } → { phone, social_handles, work_email, company }.

Endpoint

POST /enrichment
Headers:
Authorization: Bearer <UNSTUCK_API_KEY>
Content-Type: application/json

Body:
{
"email": "person@company.com",
"linkedin_url": "https://linkedin.com/in/...",
"company_domain": "company.com",
"channels": ["work_email", "personal_email", "phone", "social_handles"]
}

At least one identity hint required. channels is optional — defaults to all four contact channels.

Identity-only mode

Sometimes you have a name + company and want to discover an email:

POST /enrichment/discover
Body:
{
"first_name": "Chloe",
"last_name": "Walker",
"company_domain": "westmarkrobotics.com"
}

Returns the same response shape. Discovery is slower (the waterfall has to find the contact, not just confirm it) and costs more credits per success.

Response

{
"record_id": "lead_abc123",
"channels": {
"work_email": {
"value": "chloe.walker@westmarkrobotics.com",
"source": "Provider A",
"confidence": 0.94,
"enriched_at": "2026-05-26T14:30:00Z"
},
"phone": null,
"social_handles": {
"value": "https://linkedin.com/in/chloewalker",
"source": "Provider C",
"confidence": 0.88,
"enriched_at": "2026-05-26T14:30:00Z"
}
},
"credits_used": 5
}

null channels mean the waterfall ran but no provider returned a usable value. Per-channel metadata includes source, confidence, and timestamp.

Bulk enrichment

For higher-volume work:

POST /enrichment/bulk
Body:
{
"records": [
{ "email": "..." },
{ "linkedin_url": "..." },
...
],
"channels": ["work_email"]
}

Up to 100 records per request. Returns an array of per-record results. Credit cost is summed across all successful enrichments.

Idempotency

The single-record endpoint is idempotent on (identity, channels). Re-requesting the same record + channels returns cached values; no credits charged. Pass force: true to bypass the cache.

Related

  • What enrichment is and the waterfall model
  • Enriching via API
  • Reading enrichment results and provider attribution
  • Using the Signals API
Previous03Using the Signals APIDestinations & APINext 05Programmatic access with an API keyDestinations & API

On this page

  • Endpoint
  • Identity-only mode
  • Response
  • Bulk enrichment
  • Idempotency
  • Related

Share

> wave is here.

Schedule it.
>unstuck engine
PricingBlogContact
>unstuck engine

The B2B GTM engine. Signal-led targeting, ICP-fit pipeline.

Product

  • Pricing
  • Comparisons
  • Blog
  • Handbook
  • Help

Company

  • Contact

Legal

  • Terms
  • Privacy

© 2026 Unstuck Engine. All rights reserved.

> wave is here.

Schedule it.
>unstuck engine
PricingBlogContact
>unstuck engine

The B2B GTM engine. Signal-led targeting, ICP-fit pipeline.

Product

  • Pricing
  • Comparisons
  • Blog
  • Handbook
  • Help

Company

  • Contact

Legal

  • Terms
  • Privacy

© 2026 Unstuck Engine. All rights reserved.