Ziina · AsyncAPI Specification

Ziina Webhooks

Version 1.0.0

Event surface for Ziina payment webhooks. When a webhook URL is registered (POST /webhook), Ziina delivers events as HTTP POST callbacks over HTTPS to that URL. Non-2xx responses are retried up to 3 times. If a shared secret was configured, each delivery carries an X-Hmac-Signature header (hex-encoded SHA-256 HMAC of the request body). Captured from https://docs.ziina.com/api-reference/webhook/index on 2026-07-17.

View Spec View on GitHub PaymentsFintechUAEMENAMoney TransferWalletAsyncAPIWebhooksEvents

Channels

webhook
The merchant webhook URL that receives all Ziina payment events.

Messages

paymentIntentStatusUpdated
Payment intent status updated
A payment intent's status has changed.
refundStatusUpdated
Refund status updated
A refund's status has changed.

Servers

https
subscriber
Merchant-hosted HTTPS endpoint registered via POST /webhook. Ziina delivers from a fixed set of source IPs (3.29.184.186, 3.29.190.95, 20.233.47.127, 13.202.161.181); reject deliveries from any other IP.

AsyncAPI Specification

Raw ↑
# generated: '2026-07-17'
# method: searched
# source: https://docs.ziina.com/api-reference/webhook/index
# spec_type: AsyncAPI
# note: Ziina publishes no AsyncAPI document; this 3.0.0 spec is authored from the
#   documented webhook catalog (2 events, HMAC signing, source-IP allowlist, retries).
asyncapi: 3.0.0
info:
  title: Ziina Webhooks
  version: 1.0.0
  description: >-
    Event surface for Ziina payment webhooks. When a webhook URL is registered
    (POST /webhook), Ziina delivers events as HTTP POST callbacks over HTTPS to
    that URL. Non-2xx responses are retried up to 3 times. If a shared secret was
    configured, each delivery carries an X-Hmac-Signature header (hex-encoded
    SHA-256 HMAC of the request body). Captured from
    https://docs.ziina.com/api-reference/webhook/index on 2026-07-17.
  contact:
    name: Ziina Support
    email: support@ziina.com
    url: https://docs.ziina.com/api-reference/webhook
defaultContentType: application/json
servers:
  subscriber:
    host: your-server.example.com
    protocol: https
    description: >-
      Merchant-hosted HTTPS endpoint registered via POST /webhook. Ziina delivers
      from a fixed set of source IPs (3.29.184.186, 3.29.190.95, 20.233.47.127,
      13.202.161.181); reject deliveries from any other IP.
channels:
  webhook:
    address: /
    description: The merchant webhook URL that receives all Ziina payment events.
    messages:
      paymentIntentStatusUpdated:
        $ref: '#/components/messages/paymentIntentStatusUpdated'
      refundStatusUpdated:
        $ref: '#/components/messages/refundStatusUpdated'
operations:
  receivePaymentIntentStatusUpdated:
    action: receive
    channel:
      $ref: '#/channels/webhook'
    messages:
    - $ref: '#/channels/webhook/messages/paymentIntentStatusUpdated'
  receiveRefundStatusUpdated:
    action: receive
    channel:
      $ref: '#/channels/webhook'
    messages:
    - $ref: '#/channels/webhook/messages/refundStatusUpdated'
components:
  messages:
    paymentIntentStatusUpdated:
      name: payment_intent.status.updated
      title: Payment intent status updated
      summary: A payment intent's status has changed.
      contentType: application/json
      headers:
        type: object
        properties:
          X-Hmac-Signature:
            type: string
            description: Hex-encoded SHA-256 HMAC of the request body (present when a secret is configured).
      payload:
        type: object
        properties:
          event:
            type: string
            const: payment_intent.status.updated
          data:
            $ref: '#/components/schemas/PaymentIntentEventData'
    refundStatusUpdated:
      name: refund.status.updated
      title: Refund status updated
      summary: A refund's status has changed.
      contentType: application/json
      headers:
        type: object
        properties:
          X-Hmac-Signature:
            type: string
            description: Hex-encoded SHA-256 HMAC of the request body (present when a secret is configured).
      payload:
        type: object
        properties:
          event:
            type: string
            const: refund.status.updated
          data:
            $ref: '#/components/schemas/RefundEventData'
  schemas:
    PaymentIntentEventData:
      type: object
      description: Payment intent object (mirrors PaymentIntentDto in the REST API).
      properties:
        id:
          type: string
        status:
          type: string
          enum: [requires_payment_instrument, requires_user_action, pending, completed, failed, canceled]
    RefundEventData:
      type: object
      description: Refund object (mirrors RefundDto in the REST API).
      properties:
        id:
          type: string
        payment_intent_id:
          type: string
        status:
          type: string
          enum: [pending, completed, failed]