Ocean.io · AsyncAPI Specification
Ocean Io Webhooks
Version
View Spec
View on GitHub
Sales IntelligenceB2BEnrichmentLookalikeAccount Based MarketingProspectingCompany DataPeople DataContact DataSegmentationGo-To-MarketMCPAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: https://app.ocean.io/docs/getting-started/webhooks
derived_from: openapi/ocean-io-api-openapi.yml (top-level `webhooks` object)
spec_type: Webhooks
asyncapi_published: false
description: >-
Ocean.io has a real event surface, but it is a callback surface rather than a subscription one:
several endpoints process asynchronously and POST their results to a webhookUrl the caller supplies
per request. There is no webhook registration console, no event catalog page, no signature scheme
and no published AsyncAPI document. The payload contracts ARE machine-readable, however — the
published OpenAPI 3.1 document declares eight entries under its top-level `webhooks` object, each
with a request-body schema, which is the strongest machine-readable event signal available here.
delivery:
model: per-request callback URL
request_field: webhookUrl
ack_response: '{"status": "in progress"}'
ack_status: 200
transport: HTTPS POST, Content-Type application/json
receiver_requirements:
- Publicly reachable over HTTPS
- Return a 2xx status within a reasonable timeout
- Be idempotent — the same payload may be delivered more than once
retries: exponential backoff on non-2xx or timeout
security:
signature: false
hmac: false
mechanisms:
- type: source-ip-allowlist
detail: Ocean.io sends from a fixed set of IP addresses; the current range is available from support only (not published).
- type: shared-secret-in-url
detail: 'Documented pattern: include a secret query parameter in the webhookUrl (e.g. ?secret=MY_SECRET) and validate it in the handler.'
note: >-
No request signing is offered. A URL-embedded secret is the only published authentication for
inbound callbacks, and it travels in the request line of every delivery.
producing_operations:
- operation: enrichCompanies
path: /v2/enrich/companies
webhook_usage: All results delivered via webhook
- operation: enrichPeople
path: /v2/enrich/people
webhook_usage: All results delivered via webhook
- operation: revealEmails
path: /v2/reveal/emails
webhook_usage: All results delivered via webhook
- operation: revealPhones
path: /v2/reveal/phones
webhook_usage: All results delivered via webhook
- operation: searchPeopleV3
path: /v3/search/people
webhook_usage: Email reveal results delivered via webhook when revealEmails is requested
- operation: enrichPerson
path: /v2/enrich/person
webhook_usage: Reveal results delivered via webhook when revealEmails / revealPhones are requested
events:
- name: reveal_emails
declared_in: openapi webhooks.reveal_emails
summary: Reveal Email Results
description: >-
When email verifications are done, results are POSTed to the URL passed in the Reveal endpoint.
schema: components.schemas.PublicRevealEmailWebhookResult
payload_example: '{"results": [{"personId": "abc123", "email": {"address": "...", "status": "verified"}}]}'
- name: reveal_phones
declared_in: openapi webhooks.reveal_phones
summary: Reveal Phone Results
payload_example: '{"results": [{"personId": "abc123", "phone": {"numbers": ["+4512345678"], "status": "verified"}}]}'
- name: people_search_emails
declared_in: openapi webhooks.people_search_emails
summary: Email reveal results produced by a People Search with revealEmails
- name: people_search_phones
declared_in: openapi webhooks.people_search_phones
summary: Phone reveal results produced by a People Search with revealPhones
- name: enrich_person_email
declared_in: openapi webhooks.enrich_person_email
summary: Email reveal result produced by Enrich Person with revealEmails
- name: enrich_person_phone
declared_in: openapi webhooks.enrich_person_phone
summary: Phone reveal result produced by Enrich Person with revealPhones
- name: enrich_companies
declared_in: openapi webhooks.enrich_companies
summary: Batch company enrichment results
payload_example: '{"results": {"your-id-001": {"status": "found", "company": {…}}}}'
- name: enrich_people
declared_in: openapi webhooks.enrich_people
summary: Batch people enrichment results
payload_example: '{"results": {"your-id-001": {"status": "found", "person": {…}}}}'
result_status_vocabulary:
enrichment:
- value: found
meaning: Successfully matched and enriched
- value: not_found
meaning: No match found in the Ocean.io database
- value: triggered
meaning: Domain was not in the database — crawling initiated; re-enrich in a few minutes
contact_reveal:
- value: verified
meaning: Confirmed deliverable via SMTP verification
charged: true
- value: guessed
meaning: High-confidence pattern match, not SMTP-verified
charged: true
- value: catchAll
meaning: Domain accepts all addresses — deliverability unknown
charged: true
- value: notFound
meaning: Not found or verification not possible
charged: false
delivery_timing:
- operation: Reveal Emails (small batch, <= 50 IDs)
typical: 1-3 minutes
- operation: Reveal Emails (500 IDs)
typical: 2-10 minutes
- operation: Enrich batch (small, <= 100 records)
typical: 1-5 minutes
- operation: Enrich batch (5,000-10,000 records)
typical: 10-30 minutes
gaps:
- No AsyncAPI document is published; the event surface is documented in prose plus OpenAPI `webhooks` entries.
- No webhook signature or HMAC — receivers cannot cryptographically verify origin.
- The sending IP range is support-only, not published, so allowlisting requires a support ticket.
- No delivery-attempt log, replay endpoint or dead-letter surface is documented.