Zocdoc · AsyncAPI Specification

Zocdoc Webhooks

Version

View Spec View on GitHub HealthcareAppointmentsBookingProvidersInsuranceTelehealthSchedulingAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-15'
method: searched
source: https://api-docs.zocdoc.com/guides/webhooks
spec_type: webhook-catalog
asyncapi_published: false
note: >-
  Zocdoc publishes NO AsyncAPI document. Searched the docs host, the llms.txt
  index, /asyncapi.yaml and /asyncapi.json on every host, and the
  github.com/Zocdoc organization — nothing. What Zocdoc DOES publish is a real,
  detailed webhook contract with HMAC signing, a documented payload, a retry
  policy and a sandbox mock endpoint, so this file captures that event surface
  as a catalog rather than fabricating an AsyncAPI. `webhooks:` is also absent
  from the OpenAPI 3.0.0 document (3.0 has no webhooks keyword).
transport: https
subscription:
  self_serve: false
  mechanism: >-
    The receiving URL is submitted to the Zocdoc API team out of band — there is
    no registration endpoint and no subscription management API. HTTP is
    permitted for sandbox receivers only.
security:
  scheme: hmac-sha256
  header_signature: webhook-signature
  header_timestamp: webhook-timestamp
  timestamp_format: unix epoch seconds
  timestamp_tolerance: 5 minutes (default)
  signed_payload: '<webhook_timestamp>.<json payload>'
  encoding: UTF-8 bytes, key supplied base64-encoded
  signature_format: 'v1:<base64>;v2:<base64> — version-prefixed, semicolon-separated'
  key_distribution: shared secret issued by the Zocdoc API team; any base64 string works in sandbox
  note: >-
    Zocdoc explicitly states the client MUST verify the signature manually, and
    warns the payload schema may change at any time.
delivery:
  retries: true
  strategy: exponential backoff
  max_duration: 48 hours from first attempt
  timeout: 5 seconds
  retry_triggers:
    - connection could not be established
    - no response within 5 seconds
    - connection severed before a response
  status_code_based_retry: false
  note: >-
    Zocdoc does NOT retry based on the status code the receiver returns — a
    receiver that answers 500 quickly gets no redelivery. Only transport-level
    failures and timeouts are retried. Ordering and exactly-once are not
    guaranteed or discussed.
events:
  - event_type: appointment_updated
    data_type: appointment_data
    description: >-
      Fires on changes to appointments booked via /v1/appointments. For the
      patient booking use case, notifications are sent ONLY for
      provider-initiated changes — a partner must update its own state from the
      API response for its own actions and must not wait for a webhook.
    payload_fields:
      - event_type
      - webhook_timestamp
      - data.data_type
      - data.appointment_data.appointment_id
      - data.appointment_data.appointment_updated_timestamp
      - data.appointment_data.appointment_update_type
      - data.appointment_data.changed_attributes[]
    update_types:
      - value: updated
      - value: cancelled
      - value: created
        note: provider scheduling use case only
    changed_attributes:
      required_when: the webhook fires due to attribute changes
      fields:
        - attribute_path
        - attachment_type
      note: >-
        Every object must carry at least `attribute_path`
        (e.g. `appointment.start_time`); objects for
        `patient.uploaded_attachments` must also carry `attachment_type`.
    schemas:
      - openapi/zocdoc-webhook-api-openapi.yml#/components/schemas/WebhookMockAppointmentData
      - openapi/zocdoc-webhook-api-openapi.yml#/components/schemas/ChangedAttribute
      - openapi/zocdoc-webhook-api-openapi.yml#/components/schemas/AppointmentUpdateType
testing:
  mock_endpoint: POST /v1/webhook/mock-request
  operation_id: mockWebhookRequest
  environment: sandbox
  detail: sandbox/zocdoc-sandbox.yml
event_count: 1
gaps:
  - Single event type — no provider, location, insurance or directory events.
  - No AsyncAPI document, so the payload has no machine-readable schema outside the sandbox mock operation.
  - No subscription management API; endpoints are registered by email.
  - No delivery log, replay, or dead-letter surface.
  - No documented event id, so receiver-side deduplication has nothing stable to key on.