Sendoso · AsyncAPI Specification

Sendoso Webhooks

Version 1.0

Sendoso webhooks deliver real-time send status updates. Sendoso does not publish an AsyncAPI document; this description was generated by API Evangelist from Sendoso's own webhook documentation at https://developer.sendoso.com/webhooks/introduction — every event name, payload field, header, retry interval and source IP below is published by Sendoso. Delivery is powered by Svix: signatures arrive on `svix-id`, `svix-timestamp` and `svix-signature`, and the subscription surface is a hosted "webhooks portal" rather than an API. There is no webhook-management endpoint — endpoints and event subscriptions are configured in the portal by a human.

View Spec View on GitHub Corporate GiftingDirect MailSales EngagementMarketing AutomationCRM IntegrationeGiftsSwag and MerchandiseFulfillmentEmployee RecognitionAccount Based MarketingSCIM ProvisioningWebhookAsyncAPIWebhooksEvents

Channels

sendEvents
All send lifecycle events are delivered to the subscribing endpoint. If no event types are selected in the portal, the endpoint receives every event regardless of type.

Messages

sendStatusChanged
Send status changed

Servers

https
subscriber
Your endpoint. You supply the URL; Sendoso POSTs to it. Sendoso's own example shape is https://www.example.com/sendoso/webhooks/.

AsyncAPI Specification

Raw ↑
asyncapi: 3.0.0
info:
  title: Sendoso Webhooks
  version: '1.0'
  description: >-
    Sendoso webhooks deliver real-time send status updates. Sendoso does not publish an
    AsyncAPI document; this description was generated by API Evangelist from Sendoso's own
    webhook documentation at https://developer.sendoso.com/webhooks/introduction — every
    event name, payload field, header, retry interval and source IP below is published by
    Sendoso.


    Delivery is powered by Svix: signatures arrive on `svix-id`, `svix-timestamp` and
    `svix-signature`, and the subscription surface is a hosted "webhooks portal" rather than
    an API. There is no webhook-management endpoint — endpoints and event subscriptions are
    configured in the portal by a human.
  contact:
    name: Sendoso Developer Support
    email: developers@sendoso.com
    url: https://developer.sendoso.com/webhooks/introduction
  x-generated-from: documentation
  x-generated-by: API Evangelist enrichment pipeline (local-v1)
  x-generated-on: '2026-08-13'
externalDocs:
  description: Sendoso webhooks documentation
  url: https://developer.sendoso.com/webhooks/introduction
defaultContentType: application/json
servers:
  subscriber:
    host: www.example.com
    protocol: https
    description: >-
      Your endpoint. You supply the URL; Sendoso POSTs to it. Sendoso's own example shape is
      https://www.example.com/sendoso/webhooks/.
channels:
  sendEvents:
    address: /
    title: Send status events
    description: >-
      All send lifecycle events are delivered to the subscribing endpoint. If no event types
      are selected in the portal, the endpoint receives every event regardless of type.
    messages:
      sendStatusChanged:
        $ref: '#/components/messages/sendStatusChanged'
operations:
  receiveSendEvent:
    action: receive
    channel:
      $ref: '#/channels/sendEvents'
    summary: Receive a send status change from Sendoso.
    messages:
      - $ref: '#/channels/sendEvents/messages/sendStatusChanged'
components:
  messages:
    sendStatusChanged:
      name: sendStatusChanged
      title: Send status changed
      contentType: application/json
      description: >-
        Every Sendoso event type carries the same two-field payload. The event type itself is
        not in the body — it is the subscription's type, so the receiver must distinguish
        events by the subscription/delivery metadata, not by the payload.
      headers:
        type: object
        properties:
          svix-id:
            type: string
            description: Unique message id, part of the signed content.
          svix-timestamp:
            type: string
            description: >-
              Attempt timestamp. Messages more than five minutes from current time (past or
              future) are rejected by the verifier.
          svix-signature:
            type: string
            description: >-
              Space-separated list of versioned signatures. Signed content is
              `{svix-id}.{svix-timestamp}.{raw body}`, HMAC-SHA256 with the base64-decoded
              half of the endpoint secret, base64 encoded.
      payload:
        type: object
        required: [send_gid, status_changed_at]
        properties:
          send_gid:
            type: string
            description: The gid of the send.
          status_changed_at:
            type: string
            description: When the send's status changed, in ISO 8601 format.
      tags:
        - name: send.amazon_fulfilling
          description: The Amazon send is being processed.
        - name: send.amazon_shipped
          description: The send has shipped from Amazon and is in transit to Sendoso.
        - name: send.blocked
          description: A request to redeem the send has been blocked.
        - name: send.bounced
          description: The send cannot be redeemed and will be refunded.
        - name: send.canceled
          description: The send has been canceled by the sender.
        - name: send.clicked
          description: The eGift send has been viewed by the recipient.
        - name: send.confirmation_canceled
          description: Address confirmation for a send has been canceled by the sender.
        - name: send.confirming_address
          description: The send is awaiting address confirmation from the recipient.
        - name: send.delivered
          description: The send has been delivered to the recipient.
        - name: send.email_blacklist
          description: A request to redeem the send has been blacklisted.
        - name: send.expired
          description: The link to redeem the send has expired.
        - name: send.failed
          description: The send has failed.
        - name: send.fulfilling
          description: The send is being processed by Sendoso.
        - name: send.fulfillment_issue
          description: There is an issue on the fulfillment side for the send.
        - name: send.initiated
          description: The send is in the process of being created.
        - name: send.insufficient_funds
          description: The send cannot be processed due to insufficient funds.
        - name: send.invalid_email_format
          description: The recipient email in the send is not a valid email.
        - name: send.opened
          description: The eGift send has been opened by the recipient.
        - name: send.order_received
          description: The send order has been received and is being processed.
        - name: send.out_of_stock
          description: The product for the send is out of stock.
        - name: send.pending_approval
          description: The send is pending approval by the sender.
        - name: send.pending_sendoso_approval
          description: The send is pending approval by a Sendoso Admin.
        - name: send.redeemed
          description: The eGift send has been redeemed by the recipient.
        - name: send.refunded
          description: The send has been refunded.
        - name: send.sent
          description: The eGift send has been sent to the recipient.
        - name: send.shipped
          description: The send is in transit to the recipient.
        - name: send.suspicious_email
          description: The recipient email for the send is flagged as suspicious.
        - name: send.undeliverable
          description: The send cannot be delivered to the recipient.
  securitySchemes:
    svixSignature:
      type: httpApiKey
      name: svix-signature
      in: header
      description: >-
        HMAC-SHA256 over `{svix-id}.{svix-timestamp}.{raw body}` using a per-endpoint secret
        (prefix `whsec_`) retrieved from the webhooks portal. Verify the RAW body byte for
        byte — re-serializing the JSON breaks the signature, which Sendoso names as the most
        common integration failure.
x-delivery:
  enablement: >-
    Webhooks must be enabled per organization by Sendoso support; the portal URL is then
    retrieved from the integrations page.
  management_api: false
  retry_schedule:
    - immediately
    - 5s
    - 5m
    - 30m
    - 2h
    - 5h
    - 10h
    - 10h
  retry_note: >-
    Exponential backoff. A message that fails three times before succeeding is delivered
    roughly 35 minutes and 5 seconds after the first attempt.
  response_timeout_seconds: 15
  success_criteria: Any 2xx status is treated as success, regardless of the response payload.
  endpoint_disable_after: 5 days of total failure
  manual_recovery: >-
    The portal supports per-message resend, "Recover Failed Messages" over a time window, and
    replay-all-since-this-time.
  source_ips_us:
    - 44.228.126.217
    - 50.112.21.217
    - 52.24.126.164
    - 54.148.139.208
    - '2600:1f24:64:8000::/52'
  replay_protection: >-
    Timestamps more than five minutes from current time are rejected. Sendoso recommends NTP
    on the receiving server.
x-gaps:
  - >-
    The event type is not carried in the payload, so a single endpoint subscribed to all
    events cannot tell which event it received from the body alone.
  - No AsyncAPI or event schema registry is published by Sendoso.
  - No webhook-management API — subscriptions are portal-only.
  - Source IPs are published for the US only.