⭐️ 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:

  1. Authenticate API requests

  2. Check available payout balance

  3. Validate beneficiary bank account (Inquiry Account)

  4. Create payout transaction

  5. Receive payout status via webhook callback

  6. 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:

Credential
Description

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:

Authentication

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.


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:

Payout Balancearrow-up-right

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:

Inquiry Accountarrow-up-right

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:

Create Payout

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_id must 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:

Status
Meaning

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:

  1. Verify the callback authenticity

  2. Update payout status in your system

  3. 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:

Retrieve Payout

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:

Error
Cause

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