Ocean.io · AsyncAPI Specification

Ocean Io Webhooks

Version

View Spec View on GitHub Sales IntelligenceB2BEnrichmentLookalikeAccount Based MarketingProspectingCompany DataPeople DataContact DataSegmentationGo-To-MarketMCPAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
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.