---
openapi: 3.1.0
info:
  title: Zepto Payments API
  version: '20260901'
  description: Documentation for the Zepto Payments API.
  termsOfService: https://www.zepto.com.au/customer-terms
  contact:
    email: support@zepto.com.au
tags:
- name: Payouts
  description: Initiate a payout
- name: Error Handling
  description: |-
    All errors from the Payments API share one structure. Whether an error appears in an error response, on a failed payment, or in a webhook payload, it is the same object:

    | Attribute | Required | Description |
    |---|---|---|
    | `code` | Yes | A unique error code identifying the issue |
    | `title` | Yes | A short summary of the error |
    | `detail` | Yes | A detailed explanation of the error |
    | `data` | No | Per-attribute validation messages (e.g. on 400 and 422 responses) |
    | `links` | No | Related documentation links (e.g. on 401 and 503 responses) |

    ## Error Responses

    Requests that fail return an `errors` array at the top level of the response body.

    ### API error (400)

    Returned when request parameters fail contract validation. The `data` attribute contains per-attribute messages.

    ```json
    {
      "errors": [
        {
          "code": "ZIS01",
          "title": "Bad Request",
          "detail": "The request parameters are invalid.",
          "data": {
            "amount": ["can't be blank"],
            "uid": ["can't be blank"]
          }
        }
      ]
    }
    ```

    ## Failed Payments

    When a payment fails asynchronously, the payment resource in subsequent responses includes an `errors` array describing the cause.

    ```json
    {
      "data": {
        "status": "failed",
        "errors": [
          {
            "code": "ZIC01",
            "title": "Creditor Account Alias Not Resolved",
            "detail": "The creditor account alias could not be resolved."
          }
        ]
      }
    }
    ```

    A failed payment's `payments_payout.finalised` webhook carries the same `errors` array.

    ## Failure Code Prefixes

    All codes use the `ZI` prefix (Zepto payment Initiation). The third character indicates the responsible party:

    - **S** — Shared (applies regardless of side)
    - **D** — Debtor (originator of the payment)
    - **C** — Creditor (recipient of the payment)

    ## Shared Failure Codes

    Codes that may apply to any request or payment, regardless of which side caused the issue.

    |Code|Title|Description|
    |---|---|---|
    |ZIS01|Bad Request|The request parameters are invalid.|
    |ZIS02|Unprocessable Entity|The request could not be processed.|
    |ZIS03|Duplicate UID|A payment with the given UID already exists.|
    |ZIS04|Retention Period Expired|The payment is outside the retention period and is no longer available.|
    |ZIS05|Over Per-Transaction Limit|The requested amount exceeds your per-transaction limit.|
    |ZIS06|Debtor and Creditor Are the Same Account|Please use transfers to move money between internal accounts.|
    |ZIS07|Client Not Found|The client could not be found.|
    |ZIS08|Unauthorised Access Token|Access token is expired or not valid|
    |ZIS09|Unauthorised User|This user has not yet confirmed their account or is suspended|
    |ZIS10|Forbidden|This user is not permitted to perform the requested action.|
    |ZIS11|Invalid Accept Format|Accepted formats: '*/*', 'application/json'|
    |ZIS12|Invalid Request Body|The request body could not be parsed as JSON.|
    |ZIS13|Gateway Timeout|The server did not receive a timely response. Please try again later.|
    |ZIS14|Timeout Acquiring Lock|Timed out waiting for another request to finish. Retry in 5 seconds.|
    |ZIS15|Invalid Request Parameters|One or more request parameters are invalid.|
    |ZIS16|Payment Not Cancellable|The payment can't be cancelled in its current status.|
    |ZIS99|Unknown Payment Error|An unknown error occurred while processing the payment. Please contact Zepto for assistance.|

    ## Debtor Failure Codes

    Codes indicating the issue originated from the debtor side (e.g. account configuration, available funds).

    |Code|Title|Description|
    |---|---|---|
    |ZID01|Debtor Account Not Found|The debtor account could not be found.|
    |ZID02|Debtor Account Insufficient Funds|The debtor account had insufficient funds to process this payment.|
    |ZID03|Debtor Account Not Active|The debtor account is not active.|
    |ZID04|Debtor Account Not Configured|The debtor account is not configured for payments.|
    |ZID05|Debtor Account Unsupported Channel|The debtor account does not support the selected payment channel.|
    |ZID06|Debtor Account Debit Blocked|The debtor account has an active debit block.|

    ## Creditor Failure Codes

    Codes indicating the issue originated from the creditor side (e.g. unable to resolve the destination account).

    |Code|Title|Description|
    |---|---|---|
    |ZIC01|Creditor Account Alias Not Resolved|The creditor account alias could not be resolved.|
    |ZIC02|Creditor Account Closed|The creditor account is closed.|
    |ZIC03|Intermittent Outage At Target Institution|The target financial institution is experiencing technical difficulties. Please try again later.|
    |ZIC04|Creditor Account Blocked|The creditor account is blocked from receiving funds.|
    |ZIC05|Creditor Account Cannot Accept NPP Payments|The creditor account cannot accept this payment via NPP.|
    |ZIC06|Creditor Account Blocked By Institution|The creditor account is blocked by its financial institution and cannot receive funds.|
- name: Sandbox Simulations
  description: |-
    In the **sandbox** environment, you can deterministically trigger payment failures by setting the payment `amount` to one of the values below.

    Each amount drives the simulated response and produces the corresponding failure on the payment. The resulting error codes are the same ones documented on the Error Handling page.

    Simulation is only active in the sandbox. In production these amounts are treated as ordinary payment values.

    |Amount|Code|Title|Description|
    |---|---|---|---|
    |105|ZIS05|Over Per-Transaction Limit|The requested amount exceeds your per-transaction limit.|
    |202|ZID02|Debtor Account Insufficient Funds|The debtor account had insufficient funds to process this payment.|
    |206|ZID06|Debtor Account Debit Blocked|The debtor account has an active debit block.|
    |301|ZIC01|Creditor Account Alias Not Resolved|The creditor account alias could not be resolved.|
    |302|ZIC02|Creditor Account Closed|The creditor account is closed.|
    |303|ZIC03|Intermittent Outage At Target Institution|The target financial institution is experiencing technical difficulties. Please try again later.|
    |304|ZIC04|Creditor Account Blocked|The creditor account is blocked from receiving funds.|
    |306|ZIC06|Creditor Account Blocked By Institution|The creditor account is blocked by its financial institution and cannot receive funds.|
security:
- bearerAuth: []
paths:
  "/payments/payouts":
    parameters:
    - "$ref": "#/components/parameters/ZeptoAPIVersion"
    post:
      summary: Create a payout
      tags:
      - Payouts
      description: Creates a new payout, moving funds from your float account to the
        recipient. Supply exactly one creditor channel of type `npp.credit.outbound`
        or `npp.pension.outbound`.
      parameters: []
      responses:
        '201':
          description: successful
          content:
            application/json:
              examples:
                npp_standard_payid:
                  summary: NPP standard · PayID
                  value:
                    data:
                      uid: payout-uid-001
                      client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
                      amount: 50000
                      status: queued
                      initiation_type: payout
                      debtor:
                        identity:
                          type: inline
                          party_name: Zepto Merchant
                          account_identifier:
                            type: bban
                            value: 802919-12345678
                        channels:
                        - type: float
                          description: Supplier payment
                      creditor:
                        identity:
                          type: inline
                          party_name: End User
                          account_identifier:
                            type: alias_email
                            value: payee@example.com
                        channels:
                        - type: npp.credit.outbound
                          description: Invoice 1042
                          remitter_name: Acme Pty Ltd
                      identifiers: []
                      description: Supplier payment
                      priority: normal
                      errors: []
                      scheduled_after:
                      timing:
                        added_at: '2026-01-01T00:00:00Z'
                        queued_at: '2026-01-01T00:00:00Z'
                        finalised_at:
                npp_standard_payid_scheduled:
                  summary: NPP standard · PayID · scheduled
                  value:
                    data:
                      uid: payout-uid-001
                      client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
                      amount: 50000
                      status: scheduled
                      initiation_type: payout
                      debtor:
                        identity:
                          type: inline
                          party_name: Zepto Merchant
                          account_identifier:
                            type: bban
                            value: 802919-12345678
                        channels:
                        - type: float
                          description: Supplier payment
                      creditor:
                        identity:
                          type: inline
                          party_name: End User
                          account_identifier:
                            type: alias_email
                            value: payee@example.com
                        channels:
                        - type: npp.credit.outbound
                          description: Invoice 1042
                          remitter_name: Acme Pty Ltd
                      identifiers: []
                      description: Supplier payment
                      priority: normal
                      errors: []
                      scheduled_after: '2026-01-03T00:00:00Z'
                      timing:
                        added_at: '2026-01-01T00:00:00Z'
                        queued_at:
                        finalised_at:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    "$ref": "#/components/schemas/payments.payout"
        '400':
          description: Bad Request
          content:
            application/json:
              examples:
                Scheduled in the past:
                  summary: Scheduled in the past
                  value:
                    errors:
                    - code: ZIS01
                      title: Bad Request
                      detail: The request parameters are invalid.
                      data:
                        scheduled_after:
                        - must not be in the past
                Scheduled too far ahead:
                  summary: Scheduled too far ahead
                  value:
                    errors:
                    - code: ZIS01
                      title: Bad Request
                      detail: The request parameters are invalid.
                      data:
                        scheduled_after:
                        - must be no more than 1 week in the future
                Scheduled with high priority:
                  summary: Scheduled with high priority
                  value:
                    errors:
                    - code: ZIS01
                      title: Bad Request
                      detail: The request parameters are invalid.
                      data:
                        priority:
                        - must be normal when scheduled_after is given
                Validation errors:
                  summary: Validation errors
                  value:
                    errors:
                    - code: ZIS01
                      title: Bad Request
                      detail: The request parameters are invalid.
                      data:
                        amount:
                        - can't be blank
                        debtor:
                        - can't be blank
                        creditor:
                        - can't be blank
                        uid:
                        - can't be blank
                        description:
                        - can't be blank
                        priority:
                        - can't be blank
                        client_id:
                        - can't be blank
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '409':
          description: Conflict
          content:
            application/json:
              examples:
                Duplicate UID:
                  summary: Duplicate UID
                  value:
                    errors:
                    - code: ZIS03
                      title: Duplicate UID
                      detail: A payment with the given UID already exists.
                      data:
                        uid:
                        - has already been used
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '401':
          description: unauthorized
          content:
            application/json:
              examples:
                Unauthorised access token:
                  summary: Unauthorised access token
                  value:
                    errors:
                    - code: ZIS08
                      title: Unauthorised Access Token
                      detail: Access token is expired or not valid
                      links:
                        about: https://docs.zeptopayments.com/docs/zepto-api#authentication-and-authorisation
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '403':
          description: forbidden
        '503':
          description: Service Unavailable
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait before retrying the request
          content:
            application/json:
              examples:
                Timeout acquiring lock:
                  summary: Timeout acquiring lock
                  value:
                    errors:
                    - code: ZIS14
                      title: Timeout Acquiring Lock
                      detail: Timed out waiting for another request to finish. Retry
                        in 5 seconds.
                      links:
                        about: https://docs.zeptopayments.com/v20260901/reference/idempotent-requests
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '500':
          description: Internal Server Error
      requestBody:
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/payments.payout.create"
            examples:
              npp_standard_payid:
                summary: NPP standard · PayID
                value:
                  amount: 50000
                  description: Supplier payment
                  priority: normal
                  debtor:
                    identity:
                      type: inline
                      account_identifier:
                        type: bban
                        value: 802919-12345678
                  creditor:
                    identity:
                      type: inline
                      party_name: End User
                      account_identifier:
                        type: alias_email
                        value: payee@example.com
                    channels:
                    - type: npp.credit.outbound
                      description: Invoice 1042
                      remitter_name: Acme Pty Ltd
                  uid: payout-uid-001
                  client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
              npp_standard_bban:
                summary: NPP standard · BBAN
                value:
                  amount: 50000
                  description: Supplier payment
                  priority: normal
                  debtor:
                    identity:
                      type: inline
                      account_identifier:
                        type: bban
                        value: 802919-12345678
                  creditor:
                    identity:
                      type: inline
                      party_name: End User
                      account_identifier:
                        type: bban
                        value: 013222-87654321
                    channels:
                    - type: npp.credit.outbound
                      description: Invoice 1042
                      remitter_name: Acme Pty Ltd
                  uid: payout-uid-001
                  client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
              npp_pension_payid:
                summary: NPP pension · PayID
                value:
                  amount: 50000
                  description: Super contribution
                  priority: normal
                  debtor:
                    identity:
                      type: inline
                      account_identifier:
                        type: bban
                        value: 802919-12345678
                  creditor:
                    identity:
                      type: inline
                      party_name: End User
                      account_identifier:
                        type: alias_email
                        value: payee@example.com
                    channels:
                    - type: npp.pension.outbound
                      description: Super contribution Mar 2026
                      end_to_end_id: e2e-001
                      remitter_name: Acme Payroll
                  uid: payout-uid-001
                  client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
              npp_standard_payid_scheduled:
                summary: NPP standard · PayID · scheduled
                value:
                  amount: 50000
                  description: Supplier payment
                  priority: normal
                  debtor:
                    identity:
                      type: inline
                      account_identifier:
                        type: bban
                        value: 802919-12345678
                  creditor:
                    identity:
                      type: inline
                      party_name: End User
                      account_identifier:
                        type: alias_email
                        value: payee@example.com
                    channels:
                    - type: npp.credit.outbound
                      description: Invoice 1042
                      remitter_name: Acme Pty Ltd
                  uid: payout-uid-001
                  client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
                  scheduled_after: '2026-01-03T00:00:00Z'
      callbacks:
        payments_payout.finalised:
          DESTINATION_WEBHOOK_URL:
            post:
              summary: Payout finalised
              description: Sent once a payout has reached its final status and will
                not change again. `body.status` is `settled` when the funds are available
                to the creditor, `cancelled` when the payout was cancelled, or `failed`
                with the reasons in `body.errors`. For a failed payout, any funds
                debited for it are back in the debtor's account by the time this is
                sent, so it is safe to retry the payout or arrange a fallback payment.
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      "$ref": "#/components/schemas/payments.payout.finalised_webhook"
              responses:
                '200':
                  description: OK
    get:
      summary: List payouts
      tags:
      - Payouts
      description: Returns the account's payouts.
      parameters:
      - name: per_page
        description: Number of results per page
        in: query
        schema:
          type: integer
          default: 20
          minimum: 1
          maximum: 100
      - name: starting_after
        description: Opaque pagination cursor value. Set by following "next" links.
        in: query
        schema:
          type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              examples:
                Successful request:
                  summary: Successful request
                  value:
                    links: {}
                    data:
                    - uid: payment-uid-123
                      client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
                      amount: 50000
                      status: queued
                      initiation_type: payout
                      debtor:
                        identity:
                          type: inline
                          party_name: Zepto Merchant
                          account_identifier:
                            type: bban
                            value: 062000-12345678
                        channels:
                        - type: float
                          description: Supplier payment
                      creditor:
                        identity:
                          type: inline
                          party_name: End User
                          account_identifier:
                            type: alias_email
                            value: payee@example.com
                        channels:
                        - type: npp.credit.outbound
                          description: Invoice 1042
                          remitter_name: Acme Pty Ltd
                      identifiers: []
                      description: Supplier payment
                      priority: normal
                      errors: []
                      scheduled_after:
                      timing:
                        added_at: '2026-01-01T00:00:00Z'
                        queued_at: '2026-01-01T00:00:00Z'
                        finalised_at:
              schema:
                type: object
                properties:
                  links:
                    "$ref": "#/components/schemas/payments.pagination_links"
                  data:
                    type: array
                    items:
                      "$ref": "#/components/schemas/payments.payout"
        '401':
          description: unauthorized
          content:
            application/json:
              examples:
                Unauthorised access token:
                  summary: Unauthorised access token
                  value:
                    errors:
                    - code: ZIS08
                      title: Unauthorised Access Token
                      detail: Access token is expired or not valid
                      links:
                        about: https://docs.zeptopayments.com/docs/zepto-api#authentication-and-authorisation
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '403':
          description: forbidden
        '504':
          description: Gateway Timeout
          content:
            application/json:
              examples:
                Gateway timeout:
                  summary: Gateway timeout
                  value:
                    errors:
                    - code: ZIS13
                      title: Gateway Timeout
                      detail: The server did not receive a timely response. Please
                        try again later.
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '500':
          description: Internal Server Error
  "/payments/payouts/{uid}":
    parameters:
    - "$ref": "#/components/parameters/ZeptoAPIVersion"
    get:
      summary: Get a payout
      tags:
      - Payouts
      description: Returns a single payout by its UID.
      parameters:
      - name: uid
        in: path
        description: The UID of the payout
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              examples:
                Queued payout:
                  summary: Queued payout
                  value:
                    data:
                      uid: payment-uid-123
                      client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
                      amount: 50000
                      status: queued
                      initiation_type: payout
                      debtor:
                        identity:
                          type: inline
                          party_name: Zepto Merchant
                          account_identifier:
                            type: bban
                            value: 062000-12345678
                        channels:
                        - type: float
                          description: Supplier payment
                      creditor:
                        identity:
                          type: inline
                          party_name: End User
                          account_identifier:
                            type: alias_email
                            value: payee@example.com
                        channels:
                        - type: npp.credit.outbound
                          description: Invoice 1042
                          remitter_name: Acme Pty Ltd
                      identifiers: []
                      description: Supplier payment
                      priority: normal
                      errors: []
                      scheduled_after:
                      timing:
                        added_at: '2026-01-01T00:00:00Z'
                        queued_at: '2026-01-01T00:00:00Z'
                        finalised_at:
                Failed payout:
                  summary: Failed payout
                  value:
                    data:
                      uid: payment-uid-456
                      client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
                      amount: 75000
                      status: failed
                      initiation_type: payout
                      debtor:
                        identity:
                          type: inline
                          party_name: Zepto Merchant
                          account_identifier:
                            type: bban
                            value: 062000-12345678
                        channels: []
                      creditor:
                        identity:
                          type: inline
                          party_name: End User
                          account_identifier:
                            type: bban
                            value: 123456-87654321
                        channels: []
                      identifiers: []
                      description: Supplier payment
                      priority: normal
                      errors:
                      - code: ZIC01
                        title: Creditor Account Alias Not Resolved
                        detail: The creditor account alias could not be resolved.
                      scheduled_after:
                      timing:
                        added_at: '2026-01-01T00:00:00Z'
                        queued_at: '2026-01-01T00:00:00Z'
                        finalised_at: '2026-01-01T00:00:05Z'
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    "$ref": "#/components/schemas/payments.payout"
        '410':
          description: Gone
          content:
            application/json:
              examples:
                Payment outside retention period:
                  summary: Payment outside retention period
                  value:
                    errors:
                    - code: ZIS04
                      title: Retention Period Expired
                      detail: The payment is outside the retention period and is no
                        longer available.
                      data: {}
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '401':
          description: unauthorized
          content:
            application/json:
              examples:
                Unauthorised access token:
                  summary: Unauthorised access token
                  value:
                    errors:
                    - code: ZIS08
                      title: Unauthorised Access Token
                      detail: Access token is expired or not valid
                      links:
                        about: https://docs.zeptopayments.com/docs/zepto-api#authentication-and-authorisation
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '403':
          description: forbidden
        '504':
          description: Gateway Timeout
          content:
            application/json:
              examples:
                Gateway timeout:
                  summary: Gateway timeout
                  value:
                    errors:
                    - code: ZIS13
                      title: Gateway Timeout
                      detail: The server did not receive a timely response. Please
                        try again later.
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '500':
          description: Internal Server Error
  "/payments/payouts/{uid}/cancel":
    parameters:
    - "$ref": "#/components/parameters/ZeptoAPIVersion"
    post:
      summary: Cancel a payout
      tags:
      - Payouts
      description: Cancels a scheduled payout. Its status becomes `cancelled`.
      parameters:
      - name: uid
        in: path
        description: The UID of the payout
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              examples:
                Cancelled payout:
                  summary: Cancelled payout
                  value:
                    data:
                      uid: payment-uid-123
                      client_id: '019b76da-a800-7c5e-8f3a-9d21e4b7c012'
                      amount: 50000
                      status: cancelled
                      initiation_type: payout
                      debtor:
                        identity:
                          type: inline
                          party_name: Zepto Merchant
                          account_identifier:
                            type: bban
                            value: 062000-12345678
                        channels:
                        - type: float
                          description: Supplier payment
                      creditor:
                        identity:
                          type: inline
                          party_name: End User
                          account_identifier:
                            type: alias_email
                            value: payee@example.com
                        channels:
                        - type: npp.credit.outbound
                          description: Invoice 1042
                          remitter_name: Acme Pty Ltd
                      identifiers: []
                      description: Supplier payment
                      priority: normal
                      errors: []
                      scheduled_after: '2026-01-02T09:00:00Z'
                      timing:
                        added_at: '2026-01-01T00:00:00Z'
                        queued_at:
                        finalised_at: '2026-01-01T00:00:00Z'
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    "$ref": "#/components/schemas/payments.payout"
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              examples:
                Payout not cancellable:
                  summary: Payout not cancellable
                  value:
                    errors:
                    - code: ZIS16
                      title: Payment Not Cancellable
                      detail: The payment can't be cancelled in its current status.
                      data: {}
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '409':
          description: Conflict
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds to wait before retrying the request
          content:
            application/json:
              examples:
                Timeout acquiring lock:
                  summary: Timeout acquiring lock
                  value:
                    errors:
                    - code: ZIS14
                      title: Timeout Acquiring Lock
                      detail: Timed out waiting for another request to finish. Retry
                        in 5 seconds.
                      links:
                        about: https://docs.zeptopayments.com/v20260901/reference/idempotent-requests
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '404':
          description: Not Found
        '410':
          description: Gone
          content:
            application/json:
              examples:
                Payment outside retention period:
                  summary: Payment outside retention period
                  value:
                    errors:
                    - code: ZIS04
                      title: Retention Period Expired
                      detail: The payment is outside the retention period and is no
                        longer available.
                      data: {}
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '401':
          description: unauthorized
          content:
            application/json:
              examples:
                Unauthorised access token:
                  summary: Unauthorised access token
                  value:
                    errors:
                    - code: ZIS08
                      title: Unauthorised Access Token
                      detail: Access token is expired or not valid
                      links:
                        about: https://docs.zeptopayments.com/docs/zepto-api#authentication-and-authorisation
              schema:
                "$ref": "#/components/schemas/payments.errors"
        '403':
          description: forbidden
        '500':
          description: Internal Server Error
webhooks:
  payments_payout.finalised:
    post:
      summary: Payout finalised
      description: Sent once a payout has reached its final status and will not change
        again. `body.status` is `settled` when the funds are available to the creditor,
        `cancelled` when the payout was cancelled, or `failed` with the reasons in
        `body.errors`. For a failed payout, any funds debited for it are back in the
        debtor's account by the time this is sent, so it is safe to retry the payout
        or arrange a fallback payment.
      tags:
      - Payouts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              "$ref": "#/components/schemas/payments.payout.finalised_webhook"
      responses:
        '200':
          description: Successfully received webhook.
servers:
- description: Zepto Sandbox
  url: https://api.sandbox.zeptopayments.com
- description: Zepto Production
  url: https://api.zeptopayments.com
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
  parameters:
    ZeptoAPIVersion:
      name: Zepto-API-Version
      in: header
      required: false
      schema:
        type: string
        pattern: "^\\d{8}$"
        default: '20250101'
        example: '20260901'
      description: API version in YYYYMMDD format. Defaults to 20250101 (legacy) when
        omitted.
  schemas:
    payments.account_identifier.alias_abn:
      type: object
      title: ABN alias
      required:
      - type
      - value
      description: An account addressed by a PayID ABN alias.
      properties:
        type:
          type: string
          enum:
          - alias_abn
          example: alias_abn
        value:
          type: string
          description: A PayID ABN alias.
          example: '123456789'
          pattern: "^((\\d{9})|(\\d{11}))$"
    payments.account_identifier.alias_email:
      type: object
      title: Email alias
      required:
      - type
      - value
      description: An account addressed by a PayID email alias.
      properties:
        type:
          type: string
          enum:
          - alias_email
          example: alias_email
        value:
          type: string
          description: A PayID email alias
          example: payee@example.com
          pattern: "^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$"
    payments.account_identifier.alias_phone:
      type: object
      title: Phone alias
      required:
      - type
      - value
      description: An account addressed by a PayID phone alias.
      properties:
        type:
          type: string
          enum:
          - alias_phone
          example: alias_phone
        value:
          type: string
          description: A PayID phone alias, e.g. +61-411222333.
          example: "+61-411222333"
          pattern: "^\\+[0-9]{1,3}-[1-9]{1,1}[0-9]{1,29}$"
    payments.account_identifier.bban:
      type: object
      title: BBAN
      required:
      - type
      - value
      description: An account addressed by BBAN (branch code and account number).
      properties:
        type:
          type: string
          enum:
          - bban
          example: bban
        value:
          type: string
          description: A branch code (BSB) and account number separated with a hyphen
          example: 802919-12345678
          pattern: "^\\d{6}-[ -~]{1,28}$"
    payments.channel.creditor:
      type: object
      oneOf:
      - "$ref": "#/components/schemas/payments.channel.npp_credit_outbound"
      - "$ref": "#/components/schemas/payments.channel.npp_pension_outbound"
      - "$ref": "#/components/schemas/payments.channel.de_credit_outbound"
      discriminator:
        propertyName: type
        mapping:
          npp.credit.outbound: "#/components/schemas/payments.channel.npp_credit_outbound"
          npp.pension.outbound: "#/components/schemas/payments.channel.npp_pension_outbound"
          de.credit.outbound: "#/components/schemas/payments.channel.de_credit_outbound"
      description: A payment channel on the creditor side of a payout, describing
        how funds arrive at that side.
    payments.channel.de_credit_outbound:
      type: object
      title: DE credit outbound
      required:
      - type
      - description
      - remitter_name
      properties:
        type:
          type: string
          enum:
          - de.credit.outbound
          description: Payment channel type
          example: de.credit.outbound
        description:
          type: string
          minLength: 1
          maxLength: 18
          pattern: "^[\\w\\+\\-\\@\\ \\$\\!\\%\\&\\(\\)\\*\\.\\/\\#\\=\\:\\;\\?\\,'\\[\\]\\_\\^]+$"
          description: Description that both you and the creditor can see, used as
            the Direct Entry lodgement reference. Uses the Direct Entry (BECS) character
            set.
          example: Invoice 1042
        remitter_name:
          type: string
          minLength: 3
          maxLength: 16
          pattern: "^[\\w\\+\\-\\@\\ \\$\\!\\%\\&\\(\\)\\*\\.\\/\\#\\=\\:\\;\\?\\,'\\[\\]\\_\\^]+$"
          description: The payer name the creditor sees, used as the Direct Entry
            remitter name. Uses the Direct Entry (BECS) character set.
          example: Acme Pty Ltd
      description: A Direct Entry (DE) credit channel on the creditor side of a payout,
        paying out via the direct entry system. Coming soon — this channel type is
        not yet available, and its details may change before release.
    payments.channel.debtor:
      type: object
      oneOf:
      - "$ref": "#/components/schemas/payments.channel.float"
      discriminator:
        propertyName: type
        mapping:
          float: "#/components/schemas/payments.channel.float"
      description: A payment channel on the debtor side of a payment, describing how
        funds leave that side.
    payments.channel.float:
      type: object
      title: Float
      required:
      - type
      - description
      properties:
        type:
          type: string
          enum:
          - float
          description: Payment channel type
          example: float
        description:
          type: string
          description: Description of the payment channel entry
          example: Invoice 1042
      description: A float channel. Represents your float account, appearing on the
        debtor side when funds move out of it or the creditor side when funds move
        into it.
    payments.channel.npp_credit_outbound:
      type: object
      title: NPP credit outbound
      required:
      - type
      - description
      - remitter_name
      properties:
        type:
          type: string
          enum:
          - npp.credit.outbound
          description: Payment channel type
          example: npp.credit.outbound
        description:
          type: string
          minLength: 1
          maxLength: 280
          description: Description that both you and the creditor can see. ASCII-printable
            characters and unicode emojis are accepted.
          example: Invoice 1042
        remitter_name:
          type: string
          minLength: 1
          maxLength: 140
          pattern: "^(?!.*&(?:[a-zA-Z][a-zA-Z0-9]*|#[0-9]+|#[xX][0-9a-fA-F]+);)[ -~]+$"
          description: The payer name the creditor sees. HTML character entities are
            not accepted.
          example: Acme Pty Ltd
        end_to_end_id:
          type:
          - string
          - 'null'
          minLength: 1
          maxLength: 35
          pattern: "^[ -~]+$"
          description: End-To-End ID. An optional reference carried to the creditor
            unchanged.
          example: e2e-001
      description: A New Payments Platform (NPP) credit channel on the creditor side
        of a payout, paying out in real time via NPP.
    payments.channel.npp_pension_outbound:
      type: object
      title: NPP pension outbound
      required:
      - type
      - description
      - end_to_end_id
      - remitter_name
      properties:
        type:
          type: string
          enum:
          - npp.pension.outbound
          description: Payment channel type
          example: npp.pension.outbound
        description:
          type: string
          minLength: 1
          maxLength: 280
          description: Description that both you and the creditor can see. ASCII-printable
            characters and unicode emojis are accepted.
          example: Super contribution Mar 2026
        end_to_end_id:
          type: string
          minLength: 1
          maxLength: 35
          pattern: "^[ -~]+$"
          description: End-To-End ID. Set this to the Payment Reference Number (PRN).
          example: '123456789010101001'
        remitter_name:
          type: string
          minLength: 1
          maxLength: 140
          pattern: "^(?!.*&(?:[a-zA-Z][a-zA-Z0-9]*|#[0-9]+|#[xX][0-9a-fA-F]+);)[ -~]+$"
          description: The payer name the creditor sees. HTML character entities are
            not accepted.
          example: Acme Payroll
      description: A New Payments Platform (NPP) pension channel on the creditor side
        of a payout, paying out in real time via NPP for superannuation payments.
    payments.creditor_identity.inline:
      type: object
      title: Inline
      required:
      - type
      - party_name
      - account_identifier
      properties:
        type:
          type: string
          enum:
          - inline
          description: How the identity is supplied. Only `inline` is supported today;
            future values (e.g. a stored contact) will be added without breaking this
            shape.
          example: inline
        party_name:
          type: string
          minLength: 1
          maxLength: 140
          pattern: "^(?!.*&(?:[a-zA-Z][a-zA-Z0-9]*|#[0-9]+|#[xX][0-9a-fA-F]+);)[ -~]+$"
          description: The name of the creditor party. HTML character entities are
            not accepted.
          example: End User
        account_identifier:
          oneOf:
          - "$ref": "#/components/schemas/payments.account_identifier.bban"
          - "$ref": "#/components/schemas/payments.account_identifier.alias_email"
          - "$ref": "#/components/schemas/payments.account_identifier.alias_phone"
          - "$ref": "#/components/schemas/payments.account_identifier.alias_abn"
          discriminator:
            propertyName: type
            mapping:
              bban: "#/components/schemas/payments.account_identifier.bban"
              alias_email: "#/components/schemas/payments.account_identifier.alias_email"
              alias_phone: "#/components/schemas/payments.account_identifier.alias_phone"
              alias_abn: "#/components/schemas/payments.account_identifier.alias_abn"
          description: The creditor's account identifier.
    payments.error:
      type: object
      required:
      - code
      - title
      - detail
      properties:
        code:
          type: string
          description: A code identifying the error
          example: ZIS01
        title:
          type: string
          description: A short summary of the error
          example: Bad Request
        detail:
          type: string
          description: A detailed explanation of the error
          example: The request parameters are invalid.
        data:
          type: object
          description: Additional data about the error, such as validation errors
            keyed by field name
        links:
          type: object
          required:
          - about
          properties:
            about:
              type: string
              description: A link to relevant documentation
              example: https://docs.zeptopayments.com/docs/zepto-api#authentication-and-authorisation
      description: An error describing why a request or payment failed
    payments.errors:
      type: object
      required:
      - errors
      properties:
        errors:
          type: array
          items:
            "$ref": "#/components/schemas/payments.error"
      description: Error response
    payments.event.base:
      type: object
      required:
      - uid
      - type
      - published_at
      - metadata
      - body
      properties:
        uid:
          type: string
          minLength: 1
          maxLength: 64
          pattern: "^[A-Za-z0-9\\-._~]+$"
          description: The unique identifier supplied at payout creation time
          example: payout-uid-123
        type:
          type: string
          description: The type of event that triggered the webhook delivery
          example: payments_payout.finalised
        published_at:
          type: string
          format: date-time
          description: When the event was published by Zepto
          example: '2026-05-07T12:34:57Z'
        metadata:
          type: object
          additionalProperties: true
          description: Merchant-attached metadata supplied at payout creation time
          example:
            order_id: abc-123
        body:
          type:
          - object
          - 'null'
          description: Event-specific details. Null for events that carry no extra
            detail.
          example:
    payments.pagination_links:
      type: object
      properties:
        next:
          type: string
          description: URL for next page of results. Won't be present if there are
            no further pages.
    payments.payout.create:
      type: object
      required:
      - amount
      - debtor
      - creditor
      - uid
      - description
      - priority
      - client_id
      properties:
        amount:
          type: integer
          exclusiveMinimum: 0
          maximum: 1000000000
          description: Amount in cents
          example: 50000
        debtor:
          type: object
          required:
          - identity
          properties:
            identity:
              type: object
              required:
              - type
              - account_identifier
              properties:
                type:
                  type: string
                  enum:
                  - inline
                  description: How the identity is supplied. Only `inline` is supported
                    today; future values (e.g. a stored contact) will be added without
                    breaking this shape.
                  example: inline
                account_identifier:
                  "$ref": "#/components/schemas/payments.account_identifier.bban"
              description: A Zepto-owned account addressed by BBAN. Party details
                are resolved server-side.
        creditor:
          type: object
          required:
          - identity
          - channels
          properties:
            identity:
              type: object
              oneOf:
              - "$ref": "#/components/schemas/payments.creditor_identity.inline"
              discriminator:
                propertyName: type
                mapping:
                  inline: "#/components/schemas/payments.creditor_identity.inline"
              description: The creditor party identified inline by name and account
                identifier.
            channels:
              type: array
              items:
                type: object
                oneOf:
                - "$ref": "#/components/schemas/payments.channel.npp_credit_outbound"
                - "$ref": "#/components/schemas/payments.channel.npp_pension_outbound"
                - "$ref": "#/components/schemas/payments.channel.de_credit_outbound"
                discriminator:
                  propertyName: type
                  mapping:
                    npp.credit.outbound: "#/components/schemas/payments.channel.npp_credit_outbound"
                    npp.pension.outbound: "#/components/schemas/payments.channel.npp_pension_outbound"
                    de.credit.outbound: "#/components/schemas/payments.channel.de_credit_outbound"
              description: Payment channels for the creditor. Supply exactly one channel
                of type npp.credit.outbound or npp.pension.outbound. Support for de.credit.outbound
                is coming soon.
        uid:
          type: string
          minLength: 1
          maxLength: 64
          pattern: "^[A-Za-z0-9\\-._~]+$"
          description: A unique identifier for the payment, using RFC3986 unreserved
            characters.
          example: payout-uid-001
        client_id:
          type: string
          format: uuid
          description: Identifier of the client the payout is attributed to. Must
            be a client on your account.
          example: '019cc090-1111-7222-8333-444455556666'
        description:
          type: string
          minLength: 1
          maxLength: 280
          description: Only visible to the initiator. ASCII-printable characters and
            unicode emojis are accepted.
          example: Supplier payment
        priority:
          type: string
          enum:
          - normal
          - high
          description: Processing priority. `normal` payouts are batched, trading
            a small processing delay for the best throughput; `high` payouts are processed
            individually for the lowest latency. See the Priority page for guidance
            on choosing.
          example: normal
        scheduled_after:
          type: string
          format: date-time
          description: Hold the payout until after this time instead of processing
            it immediately. At most 1 week ahead. A time earlier today (Australia/Sydney)
            is processed immediately; anything before today is rejected. Requires
            `normal` priority.
          example: '2026-03-18T00:00:00Z'
        metadata:
          type:
          - object
          - 'null'
          description: Use for your custom data. A place to store any miscellaneous
            information your system may need in regards to the record you are creating.
            This will be included in associated webhook payloads under the `metadata`
            key. Nested values (i.e., objects and arrays) are not allowed. The maximum
            size of this parameter is 2kb.
    payments.payout.finalised_webhook:
      allOf:
      - "$ref": "#/components/schemas/payments.webhook.base"
      - type: object
        properties:
          data:
            allOf:
            - "$ref": "#/components/schemas/payments.event.base"
            - type: object
              properties:
                type:
                  type: string
                  enum:
                  - payments_payout.finalised
                  example: payments_payout.finalised
                body:
                  type: object
                  required:
                  - status
                  - errors
                  properties:
                    status:
                      type: string
                      enum:
                      - settled
                      - failed
                      - cancelled
                      description: The payout's final status
                      example: failed
                    errors:
                      type: array
                      description: The reasons the payout failed. Empty unless `status`
                        is `failed`.
                      items:
                        "$ref": "#/components/schemas/payments.error"
                      example:
                      - code: ZIS99
                        title: Unknown Payment Error
                        detail: An unknown error occurred while processing the payment.
                          Please contact Zepto for assistance.
    payments.payout:
      type: object
      required:
      - amount
      - status
      - initiation_type
      - debtor
      - creditor
      - uid
      - description
      - priority
      - errors
      - timing
      properties:
        amount:
          type: integer
          exclusiveMinimum: 0
          maximum: 1000000000
          description: Amount in cents
          example: 50000
        status:
          type: string
          enum:
          - scheduled
          - queued
          - processing
          - settled
          - failed
          - cancelled
          description: Current status of the payout
          example: queued
        initiation_type:
          type: string
          enum:
          - payout
          description: The type of payment
          example: payout
        debtor:
          type: object
          required:
          - identity
          - channels
          properties:
            identity:
              type: object
              required:
              - type
              - party_name
              - account_identifier
              properties:
                type:
                  type: string
                  enum:
                  - inline
                  description: How the identity was supplied. `inline` is the resolved
                    party and account. Future sources (e.g. a stored contact) will
                    add enum values.
                  example: inline
                party_name:
                  type: string
                  minLength: 1
                  maxLength: 140
                  pattern: "^[ -~]+$"
                  description: Name of the debtor party
                  example: Zepto Merchant
                account_identifier:
                  type: object
                  required:
                  - type
                  - value
                  properties:
                    type:
                      type: string
                      enum:
                      - bban
                      description: The type of account identifier (always an internal/Zepto
                        account)
                      example: bban
                    value:
                      type: string
                      description: The account identifier value
                      example: 062000-12345678
              description: Resolved identity (who + where) on the debtor side of the
                payout.
            channels:
              type: array
              items:
                "$ref": "#/components/schemas/payments.channel.debtor"
        creditor:
          type: object
          required:
          - identity
          - channels
          properties:
            identity:
              type: object
              oneOf:
              - "$ref": "#/components/schemas/payments.creditor_identity.inline"
              discriminator:
                propertyName: type
                mapping:
                  inline: "#/components/schemas/payments.creditor_identity.inline"
              description: Resolved identity (who + where) on the creditor side of
                the payout.
            channels:
              type: array
              items:
                "$ref": "#/components/schemas/payments.channel.creditor"
        uid:
          type: string
          minLength: 1
          maxLength: 64
          pattern: "^[A-Za-z0-9\\-._~]+$"
          description: Supplied unique identifier for the payout
          example: payout-uid-123
        client_id:
          type:
          - string
          - 'null'
          format: uuid
          description: Identifier of the client the payout is attributed to.
          example: '019cc090-1111-7222-8333-444455556666'
        identifiers:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                - npp_inbound_instruction_id
                - npp_outbound_instruction_id
                - payto_inbound_instruction_id
                - legacy_payout_ref
              value:
                type: string
          description: Additional identifiers for the payout
        description:
          type: string
          minLength: 1
          maxLength: 280
          description: Description of the payout
          example: Supplier payment
        priority:
          type: string
          enum:
          - normal
          - high
          description: Processing priority the payout was created with. See the Priority
            page for how priority affects processing.
          example: normal
        metadata:
          type:
          - object
          - 'null'
          description: Arbitrary metadata attached to the payout
        errors:
          type: array
          description: The reasons the payout failed. Empty when the payout has not
            failed.
          items:
            "$ref": "#/components/schemas/payments.error"
        scheduled_after:
          type:
          - string
          - 'null'
          format: date-time
          description: The time after which the payout is queued for processing, as
            supplied on create. `null` when not scheduled.
          example: '2026-03-18T00:00:00Z'
        timing:
          "$ref": "#/components/schemas/payments.timing"
      description: Payout resource
    payments.timing:
      type: object
      required:
      - added_at
      - queued_at
      - finalised_at
      properties:
        added_at:
          type: string
          format: date-time
          description: ISO 8601 timestamp of when the payment was created
          example: '2026-03-17T00:00:00Z'
        queued_at:
          type:
          - string
          - 'null'
          format: date-time
          description: ISO 8601 timestamp of when the payment was queued for processing.
            Null until then.
          example: '2026-03-17T00:00:01Z'
        finalised_at:
          type:
          - string
          - 'null'
          format: date-time
          description: ISO 8601 timestamp of when the payment settled, failed or was
            cancelled. Null until then.
          example: '2026-03-17T00:00:05Z'
      description: When the payment reached each point in its lifecycle
    payments.webhook.base:
      type: object
      required:
      - data
      properties:
        data:
          "$ref": "#/components/schemas/payments.event.base"
