Getting Started
Credits & Testing Tips
How Credits Work
Credits are checked on submission and deducted on delivery
When you submit an asynchronous request, we check that your balance covers the maximum the request could cost. Nothing is reserved. Credits are then deducted only for what is actually handed over, so the final charge is frequently lower than or equal to the amount checked — and a profile that yields nothing costs nothing at all.
Cost per Delivered Item
-
All costs draw on a single credit balance. Requesting both email and mobile for one profile is checked at 6 credits on submission; if only the email comes back you are charged 1.
What Costs Nothing
Four things never consume a credit:
- POST /search — discovery is free, including the has_* flags that tell you what data exists.
- GET /enrich — retrieving a result, however many times you poll.
- A row that comes back not_found — nothing was delivered, so nothing is charged.
- A request that ends interrupted before any data was handed over.
Tips for Testing
A sequence that exercises the whole flow without spending much:
- Start with /search. It is free and unlimited by credits, so use it to get a real contactId and linkedinUrl to work with.
- Then try /enrich with only email set to true. That caps the check at 1 credit instead of 6, which is enough to prove your polling or webhook wiring works.
- Poll GET /enrich as often as you like. It is free and not counted against any daily allowance.
- Test the empty case deliberately. Enrich a profile you expect to yield nothing and confirm your code handles a not_found row that carries no other keys.
- Use custom from day one. It is echoed back untouched, so wire your own record id through it rather than maintaining a separate map of request ids.
Example — a 1-credit smoke test:
{
"params": {
"profile": {
"linkedinUrl": "linkedin.com/in/qwerty",
"enrichFields": { "email": true }
},
"name": "smoke-test",
"custom": { "crmId": "A-1024" }
}
}
Remember that every asynchronous endpoint returns pending first. Branch on status, never on whether data exists — that is the single most common integration mistake.