/v2/reveal/emailsWebhook result: Documentation
| Endpoint | POST /v2/reveal/emails |
| Credit cost | 1 credit / email found (not charged for notFound) |
| Response | Asynchronous — results delivered to your webhook |
| Max per request | 500 person IDs |
Person IDs come from the id field in Search People or Enrich Person responses.
curl -X POST "https://api.ocean.io/v2/reveal/emails" \
-H "X-Api-Token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"personIds": ["abc123", "def456", "ghi789"],
"webhookUrl": "https://yourapp.com/webhooks/ocean-emails"
}'import requests
response = requests.post(
'https://api.ocean.io/v2/reveal/emails',
headers={'X-Api-Token': 'YOUR_API_TOKEN'},
json={
'personIds': ['abc123', 'def456', 'ghi789'],
'webhookUrl': 'https://yourapp.com/webhooks/ocean-emails',
},
)
data = response.json() # {"status": "in progress"} — results arrive at your webhookconst response = await fetch('https://api.ocean.io/v2/reveal/emails', {
method: 'POST',
headers: { 'X-Api-Token': 'YOUR_API_TOKEN', 'Content-Type': 'application/json' },
body: JSON.stringify({
personIds: ['abc123', 'def456', 'ghi789'],
webhookUrl: 'https://yourapp.com/webhooks/ocean-emails',
}),
});
const data = await response.json(); // {"status": "in progress"} — results arrive at your webhookImmediate response:
{ "status": "in progress" }Webhook payload:
{
"results": [
{ "personId": "abc123", "email": { "address": "[email protected]", "status": "verified" } },
{ "personId": "def456", "email": { "address": "[email protected]", "status": "guessed" } },
{ "personId": "ghi789", "email": { "address": null, "status": "notFound" } }
]
}| Status | Meaning | Charged? |
|---|---|---|
verified |
SMTP-confirmed deliverable via ZeroBounce | Yes |
guessed |
High-confidence pattern match, not SMTP-verified | Yes |
catchAll |
ZeroBounce-verified — catch-all domain accepts all inbound addresses | Yes |
notFound |
Could not find or verify | No |
apiToken string x-api-token string webhookUrl string Required 200 Successful Responsestatus enum Required "in progress""webhook sent"400 Bad Requestdetail enum Required "Conflicting API tokens provided in query parameters and headers"402 Payment Requireddetail enum Required "Insufficient email credits"403 Forbiddendetail enum Required "API token should be provided in headers or query parameters""Current API token is not registered in our database"404 Not found422 Validation Errormsg string Required type string Required input any What's the difference between verified and guessed?
verified means the address was SMTP-confirmed deliverable via ZeroBounce. guessed means the address was constructed from a known domain pattern with high confidence, but wasn't SMTP-checked. verified will have lower bounce rates in outreach.
What if I have more than 500 IDs?
Split into batches of up to 500 and send as separate requests in parallel.