Skip to content
ZytePedevelopersDashboard
DocsAPI reference
API reference

Create Payee

Registers a payout recipient in the merchant payee vault.

POST/api/v1/payees/external/createMerchant HMAC
Use your enabled merchant account. Examples run on your server, never in this documentation.

Authentication

Use merchant HMAC headers and sign the exact path, query and raw body.

See authentication.

Workflow notes

  • The same merchant cannot register the same bank account twice.
  • Bank-mode payouts need bank_account_no + routing_id. UPI payouts need vpa.

Before you send

Check the field labels and use your enabled merchant account. Examples illustrate the API contract; confirm deployment-specific limits and error handling before launch. This page never sends a request.

Request example

Choose Node.js, Python, PHP, Ruby, Java or cURL. Run signed requests on your backend. PHP, Ruby and Java include signing directly. Java requires JDK 17 or newer.

import { signedHeaders } from './signing.mjs';
const path = `/api/v1/payees/external/create`;
const query = '';
const payload = {
  "legal_name": "Aditi Traders",
  "email_address": "ops@example.com",
  "phone_number": "9876543210",
  "bank_account_no": "123456789012",
  "routing_id": "HDFC0001234",
  "bank_name": "HDFC Bank",
  "vpa": "aditi.traders@okhdfcbank",
  "category": "business",
  "external_ref": "BENEFICIARY-42"
};
const body = JSON.stringify(payload);
const headers = signedHeaders({
  method: 'POST', path, query, body,
  keyId: process.env.ZYTEPE_API_KEY_ID,
  secret: process.env.ZYTEPE_API_SECRET,
});
headers['Content-Type'] = 'application/json';
const url = 'https://api.zytepe.com' + path + (query ? '?' + query : '');
const response = await fetch(url, { method: 'POST', headers, body });
if (!response.ok) throw new Error('Request failed: HTTP ' + response.status);
const result = await response.json();
// Store the returned identifiers securely. Do not log customer data.

Request fields

Optional fields can be omitted. Conditional fields depend on the payment method. Labels reflect the reviewed API schemas and handler checks.

legal_nameRequired

Recipient legal name.

email_addressOptional

Recipient email.

phone_numberOptional

Recipient contact number.

bank_nameOptional

Bank display name.

categoryOptional

Defaults to individual.

external_refOptional

Your beneficiary reference.

bank_account_noConditional

Required for bank-mode payouts; optional when creating a UPI-only payee.

routing_idConditional

Required with bank details for bank-mode payouts.

vpaConditional

Required for UPI payouts; optional for bank-only recipients.

Request body

JSON · request.json
{
  "legal_name": "Aditi Traders",
  "email_address": "ops@example.com",
  "phone_number": "9876543210",
  "bank_account_no": "123456789012",
  "routing_id": "HDFC0001234",
  "bank_name": "HDFC Bank",
  "vpa": "aditi.traders@okhdfcbank",
  "category": "business",
  "external_ref": "BENEFICIARY-42"
}

Example response

JSON · response
{
  "success": true,
  "message": "Payee created.",
  "data": {
    "id": "d965aa45-1952-4749-aa52-2bed21470ffd",
    "legal_name": "Aditi Traders",
    "email_address": "ops@example.com",
    "phone_number": "9876543210",
    "bank_account_no": "123456789012",
    "routing_id": "HDFC0001234",
    "vpa_address": "aditi.traders@okhdfcbank",
    "status": "active",
    "compliance_status": "pending",
    "created_at": "2026-05-03T10:30:00Z"
  }
}