X-Access-Token header. Sign in to the app once first, or the API answers 403 Unknown account.
Things that shape how enrichment behaves:
- It is a batch job.
enrichment.enrichsubmits up to 250 contacts and returns arequest_id, not results.enrichment.resultsreads them back, usually 30 to 60 seconds later. - Polling is a normal state, not an error. Before the batch is ready,
enrichment.resultsanswers HTTP 200 withsuccess: falseand areason. This plugin returns that rather than throwing, so check the response before usingrecords. Usestatusto decide whether the batch is done: it readsin_progresswhile Dropcontact is still working andreadyonce it has finished.successdescribes whether this read returned usable records, which is a different question: a forced partial read returnssuccess: truewithstatus: in_progress. force_resultsreturns partial data. Pass it to get whatever has already been enriched instead of a not-ready answer; each record then carries its ownstatus.- Credits. One credit per contact for enrichment, refunded when no email is found; an email validation always spends one.
account.creditscosts nothing and reports the balance. - Input and output differ on two names. A record needs at least one company identifier (
company,website,company_linkedin,num_siren,siret), anemail, or alinkedinURL.num_sirencomes back assiren, andemailcomes back as a list of objects with aqualificationsuch asnominatif@pro. - Unknown input keys are ignored, not rejected. The record is still processed and the keys are listed under that record’s
errors.unexpected_field, so the plugin accepts extra keys. - Record level problems do not fail the call. Check
errorsandwarningsper record:only_contact_datameans nothing usable could be found, andonly_organization_datameans only the company was enriched. - Limits. 60 requests per second, 250 contacts per request, 15 kB per record.
- Webhooks. Dropcontact POSTs results to a callback URL, but it signs nothing, so the plugin reads results through
enrichment.resultsinstead of exposing a webhook route.webhook.setandwebhook.removemanage the account default that Dropcontact itself calls.
- 6 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
Check the credits leftWhat’s next
API reference
Every
dropcontact.api.* operation with input and output types.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.