Create Payout Batch via File
POSThttps://api.cleverhub.co/api/v1/payouts/
This API enables you to create a batch payout to PayID or NPP-enabled BSB accounts by uploading a file containing payout details, facilitating bulk payment processing to multiple recipients efficiently.
If a payout cannot be processed due to insufficient funds and the is_retry
flag is set to true, the system will continue to attempt processing until sufficient funds are available, either through a top-up or new incoming payments.
Payment statuses:
- created: Payout payment created and pending further processing.
- processing: Payout has been topped up to the corresponding PayID and is currently being processed.
- scheduled: Waiting for funds to be debited from the payer's account; the payout is scheduled but not yet executed.
- completed: Payout payment has been completed successfully for the entire batch. Note that individual transaction failures do not affect the completion status of the overall batch.
Important notes:
- If using a phone number as the PayID, prefix it with the country code, separated by a dash. For example:
+61-412345678
. - PayIDs using email addresses must be in lowercase (e.g.,
johnwick@gmail.com
).
Request
- multipart/form-data
Bodyrequired
The file containing payout details. Supported formats are .csv
or .xlsx
.
You can download an example file at this link.
The scheduled date and time for the payout transaction in UTC. Format should be YYYY-MM-DDTHH:mm:ss
.
2024-01-01T10:00:00
Brief description of the payout purpose.
Possible values: >= 5 characters
and <= 140 characters
Monthly salary payout for January
If set to true, the system will attempt to retry the payout in case of insufficient funds, processing it once funds are available. Default is false.
false
true
A custom identifier provided by the merchant for tracking purposes.
custom-payout-id-123
URL that Hello Clever will invoke when the status of the transaction changes. The client must expose a TLS 1.2-secured endpoint with a certificate from a well-known commercial certificate authority. Self-signed or internally signed certificates are not accepted.
https://merchant.example.com/payout_status_callback
The authorization header value that Hello Clever will include in the callback request for security.
Bearer your_secret_token
Responses
- 200
- 400
- 401
- 404
- 422
Payout batch created successfully.
- application/json
- Schema
- Example (auto)
Schema
created
: The payout has been created but not yet processed.processing
: The payout is currently being processed.scheduled
: The payout is scheduled for a future date.completed
: The payout has been completed successfully.expired
: The payout has expired.
A unique identifier assigned to the payout payment, used for tracking and referencing purposes within the system.
12345
A unique UUID assigned to the payout payment, providing a globally unique reference for the transaction.
550e8400-e29b-41d4-a716-446655440000
A description of the payout payment, providing context or additional information such as the purpose of the payout.
Payout for invoice #12345
The PayID used for topping up the payout payment, allowing for easy routing of funds to the correct recipient.
sample@payid.com
The total amount of all transactions included in the payout, providing the complete value being paid out.
1000.00
The total amount that has been refunded to the payee, if applicable.
100.00
The total number of transactions within the payout that failed to complete successfully.
2
The date and time when the payout transaction is scheduled to occur, expressed in UTC.
2024-12-31T23:59:59Z
The current status of the payout payment. Possible values include:
Possible values: [created
, processing
, scheduled
, completed
, expired
]
processing
A URL for downloading an attachment related to the payout payment, such as a receipt or transaction details.
https://example.com/download/payout_attachment
payout_notification object
An error code associated with the payout, indicating any issues that occurred during processing.
HC_PAYOUT1
A description of the error encountered during the payout process, providing context for troubleshooting.
Insufficient funds to payout. Please top up balance in the dashboard.
Indicates whether the payout is being retried after a previous failure.
false
A custom identifier for the payout, provided by the merchant for tracking and reference purposes.
custom-payout-id-6789
payout_transactions object[]
{
"id": 12345,
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"description": "Payout for invoice #12345",
"payid": "sample@payid.com",
"total_amount": "1000.00",
"total_refund": "100.00",
"total_failed_transactions": "2",
"scheduled_at": "2024-12-31T23:59:59Z",
"status": "processing",
"export_url": "https://example.com/download/payout_attachment",
"payout_notification": {
"endpoint_url": "https://merchant.com/payout_callback",
"authorization_header": "Bearer your_token"
},
"error_code": "HC_PAYOUT1",
"error_message": "Insufficient funds to payout. Please top up balance in the dashboard.",
"is_retry": false,
"external_id": "custom-payout-id-6789",
"payout_transactions": [
{
"id": 123,
"balance_id": "550e8400-e29b-41d4-a716-446655441111",
"payee": "John Doe",
"payid": "payee@payid.com",
"payid_type": "EMAIL",
"bsb": "123456",
"account_number": "987654321",
"amount": "500.00",
"status": "settled",
"error_message": "Payment failed due to insufficient funds.",
"created_at": "2024-01-01T00:00:00Z"
}
]
}
Bad Request
Unauthorized
Not Found
Unprocessable Entity
Callbacks
- POST payoutCallback
POST{$request.body#/endpoint_url}
- application/json
Body
PayoutObject
created
: The payout has been created but not yet processed.processing
: The payout is currently being processed.scheduled
: The payout is scheduled for a future date.completed
: The payout has been completed successfully.expired
: The payout has expired.
A unique identifier assigned to the payout payment, used for tracking and referencing purposes within the system.
12345
A unique UUID assigned to the payout payment, providing a globally unique reference for the transaction.
550e8400-e29b-41d4-a716-446655440000
A description of the payout payment, providing context or additional information such as the purpose of the payout.
Payout for invoice #12345
The PayID used for topping up the payout payment, allowing for easy routing of funds to the correct recipient.
sample@payid.com
The total amount of all transactions included in the payout, providing the complete value being paid out.
1000.00
The total amount that has been refunded to the payee, if applicable.
100.00
The total number of transactions within the payout that failed to complete successfully.
2
The date and time when the payout transaction is scheduled to occur, expressed in UTC.
2024-12-31T23:59:59Z
The current status of the payout payment. Possible values include:
Possible values: [created
, processing
, scheduled
, completed
, expired
]
processing
A URL for downloading an attachment related to the payout payment, such as a receipt or transaction details.
https://example.com/download/payout_attachment
payout_notification object
An error code associated with the payout, indicating any issues that occurred during processing.
HC_PAYOUT1
A description of the error encountered during the payout process, providing context for troubleshooting.
Insufficient funds to payout. Please top up balance in the dashboard.
Indicates whether the payout is being retried after a previous failure.
false
A custom identifier for the payout, provided by the merchant for tracking and reference purposes.
custom-payout-id-6789
payout_transactions object[]
Callbacks Responses
- 200
- 400
- 401
Callback received successfully
Bad request
Unauthorized
- csharp
- curl
- dart
- go
- http
- java
- javascript
- kotlin
- c
- nodejs
- objective-c
- ocaml
- php
- powershell
- python
- r
- ruby
- rust
- shell
- swift
- HTTPCLIENT
- RESTSHARP
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.cleverhub.co/api/v1/payouts/");
request.Headers.Add("Accept", "application/json");
var content = new StringContent(string.Empty);
content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());