⭐️ Local Payout API Integration Guide
How to integrate Pivot Local Payout API
This guide explains the complete integration flow for sending local payouts using the Pivot Payment API. It covers authentication, beneficiary validation, payout creation, webhook handling, and payout status reconciliation.
This page provides an end-to-end workflow. For full endpoint specifications, refer to the individual API references.
Overview
Pivot Local Payout API allows merchants to transfer funds from their Pivot balance to beneficiary bank accounts in Indonesia.
A typical payout integration consists of the following steps:
Authenticate API requests
Check available payout balance
Validate beneficiary bank account (Inquiry Account)
Create payout transaction
Receive payout status via webhook callback
Retrieve payout status for reconciliation (optional)
Prerequisites
Before integrating the payout API, ensure that:
Your merchant account has been activated for Local Payout.
You have received the following credentials from Pivot:
Client Key
Used to authenticate requests
Client Secret
Used to sign requests
Merchant ID
Unique identifier for your account
You should also configure:
A secure webhook endpoint to receive payout callbacks
Proper idempotency handling to avoid duplicate payouts
Base URL
Production
Sandbox
Authentication
All API requests must include authentication headers. A valid access token must be included in the Authorization header when sending requests to the Pivot API.
Endpoint reference:
Example headers:
Example request:
Example response:
Access tokens expire after 900 seconds (15 minutes). You must request a new access token once the current token expires.
Recommended Integration Flow
The recommended payout flow is shown below.
Step 1 — Check Payout Balance
Before creating a payout, ensure that your Pivot balance is sufficient to cover the transaction amount. If the balance is insufficient, the payout request will not be processed. The transaction will appear in the dashboard under Local Payout → Need Action → Waiting for Top Up, where you may retry the payout after topping up your balance or cancel the transaction.
Endpoint reference:
Example request:
Example response:
Step 2 — Validate Beneficiary Account
Before creating a payout, validate the beneficiary account using Inquiry Account.
This ensures:
the bank account exists
the account name matches the expected beneficiary
Endpoint reference:
Example request:
Example response:
You should display the returned account_name to your user for confirmation.
Step 3 — Create Payout
Once the beneficiary is validated, create the payout transaction. You have two options to create a payout:
Using inquiryId, or
Using channel information
Endpoint reference:
Example request using inquiryId:
Example request using channel information:
Note: For the full list of channel codes, refer to Channel Codes.
Example response:
Important notes:
reference_idmust be unique for each payout.Use idempotency to prevent duplicate transactions.
Step 4 — Handle Webhook Callback
Pivot sends a webhook callback when the payout status is updated.
Typical payout statuses:
PROCESSING
Payout is being processed
SUCCESS
Funds successfully transferred
FAILED
Payout failed
DELAYED
Payout is taking longer than expected to process
Example webhook payload for bulk payout:
Example webhook payload for single payout:
Your webhook endpoint should:
Verify the callback authenticity
Update payout status in your system
Return HTTP 200 to acknowledge receipt
Example response:
If your endpoint returns an error or timeout, Pivot may retry sending the webhook. For more details on the retry mechanism, refer to Callback.
Step 5 — Retrieve Payout Status (Optional)
You may retrieve payout status via API for reconciliation or if webhook delivery fails.
Endpoint reference:
Example request:
Example response:
To retrieve the details of a specific payout, refer to Retrieve a Single Payout Request.
Example request:
Example response:
Idempotency
To prevent duplicate transaction processing, all payout requests must include the X-REQUEST-ID header. Pivot uses this value to ensure that the same request is not processed multiple times.
If the same X-REQUEST-ID is received more than once within the validity period, Pivot will treat the request as the same transaction and return the original response instead of creating a new payout.
X-REQUEST-ID Requirements
The X-REQUEST-ID value must meet the following requirements:
Must contain only alphanumeric characters
Minimum length: 16 characters
Maximum length: 36 characters
The ID remains valid for 24 hours
After 24 hours, the same X-REQUEST-ID may be reused for a new transaction request.
Example Header:
Tips
Further measure to prevent duplicate payouts:
Do not retry payouts blindly if the transaction has not reached final status
Always check payout status before retrying
Error Handling
Common payout failure scenarios include:
Invalid account
Beneficiary account is invalid or doesn't exist
Declined due to beneficiary limit
Beneficiary account has already reached the daily limit
Failed to process by Bank Network
Bank network failed to process the transaction
Refer to the Response Codes and Failure Reasons section for full error mappings.
Common Integration Questions
What happens if the webhook fails?
If your webhook endpoint fails to respond with HTTP 200, Pivot will retry sending the callback. You should ensure your endpoint is highly available.
Can I retry a payout?
Do not retry immediately. Always retrieve the payout status first to avoid duplicate transfers.
Should I rely on webhook or API status?
Webhook is the primary mechanism for status updates. Retrieve payout status only for reconciliation or webhook failures.
Do I need to perform Inquiry Account before every payout?
Yes. This ensures the beneficiary account is valid and prevents payout failures.
How do I avoid duplicate payouts?
Use a unique reference_id for each payout and implement idempotency logic in your system.
API References
For full endpoint specifications, refer to:
Payout Balance
Inquiry Account
Create Payout
Retrieve Payout
Callback
Response Codes and Failure Reasons
Test Scenarios
Channel Codes
Last updated