Paystack · AsyncAPI Specification

Paystack Webhooks

Version 1.0.0

AsyncAPI 2.6 description of Paystack's outbound webhook surface. Paystack notifies a single merchant-configured POST endpoint (the "webhook URL") whenever an event occurs against your integration. Every webhook delivery is a JSON POST with two top-level fields: - `event` — a string identifying the event type (for example `charge.success`). - `data` — an object whose shape depends on the event type and mirrors the corresponding REST resource (Transaction, Dispute, Refund, Transfer, Invoice, Subscription, Customer, Dedicated Virtual Account, Payment Request). ## Delivery and retries - Your endpoint must return `200 OK`. Anything else is treated as a failed delivery. - Live mode: every 3 minutes for the first 4 attempts, then hourly for up to 72 hours. - Test mode: hourly retries for up to 72 hours. - Acknowledge the event before performing long-running work to avoid timeouts. ## Verifying event origin Every request carries an `x-paystack-signature` header whose value is the HMAC SHA-512 of the raw request body, signed with your Paystack secret key. Verify it before processing the event. You may additionally IP-allowlist `52.31.139.75`, `52.49.173.169`, and `52.214.14.220` (both test and live). Source: https://paystack.com/docs/payments/webhooks/

View Spec View on GitHub PaymentsAfricaFintechRecurring BillingMarketplacesPayoutsMobile MoneyStripeAsyncAPIWebhooksEvents

Channels

paystack/events
publish receivePaystackEvent
Receive a Paystack webhook event
The merchant's single webhook URL. Paystack POSTs every event type defined in this document to the same channel; consumers branch on the `event` field of the payload.

Messages

ChargeSuccess
charge.success
A successful transaction (charge) was completed.
ChargeDisputeCreate
charge.dispute.create
A dispute was logged against your business.
ChargeDisputeRemind
charge.dispute.remind
A logged dispute has not yet been resolved.
ChargeDisputeResolve
charge.dispute.resolve
A dispute has been resolved.
CustomerIdentificationSuccess
customeridentification.success
Customer identity validation succeeded.
CustomerIdentificationFailed
customeridentification.failed
Customer identity validation failed.
DedicatedAccountAssignSuccess
dedicatedaccount.assign.success
A Dedicated Virtual Account was assigned to a customer.
DedicatedAccountAssignFailed
dedicatedaccount.assign.failed
Dedicated Virtual Account assignment failed.
InvoiceCreate
invoice.create
A subscription invoice has been created.
InvoiceUpdate
invoice.update
A subscription invoice was updated (typically a successful charge).
InvoicePaymentFailed
invoice.payment_failed
A subscription invoice payment failed.
PaymentRequestSuccess
paymentrequest.success
A payment request was paid.
PaymentRequestPending
paymentrequest.pending
A payment request has been sent to a customer.
RefundFailed
refund.failed
A refund could not be processed.
RefundPending
refund.pending
A refund was initiated and is awaiting processor response.
RefundProcessed
refund.processed
A refund has been successfully processed.
RefundProcessing
refund.processing
A refund has been received by the processor.
SubscriptionCreate
subscription.create
A subscription has been created.
SubscriptionDisable
subscription.disable
A subscription has been disabled.
SubscriptionNotRenew
subscription.not_renew
A subscription has been flagged as non-renewing.
SubscriptionExpiringCards
subscription.expiring_cards
Monthly report of subscriptions whose cards are expiring.
TransferSuccess
transfer.success
A transfer has completed successfully.
TransferFailed
transfer.failed
A transfer attempt failed.
TransferReversed
transfer.reversed
A transfer was reversed.

Servers

https
merchant-endpoint {webhookUrl}
Merchant-operated HTTPS endpoint registered on the Paystack dashboard. Paystack POSTs JSON webhook events to this URL. The endpoint must be publicly reachable (localhost URLs cannot receive events) and respond with `200 OK`.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Paystack Webhooks
  version: '1.0.0'
  description: |
    AsyncAPI 2.6 description of Paystack's outbound webhook surface.

    Paystack notifies a single merchant-configured POST endpoint (the "webhook URL")
    whenever an event occurs against your integration. Every webhook delivery is a
    JSON POST with two top-level fields:

    - `event` — a string identifying the event type (for example `charge.success`).
    - `data`  — an object whose shape depends on the event type and mirrors the
      corresponding REST resource (Transaction, Dispute, Refund, Transfer, Invoice,
      Subscription, Customer, Dedicated Virtual Account, Payment Request).

    ## Delivery and retries

    - Your endpoint must return `200 OK`. Anything else is treated as a failed delivery.
    - Live mode: every 3 minutes for the first 4 attempts, then hourly for up to 72 hours.
    - Test mode: hourly retries for up to 72 hours.
    - Acknowledge the event before performing long-running work to avoid timeouts.

    ## Verifying event origin

    Every request carries an `x-paystack-signature` header whose value is the
    HMAC SHA-512 of the raw request body, signed with your Paystack secret key.
    Verify it before processing the event. You may additionally IP-allowlist
    `52.31.139.75`, `52.49.173.169`, and `52.214.14.220` (both test and live).

    Source: https://paystack.com/docs/payments/webhooks/
  contact:
    name: Paystack Support
    url: https://support.paystack.com/
  license:
    name: Paystack Terms of Service
    url: https://paystack.com/terms
  x-source:
    documentation: https://paystack.com/docs/payments/webhooks/
    apis-yml: https://raw.githubusercontent.com/api-evangelist/paystack/main/apis.yml

defaultContentType: application/json

servers:
  merchant-endpoint:
    url: '{webhookUrl}'
    protocol: https
    description: |
      Merchant-operated HTTPS endpoint registered on the Paystack dashboard.
      Paystack POSTs JSON webhook events to this URL. The endpoint must be
      publicly reachable (localhost URLs cannot receive events) and respond
      with `200 OK`.
    variables:
      webhookUrl:
        default: https://example.com/paystack/webhook
        description: The fully qualified webhook URL configured in the Paystack dashboard.

channels:
  paystack/events:
    description: |
      The merchant's single webhook URL. Paystack POSTs every event type defined
      in this document to the same channel; consumers branch on the `event` field
      of the payload.
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: receivePaystackEvent
      summary: Receive a Paystack webhook event
      description: |
        Inbound webhook delivered by Paystack. Verify the `x-paystack-signature`
        header (HMAC-SHA512 of the raw request body keyed by your secret key)
        before trusting the payload. Respond with `200 OK` to acknowledge.
      message:
        oneOf:
          - $ref: '#/components/messages/ChargeSuccess'
          - $ref: '#/components/messages/ChargeDisputeCreate'
          - $ref: '#/components/messages/ChargeDisputeRemind'
          - $ref: '#/components/messages/ChargeDisputeResolve'
          - $ref: '#/components/messages/CustomerIdentificationSuccess'
          - $ref: '#/components/messages/CustomerIdentificationFailed'
          - $ref: '#/components/messages/DedicatedAccountAssignSuccess'
          - $ref: '#/components/messages/DedicatedAccountAssignFailed'
          - $ref: '#/components/messages/InvoiceCreate'
          - $ref: '#/components/messages/InvoiceUpdate'
          - $ref: '#/components/messages/InvoicePaymentFailed'
          - $ref: '#/components/messages/PaymentRequestSuccess'
          - $ref: '#/components/messages/PaymentRequestPending'
          - $ref: '#/components/messages/RefundFailed'
          - $ref: '#/components/messages/RefundPending'
          - $ref: '#/components/messages/RefundProcessed'
          - $ref: '#/components/messages/RefundProcessing'
          - $ref: '#/components/messages/SubscriptionCreate'
          - $ref: '#/components/messages/SubscriptionDisable'
          - $ref: '#/components/messages/SubscriptionNotRenew'
          - $ref: '#/components/messages/SubscriptionExpiringCards'
          - $ref: '#/components/messages/TransferSuccess'
          - $ref: '#/components/messages/TransferFailed'
          - $ref: '#/components/messages/TransferReversed'

components:
  messageTraits:
    PaystackSignedDelivery:
      headers:
        type: object
        required:
          - x-paystack-signature
          - content-type
        properties:
          x-paystack-signature:
            type: string
            description: |
              HMAC-SHA512 hex digest of the raw JSON request body, signed using
              the merchant's Paystack secret key. The receiver must recompute
              this value and reject the request on mismatch.
            example: 'd41d8cd98f00b204e9800998ecf8427e...'
            pattern: '^[a-f0-9]{128}$'
          content-type:
            type: string
            const: application/json
          user-agent:
            type: string
            description: User agent string sent by Paystack's webhook dispatcher.
      bindings:
        http:
          headers:
            type: object
          bindingVersion: '0.3.0'

  messages:
    ChargeSuccess:
      name: ChargeSuccess
      title: charge.success
      summary: A successful transaction (charge) was completed.
      description: |
        Fired when a transaction is successfully charged. The `data` object is the
        Paystack Transaction resource (see Accept Payments API / Transaction).
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/ChargeSuccessEvent'

    ChargeDisputeCreate:
      name: ChargeDisputeCreate
      title: charge.dispute.create
      summary: A dispute was logged against your business.
      description: |
        Fired when a cardholder dispute (chargeback) is opened against a transaction.
        The `data` object is the Paystack Dispute resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/ChargeDisputeCreateEvent'

    ChargeDisputeRemind:
      name: ChargeDisputeRemind
      title: charge.dispute.remind
      summary: A logged dispute has not yet been resolved.
      description: |
        Reminder that an open dispute is still pending merchant action. The `data`
        object is the Paystack Dispute resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/ChargeDisputeRemindEvent'

    ChargeDisputeResolve:
      name: ChargeDisputeResolve
      title: charge.dispute.resolve
      summary: A dispute has been resolved.
      description: |
        Fired when a dispute reaches a final resolution state. The `data` object
        is the Paystack Dispute resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/ChargeDisputeResolveEvent'

    CustomerIdentificationSuccess:
      name: CustomerIdentificationSuccess
      title: customeridentification.success
      summary: Customer identity validation succeeded.
      description: |
        Asynchronous result for a customer KYC validation request that succeeded.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/CustomerIdentificationSuccessEvent'

    CustomerIdentificationFailed:
      name: CustomerIdentificationFailed
      title: customeridentification.failed
      summary: Customer identity validation failed.
      description: |
        Asynchronous result for a customer KYC validation request that failed.
        Example payload taken verbatim from the Paystack webhooks documentation.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/CustomerIdentificationFailedEvent'
      examples:
        - name: documentation-example
          summary: Example from https://paystack.com/docs/payments/webhooks/
          payload:
            event: customeridentification.failed
            data:
              customer_id: 82796315
              customer_code: CUS_XXXXXXXXXXXXXXX
              email: [email protected]
              identification:
                country: NG
                type: bank_account
                bvn: '123*****456'
                account_number: '012****345'
                bank_code: '999991'
              reason: Account number or BVN is incorrect

    DedicatedAccountAssignSuccess:
      name: DedicatedAccountAssignSuccess
      title: dedicatedaccount.assign.success
      summary: A Dedicated Virtual Account was assigned to a customer.
      description: |
        Fired when a DVA has been successfully created and assigned to a customer.
        The `data` object is the Paystack Dedicated Virtual Account resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/DedicatedAccountAssignSuccessEvent'

    DedicatedAccountAssignFailed:
      name: DedicatedAccountAssignFailed
      title: dedicatedaccount.assign.failed
      summary: Dedicated Virtual Account assignment failed.
      description: |
        Fired when an attempt to create and assign a DVA to a customer fails.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/DedicatedAccountAssignFailedEvent'

    InvoiceCreate:
      name: InvoiceCreate
      title: invoice.create
      summary: A subscription invoice has been created.
      description: |
        An invoice has been created for a subscription on your account. This usually
        happens 3 days before the subscription is due, or whenever the first pending
        invoice notification is sent to the customer.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/InvoiceCreateEvent'

    InvoiceUpdate:
      name: InvoiceUpdate
      title: invoice.update
      summary: A subscription invoice was updated (typically a successful charge).
      description: |
        An invoice has been updated. This usually means the customer was charged
        successfully. Inspect the invoice object and take any necessary action.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/InvoiceUpdateEvent'

    InvoicePaymentFailed:
      name: InvoicePaymentFailed
      title: invoice.payment_failed
      summary: A subscription invoice payment failed.
      description: A payment for a subscription invoice failed.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/InvoicePaymentFailedEvent'

    PaymentRequestSuccess:
      name: PaymentRequestSuccess
      title: paymentrequest.success
      summary: A payment request was paid.
      description: |
        A previously issued payment request has been paid. The `data` object is the
        Paystack Payment Request resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/PaymentRequestSuccessEvent'

    PaymentRequestPending:
      name: PaymentRequestPending
      title: paymentrequest.pending
      summary: A payment request has been sent to a customer.
      description: A payment request was issued and is awaiting customer payment.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/PaymentRequestPendingEvent'

    RefundFailed:
      name: RefundFailed
      title: refund.failed
      summary: A refund could not be processed.
      description: |
        The refund cannot be processed. Your account will be credited with the
        refund amount. The `data` object is the Paystack Refund resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/RefundFailedEvent'

    RefundPending:
      name: RefundPending
      title: refund.pending
      summary: A refund was initiated and is awaiting processor response.
      description: Refund initiated, waiting for response from the processor.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/RefundPendingEvent'

    RefundProcessed:
      name: RefundProcessed
      title: refund.processed
      summary: A refund has been successfully processed.
      description: Refund has successfully been processed by the processor.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/RefundProcessedEvent'

    RefundProcessing:
      name: RefundProcessing
      title: refund.processing
      summary: A refund has been received by the processor.
      description: Refund has been received by the processor and is being processed.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/RefundProcessingEvent'

    SubscriptionCreate:
      name: SubscriptionCreate
      title: subscription.create
      summary: A subscription has been created.
      description: |
        A new subscription was created on your account. The `data` object is the
        Paystack Subscription resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/SubscriptionCreateEvent'

    SubscriptionDisable:
      name: SubscriptionDisable
      title: subscription.disable
      summary: A subscription has been disabled.
      description: A subscription on your account has been disabled.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/SubscriptionDisableEvent'

    SubscriptionNotRenew:
      name: SubscriptionNotRenew
      title: subscription.not_renew
      summary: A subscription has been flagged as non-renewing.
      description: |
        A subscription's status has changed to non-renewing. The subscription will
        not be charged on the next payment date.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/SubscriptionNotRenewEvent'

    SubscriptionExpiringCards:
      name: SubscriptionExpiringCards
      title: subscription.expiring_cards
      summary: Monthly report of subscriptions whose cards are expiring.
      description: |
        Contains information on all subscriptions with cards that are expiring
        that month. Sent at the beginning of each month to merchants using
        Subscriptions.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/SubscriptionExpiringCardsEvent'

    TransferSuccess:
      name: TransferSuccess
      title: transfer.success
      summary: A transfer has completed successfully.
      description: |
        A successful transfer has been completed. The `data` object is the Paystack
        Transfer resource.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/TransferSuccessEvent'

    TransferFailed:
      name: TransferFailed
      title: transfer.failed
      summary: A transfer attempt failed.
      description: A transfer you attempted has failed.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/TransferFailedEvent'

    TransferReversed:
      name: TransferReversed
      title: transfer.reversed
      summary: A transfer was reversed.
      description: A transfer you attempted has been reversed.
      contentType: application/json
      traits:
        - $ref: '#/components/messageTraits/PaystackSignedDelivery'
      payload:
        $ref: '#/components/schemas/TransferReversedEvent'

  schemas:
    EventEnvelope:
      type: object
      description: |
        Base shape of every Paystack webhook delivery. Concrete event payloads
        narrow `event` to a literal string and refine `data` to the matching
        resource shape. Field shapes are not exhaustively documented by Paystack;
        consult the corresponding REST resource (Transaction, Dispute, Refund,
        Transfer, Subscription, Invoice, Customer, Dedicated Virtual Account,
        Payment Request) for the full field set.
      required:
        - event
        - data
      properties:
        event:
          type: string
          description: Event type identifier.
        data:
          type: object
          description: Event-specific resource payload.

    PaystackIdentification:
      type: object
      description: |
        Identification block included on `customeridentification.*` events.
        Shape taken from the Paystack webhooks documentation example.
      properties:
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code.
          example: NG
        type:
          type: string
          description: Identification type submitted by the merchant.
          example: bank_account
        bvn:
          type: string
          description: Masked Bank Verification Number, when applicable.
          example: '123*****456'
        account_number:
          type: string
          description: Masked bank account number, when applicable.
          example: '012****345'
        bank_code:
          type: string
          description: Paystack bank code, when applicable.
          example: '999991'

    ChargeSuccessEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: charge.success
            data:
              type: object
              description: |
                Paystack Transaction resource. See the Accept Payments / Transaction
                API for the full field set
                (https://paystack.com/docs/api/transaction/).

    ChargeDisputeCreateEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: charge.dispute.create
            data:
              type: object
              description: |
                Paystack Dispute resource. See
                https://paystack.com/docs/api/dispute/ for the full field set.

    ChargeDisputeRemindEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: charge.dispute.remind
            data:
              type: object
              description: Paystack Dispute resource.

    ChargeDisputeResolveEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: charge.dispute.resolve
            data:
              type: object
              description: Paystack Dispute resource.

    CustomerIdentificationSuccessEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: customeridentification.success
            data:
              type: object
              description: |
                Customer identification result. Mirrors the shape of the
                documented `customeridentification.failed` payload but without
                the `reason` field.
              properties:
                customer_id:
                  type: integer
                customer_code:
                  type: string
                email:
                  type: string
                  format: email
                identification:
                  $ref: '#/components/schemas/PaystackIdentification'

    CustomerIdentificationFailedEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: customeridentification.failed
            data:
              type: object
              description: |
                Customer identification failure. Shape and field names taken
                verbatim from the Paystack webhooks documentation.
              required:
                - customer_id
                - customer_code
                - email
                - identification
                - reason
              properties:
                customer_id:
                  type: integer
                  example: 82796315
                customer_code:
                  type: string
                  example: CUS_XXXXXXXXXXXXXXX
                email:
                  type: string
                  format: email
                identification:
                  $ref: '#/components/schemas/PaystackIdentification'
                reason:
                  type: string
                  example: Account number or BVN is incorrect

    DedicatedAccountAssignSuccessEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: dedicatedaccount.assign.success
            data:
              type: object
              description: |
                Paystack Dedicated Virtual Account resource. See
                https://paystack.com/docs/api/dedicated-virtual-account/.

    DedicatedAccountAssignFailedEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: dedicatedaccount.assign.failed
            data:
              type: object
              description: Failure context for the DVA assignment attempt.

    InvoiceCreateEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: invoice.create
            data:
              type: object
              description: |
                Subscription invoice resource. Inspect the invoice object and
                act on it as documented in the Subscriptions API.

    InvoiceUpdateEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: invoice.update
            data:
              type: object
              description: Updated subscription invoice resource.

    InvoicePaymentFailedEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: invoice.payment_failed
            data:
              type: object
              description: Subscription invoice for which payment failed.

    PaymentRequestSuccessEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: paymentrequest.success
            data:
              type: object
              description: |
                Paystack Payment Request resource. See
                https://paystack.com/docs/api/payment-request/.

    PaymentRequestPendingEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: paymentrequest.pending
            data:
              type: object
              description: Paystack Payment Request resource (pending state).

    RefundFailedEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: refund.failed
            data:
              type: object
              description: |
                Paystack Refund resource. See https://paystack.com/docs/api/refund/.

    RefundPendingEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: refund.pending
            data:
              type: object
              description: Paystack Refund resource (pending processor response).

    RefundProcessedEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: refund.processed
            data:
              type: object
              description: Paystack Refund resource (processed by processor).

    RefundProcessingEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: refund.processing
            data:
              type: object
              description: Paystack Refund resource (received by processor).

    SubscriptionCreateEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: subscription.create
            data:
              type: object
              description: |
                Paystack Subscription resource. See
                https://paystack.com/docs/api/subscription/.

    SubscriptionDisableEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: subscription.disable
            data:
              type: object
              description: Paystack Subscription resource (disabled state).

    SubscriptionNotRenewEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: subscription.not_renew
            data:
              type: object
              description: Paystack Subscription resource (non-renewing state).

    SubscriptionExpiringCardsEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: subscription.expiring_cards
            data:
              type: object
              description: |
                Aggregated report of subscriptions whose cards expire in the
                current month. Field shape is not exhaustively documented by
                Paystack.

    TransferSuccessEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: transfer.success
            data:
              type: object
              description: |
                Paystack Transfer resource. See
                https://paystack.com/docs/api/transfer/.

    TransferFailedEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: transfer.failed
            data:
              type: object
              description: Paystack Transfer resource (failed state).

    TransferReversedEvent:
      allOf:
        - $ref: '#/components/schemas/EventEnvelope'
        - type: object
          properties:
            event:
              const: transfer.reversed
            data:
              type: object
              description: Paystack Transfer resource (reversed state).