---
title: "Make a Payment"
method: POST
path: "/payments"
tags: ["Payments"]
---

# Make a Payment

`POST /payments`

## Request

- Base URL: `https://api.sandbox.zeptopayments.com`
- URL: `https://api.sandbox.zeptopayments.com/payments`
- Auth: OAuth 2
  - Authorization code: `/oauth/authorize`
  - Token URL: `/oauth/token`

To enable custom payment flows, the required payment channel can be selected by setting the _channel_ attribute to one of the following combinations:

<ul>
  <li>["new_payments_platform"] - for faster payments 24/7/365</li>
  <li>["direct_entry"] - for slower traditional payments</li>
  <li>["new_payments_platform", "direct_entry"] - enables automatic channel switching if a payment fails on the NPP</li>
</ul>
<aside class="notice">We now require supplying an <code>Idempotency-Key</code> header when performing this request to ensure you can safely retry the action in case of an issue. If the header value is different to one provided previously, we will be treating a request as a new operation which may lead to duplicate payments. To understand more on how to make idempotent requests, please refer to our <a href="https://docs.zeptopayments.com/v20260901/reference/idempotent-requests">Idempotent requests guide</a>.</aside>

## Headers

- `Idempotency-Key` string, required

## Request body

- MakeAPaymentRequest
  - `description` string, required: User description. Only visible to the payer. ASCII-printable characters and unicode emojis are accepted.
  - `matures_at` string, date-time, required: Date & time in UTC ISO8601 the Payment should be processed. (Can not be earlier than the start of current day in Sydney AEST/AEDT)
  - `your_bank_account_id` string, required: Specify where we should take the funds for this transaction. If omitted, your primary bank account will be used.
  - `channels` unknown[], required: Specify the payment channel to be used, in order. (new_payments_platform, direct_entry, or both)
    - unknown
  - `payouts` Payout[], required: One Payout object only
    - `amount` integer, required: Amount in cents to pay the recipient
    - `description` string, required: Description that both the payer and recipient can see. For Direct Entry payments, the payout recipient will see the first 9 characters of this description. For NPP payments, the payout recipient will see the first 280 characters of this description. ASCII-printable characters and unicode emojis are accepted.
    - `recipient_contact_id` string, required: Contact to pay (`Contact.data.id`)
    - `category_purpose_code` 'PENS' | 'SALA' | 'TAXS': ISO 20022 code for payment category purpose (see supported values below).
    - `end_to_end_id` string: End-To-End ID (35 max. characters). Required when a category purpose code is present. For superannuation or tax payments, set this to the Payment Reference Number (PRN). For salary payments, set this to the Employee Reference.
    - `metadata` object: Use for your custom data and certain Zepto customisations. Stored against generated transactions and included in associated webhook payloads.
  - `metadata` Metadata: Use for your custom data and certain Zepto customisations.

## Response `201`

Created

- MakeAPaymentResponse
  - `data` object, required

## Other responses

- `400`: Bad Request (errors)

## Changes

- **2026-11-03** `75ced198de22`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zeptopayments/apis/zepto-api/changes/payments/post.md)

---

[API](https://skmtc.dev/zeptopayments/apis/zepto-api.md) - [All operations](https://skmtc.dev/zeptopayments/apis/zepto-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zeptopayments/apis/zepto-api/revisions/75ced198de22?raw)
