Single Payout Transfer
Transfer funds to a single beneficiary via the PayOrc payout API.
Single Payout Transfer
API Version: 3.0.0
Send funds to one beneficiary at a time. Each request specifies payment mode, amount, beneficiary bank details, and a checksum for payload integrity.
Generate a Bearer token first — see Create Authentication Token.
Endpoint
| Method | URL |
|---|---|
| POST | https://payout.payorc.com/v1/transfer |
Headers
| Header | Type | Required | Description |
|---|---|---|---|
Authorization | String | Yes | Bearer token from GET /v1/token |
Content-Type | String | Yes | application/json |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
reference_no | String | Yes | Unique merchant reference (max 35 chars; letters, numbers, hyphen only) |
payment_mode | String | Yes | NEFT, RTGS, IFT, IMPSP2A, or IMPSP2P (must be enabled on your MID) |
amount | String/Number | Yes | Positive amount, max 2 decimal places. RTGS requires ≥ ₹2,00,000 |
currency | String | Yes | ISO 4217 code (e.g. INR). Must match your MID currency |
remark | String | No | Transfer remark (max 40 chars; may be omitted or "") |
callback_url | String | Yes | Must be present. HTTPS webhook URL (max 100 chars), or "" if not used |
checksum | String | Yes | 64-character lowercase SHA-256 hex (see Checksum) |
beneficiary | Object | Yes | Beneficiary bank details (see below) |
beneficiary Object
The beneficiary object is required. All keys below must be present in every request. Use "" for fields not applicable to the payment mode.
| Field | Type | Key required | Value required | Description |
|---|---|---|---|---|
account_number | String | Yes | Conditional | 9–18 digit account number (NEFT/RTGS/IFT/IMPSP2A) |
account_type | String | Yes | Conditional | SA, CA, OD, CC, LA, NRE, FCRA (NEFT/RTGS) |
ifsc | String | Yes | Conditional | IFSC code XXXX0XXXXXX (NEFT/RTGS/IMPSP2A) |
branch | String | Yes | Conditional | Up to 4 characters (IFT) |
name | String | Yes | Yes | 3–35 chars; letters and spaces only |
email | String | Yes | No | Valid email or "" |
mobile | String | Yes | Conditional | 10- or 12-digit mobile (IMPSP2P; validated when non-empty) |
mmid | String | Yes | Conditional | Exactly 7 characters (IMPSP2P) |
lei_code | String | Yes | Conditional | LEI format; mandatory for NEFT when amount > ₹50 crore |
nre_flag | String | Yes | Conditional | EX or "" (NEFT/RTGS) |
Payment-mode-specific requirements
| Mode | Required beneficiary fields |
|---|---|
NEFT | account_number, account_type, name, ifsc, nre_flag |
RTGS | Same as NEFT; amount must be ≥ 2,00,000 |
IFT | account_number, branch |
IMPSP2A | account_number, ifsc |
IMPSP2P | mobile, mmid |
Checksum
Build the canonical string (pipe-separated, trimmed values):
reference_no|amount|currency|payment_mode|account_number|account_type|callback_urlHash with SHA-256 and send the lowercase hex digest as checksum.
Example:
REF-001|100.00|INR|NEFT|200060539673|SA|https://yourdomain.com/webhooks/payoutCompute the checksum on your server before sending the request. Use SHA-256 over the UTF-8 canonical string and send the lowercase hex digest (64 characters) in the checksum field.
Code Examples
curl --location 'https://payout.payorc.com/v1/transfer' \
--header 'Authorization: Bearer YOUR_TOKEN' \
--header 'Content-Type: application/json' \
--data-raw '{
"reference_no": "REF-001",
"payment_mode": "NEFT",
"amount": "100.00",
"remark": "Invoice payment",
"currency": "INR",
"callback_url": "https://yourdomain.com/webhooks/payout",
"checksum": "YOUR_64_CHAR_SHA256_HEX",
"beneficiary": {
"account_number": "200060539673",
"account_type": "SA",
"ifsc": "INDB0000539",
"branch": "",
"name": "John Doe",
"email": "[email protected]",
"mobile": "9876543210",
"mmid": "",
"lei_code": "",
"nre_flag": "EX"
}
}'Response — Success (200)
{
"data": {
"reference_no": "REF-001",
"transaction_id": "PY260217164600000007",
"status": "QUEUED",
"amount": "100.00",
"currency": "INR"
},
"message": "Payout queued successfully",
"status": "success",
"code": "00"
}Response Fields
| Field | Type | Description |
|---|---|---|
data.reference_no | String | Your reference number |
data.transaction_id | String | PayOrc payout ID |
data.status | String | Initial status — QUEUED |
data.amount | String | Transfer amount |
data.currency | String | Currency code |
message | String | Payout queued successfully |
status | String | success |
code | String | 00 |
Response — Error (4xx)
{
"message": "reference_no already exists",
"status": "fail",
"code": "E1001"
}| Code | Meaning |
|---|---|
E0021 | Validation error (invalid field, checksum format, etc.) |
E0401 | Unauthorized — invalid or expired token |
E1001 | Duplicate reference_no |
Checksum mismatch returns HTTP 401 with message Checksum verification failed (code E0021).
Insufficient balance returns Insufficient merchant balance (code E0021). MID or PSP selection failed is returned when no routing MID is configured.