NAV Navbar
Logo
PHP Shell

Introduction

Welcome to Flip for Business API Documentation. Flip will help you in doing and managing your business transaction, so you can focus on creating a better product.

Currently, we have API endpoints from two different versions (V2 and V3). There are endpoints that exclusively exist in V2 or V3. On the body of the endpoints we have incorporated information about which version does the API endpoint belong to. This is done to help you avoid using incompatible URL base, because each version has their own product environment.

Request Introduction

In V3, we add new features that enhance transaction security by using Idempotency Key and allow you to notify the beneficiaries of your transactions via email. We also add new endpoints to get transactions by Idempotency Key and ID so it is easier for you to navigate your transactions.

This documentation will be updated every time there is a change or if there is a new endpoint introduced. Every change will be documented in the changelog section.

We try to make this API and documentation to be as easy as possible and pleasing for the developer trying to implement this API. So if you have a suggestion or correction, feel free to send us an email at [email protected].

General Explanation

To know if the request is success or failed, you can see the HTTP Status Code on each response.

Every request should be sent as application/x-www-form-urlencoded unless told differently. The body of the request must be sent as post data (e.g attribute=value&attribute2=value2&attribute3=value3).

422 status code is used to indicate the mistake from your side. The common response for this status code is like on the right side:

{
  "code": [outer_code],
  "errors": [
    {
      "attribute": "[attribute]",
      "code": [inner_code],
      "message": "[message]"
    }
  ]
}

Possible value for outer_code is:

Possible value for inner_code is all the code listed in respective products’ Error List section:

Destination Bank

Find the list of bank codes below for the supported destination banks and e-Wallets. Currently, we support transfer to 100+ banks in Indonesia including Virtual Account/VA (BNI, BRI, CIMB, Mandiri, Danamon, and Muamalat) and e-Wallets.

Bank

Bank Code Bank Name
mandiri Bank Mandiri
bri Bank Rakyat Indonesia
bni BNI (Bank Negara Indonesia)
bca Bank Central Asia
bsm BSI (Bank Syariah Indonesia)
cimb CIMB Niaga & CIMB Niaga Syariah
muamalat Muamalat
danamon Bank Danamon & Danamon Syariah
permata Bank Permata & Permata Syariah
bii Maybank Indonesia
panin Panin Bank
uob TMRW/UOB
ocbc OCBC NISP
citibank Citibank
artha Bank Artha Graha Internasional
tokyo Bank of Tokyo Mitsubishi UFJ
dbs DBS Indonesia
standard_chartered Standard Chartered Bank
capital Bank Capital Indonesia
anz ANZ Indonesia
boc Bank of China (Hong Kong) Limited
bumi_arta Bank Bumi Arta
hsbc HSBC Indonesia
rabobank Rabobank International Indonesia
mayapada Bank Mayapada
bjb BJB
dki Bank DKI Jakarta
daerah_istimewa BPD DIY
jawa_tengah Bank Jateng
jawa_timur Bank Jatim
jambi Bank Jambi
sumut Bank Sumut
sumatera_barat Bank Sumbar (Bank Nagari)
riau_dan_kepri Bank Riau Kepri
sumsel_dan_babel Bank Sumsel Babel
lampung Bank Lampung
kalimantan_selatan Bank Kalsel
kalimantan_barat Bank Kalbar
kalimantan_timur Bank Kaltimtara
kalimantan_tengah Bank Kalteng
sulselbar Bank Sulselbar
sulut Bank SulutGo
nusa_tenggara_barat Bank NTB Syariah
bali BPD Bali
nusa_tenggara_timur Bank NTT
maluku Bank Maluku
papua Bank Papua
bengkulu Bank Bengkulu
sulawesi Bank Sulteng
sulawesi_tenggara Bank Sultra
nusantara_parahyangan Bank Nusantara Parahyangan
india Bank of India Indonesia
mestika_dharma Bank Mestika Dharma
sinarmas Bank Sinarmas
maspion Bank Maspion Indonesia
ganesha Bank Ganesha
icbc ICBC Indonesia
qnb_kesawan QNB Indonesia
btn BTN/BTN Syariah
woori Bank Woori Saudara
tabungan_pensiunan_nasional BTPN
btpn_syr Bank BTPN Syariah
bjb_syr BJB Syariah
mega Bank Mega
bukopin Wokee/Bukopin
bukopin_syr Bank Bukopin Syariah
jasa_jakarta Bank Jasa Jakarta
hana LINE Bank/KEB Hana
mnc_internasional Motion/MNC Bank
agroniaga BRI Agroniaga
sbi_indonesia SBI Indonesia
royal Blu/BCA Digital
nationalnobu Nobu (Nationalnobu) Bank
mega_syr Bank Mega Syariah
ina_perdana Bank Ina Perdana
sahabat_sampoerna Bank Sahabat Sampoerna
kesejahteraan_ekonomi Seabank/Bank BKE
bca_syr BCA (Bank Central Asia) Syariah
artos Jago/Artos
mayora Bank Mayora Indonesia
index_selindo Bank Index Selindo
victoria_internasional Bank Victoria International
agris Bank IBK Indonesia
chinatrust CTBC (Chinatrust) Indonesia
commonwealth Commonwealth Bank
victoria_syr Bank Victoria Syariah
banten BPD Banten
mutiara Bank Mutiara
panin_syr Panin Dubai Syariah
aceh Bank Aceh Syariah
antardaerah Bank Antardaerah
ccb Bank China Construction Bank Indonesia
cnb Bank CNB (Centratama Nasional Bank)
dinar Bank Dinar Indonesia
eka BPR EKA (Bank Eka)
harda Allo Bank/Bank Harda Internasional
mantap BANK MANTAP (Mandiri Taspen)
mas Bank Multi Arta Sentosa (Bank MAS)
prima Bank Prima Master
shinhan Bank Shinhan Indonesia
yudha_bakti Neo Commerce/Yudha Bhakti
aladin Bank Aladin Syariah

e-Wallet

e-Wallets Code e_wallets Name
gopay GoPay
ovo OVO
shopeepay ShopeePay
dana Dana
linkaja LinkAja

Authentication

<?php
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

$curl = curl_init();
curl_setopt($curl, CURLOPT_USERPWD, $secret_key.":");
<?php
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";
$encoded_auth = base64_encode($secret_key.":");

$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, ["Authorization: Basic ".$encoded_auth]);
curl --user <wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd>: https://bigflip.id/api/v2/disbursement

We are using Basic Authentication by including Authorization header in each of your request. Value of the header is the provided Secret Key from your Flip for Business dashboard. You should include your secret key like a usual basic auth request, and use the secret key as the username:

Authorization: Basic [base64encode(<secret_key>+":")]

You can also see another example of how to include the secret key on the right column.

Signature

Signature is used to secure your request API, to avoid attackers change your payload. Signature is optional, by default it is disabled. Signature only for API that related to Disbursement.


<?php
// Generate public key and private key pair.
$key_pair = openssl_pkey_new(array(
            'private_key_bits' => 2048,
            'private_key_type' => OPENSSL_KEYTYPE_RSA,
        ));
$details = openssl_pkey_get_details($key_pair);
$public_key = $details['key'];

$private_key = '';
openssl_pkey_export($key_pair, $private_key);

// check/print your public key and private key pair.
echo $public_key;
echo $private_key;
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

cat private.pem
cat public.pem

If you want to enable a signature, please do the following steps:

  1. Generate public key and private key pair. Use algorithm OPENSSL_KEYTYPE_RSA 2048 bits.
  2. Send the public key to flip.id and inform when you ready to request with signature.
  3. Every request for API Disbursement, add header X-Signature. Generate signature with your private key, the input data is your parameter POST & GET request encoded in string, all data type should be a string. Signature use algorithm sha256WithRSAEncryption and encode with base64.

Big Flip Signature

<?php
$payloads = [
    "account_number" => "0437051936",
    "bank_code" => "bni",
    "amount" => "10000",
    "remark" => "testing",
    "recipient_city" => "391"
];
$private_key = "YOUR_PRIVATE_KEY";
$payload_str = json_encode($payloads);
openssl_sign($payload_str, $signature, $private_key, "sha256WithRSAEncryption");
$signature = base64_encode($signature);

// Add header in your disbursement request
$headers = [
    "Content-Type: application/x-www-form-urlencoded",
    "X-Signature: ".$signature
]
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
# Assume data is file that contain your string payload
# Example: '{"account_number":"0437051936","bank_code":"bni","amount":"10000","remark":"testing","recipient_city":"391"}'

openssl dgst -sha256 -sign private.pem -out data.signed data
openssl base64 -in data.signed -out data.signed.b64

# Generated signature in file data.signed.b64

curl https://bigflip.id/api/v2/disbursement \
    --header 'X-Signature: YOUR_GENERATED_SIGNATURE' \
    -X POST \
    -u <secret_key>: \
    -d account_number="0437051936" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="testing" \
    -d recipient_city="391"

General Response

Unauthorized

Status 401
Content-Type: application/json

{
    "name": "Unauthorized",
    "message": "You are requesting with an invalid credential.",
    "status": 401,
}

This response will be sent if the value of Authorization heder or the secret key is invalid.

Not Found

Status 404
Content-Type: application/json

{
    "name": "Not Found",
    "message": "Page not found.",
    "status": 404,
}

You will get this response if the url you’re trying to access is wrong, or if the resource you’re trying to access is not exist.

Environment

Sandbox

Flip provides a sandbox environment: (business.flip.id/sandbox/overview - base URL: https://bigflip.id/big_sandbox_api). To help your integration, we recommend you to utilize our Postman collection for the Sandbox. You can download it here.

The secret key, validation token and base URL in sandbox will be different with the production environment, so any actions performed in sandbox will not affect your Flip for Business account. Each sandbox account will be given Rp950.000.000.000 (IDR 950 billion) balance for you to test the API.

We won’t process any transaction & account inquiries you’ve made in the sandbox environment. Any transaction created will be left at PENDING status. However, you can manually trigger the transaction to simulate statuses directly from the dashboard.

Production

The production environment base URL for API v2 is https://bigflip.id/api/v2/ and base URL for API v3 https://bigflip.id/api/v3/. Every transaction made through these URLs will be processed (except if something goes wrong).

General

Get Balance

GET /general/balance HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: basic [your encoded flip for business secret key]

This endpoint will return your current account balance in Rupiah (IDR).

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/general/balance");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/general/balance \
    -u <secret_key>:

GET https://bigflip.id/api/v2/general/balance

Response

Status 200
Content-Type: application/json

{
    "balance": 49656053
}
Attribute Description
balance Current balance in Rupiah (IDR)

Get Bank Info

GET /general/banks HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: basic [your encoded flip for business secret key]

This endpoint will return list of bank codes, along with several other information. We recommend you to hit this endpoint before creating a disbursement so that you can give information like queue or status to your user or customer.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/general/banks");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/general/banks \
    -u <secret_key>:

GET https://bigflip.id/api/v2/general/banks?code=bank_code

You can also provide an optional bank code to filter the result to a specific bank only.

Response

Status 200
Content-Type: application/json

[
    {
        "bank_code": "mandiri",
        "name": "Mandiri",
        "fee": 5000,
        "queue": 8,
        "status": "DISTURBED"
    },
    {
        "bank_code": "bri",
        "name": "BRI",
        "fee": 5000,
        "queue": 39,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "bni",
        "name": "BNI",
        "fee": 5000,
        "queue": 57,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "bca",
        "name": "BCA",
        "fee": 5000,
        "queue": 8,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "bsm",
        "name": "Bank Syariah Mandiri",
        "fee": 5000,
        "queue": 2,
        "status": "HEAVILY_DISTURBED"
    },
    {
        "bank_code": "cimb",
        "name": "CIMB Niaga",
        "fee": 5000,
        "queue": 3,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "muamalat",
        "name": "Muamalat",
        "fee": 5000,
        "queue": 1,
        "status": "OPERATIONAL"
    },
    .
    .
    .
]

Filtered result:

Status 200
Content-Type: application/json

[
    {
        "bank_code": "bca",
        "name": "BCA",
        "fee": 5000,
        "queue": 8,
        "status": "OPERATIONAL"
    }
]
Attribute Description
bank_code Flip’s bank code. cimb is the code for both CIMB Niaga and CIMB Niaga Syariah
name The name of the bank as we usually say it in Indonesian
fee The fee that you’ll be charged if you send money to this bank
queue Current queue for related bank. The longer/higher the queue number, the longer the transaction will be finished.
status The status of the disbursement process in related bank. Possible values are:
  • OPERATIONAL
    Banks are operational, disbursement will be processed as soon as possible
  • DISTURBED
    Banks are slow or have another problem. Disbursement will still be processed, but in slower pace and might be delayed
  • HEAVILY_DISTURBED
    Banks are having an error, offline, or another problem that result in a nearly unusable system. Disbursement to this bank can not be processed in a short time, and maybe won’t be processed in the same day. You can ask for a refund if this happen.

Is Maintenance

GET /general/maintenance HTTP/1.1
Content-Type: application/x-www-form-urlencoded

This endpoint will return information whether Flip currently is on maintenance or not. When Flip is on maintenance, you can’t do any request except to this endpoint. Any request to other endpoint will return 401 status code.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/general/maintenance");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/general/maintenance \
    -u <secret_key>:

GET https://bigflip.id/api/v2/general/maintenance

Response

Status 200
Content-Type: application/json

{
    "maintenance": false
}
Attribute Description
maintenance Flip maintenance status

Bank Account Inquiry

POST /disbursement/bank-account-inquiry HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

You can use this endpoint to get the bank account holder name. For now, it still take us a few seconds to do the inquiry. The result will be returned as a callback if we haven’t cached it yet. If it have been cached, you will get the result instantly. Be sure to set up your callback inquiry entry in your Flip for Business Dashboard.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement/bank-account-inquiry");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, "account_number=5465327020&bank_code=bca&inquiry_key=aVncCDdKW9dciRvH9qSH");

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement/bank-account-inquiry \
    -X POST \
    -u <secret_key>: \
    -d account_number="5465327020" \
    -d bank_code="bca" \
    -d inquiry_key="aVncCDdKW9dciRvH9qSH"

POST https://bigflip.id/api/v2/disbursement/bank-account-inquiry

Attribute Description
account_number string (required)
The account number of the bank account
bank_code string (required)
Bank code of the account. Accepted value are listed above
inquiry_key string (optional)
Inquiry key for handling multiple request with multiple callback

Response

Example of cached response

Status 200
Content-Type: application/json

{
    "bank_code": "bca",
    "account_number": "5465327020",
    "account_holder": "PT Fliptech Lentera IP",
    "status": "SUCCESS",
    "inquiry_key": "aVncCDdKW9dciRvH9qSH",
}

Example of uncached response

Status 200
Content-Type: application/json

{
    "bank_code": "bca",
    "account_number": "5465327020",
    "account_holder": "",
    "status": "PENDING",
    "inquiry_key": "aVncCDdKW9dciRvH9qSH",
}

Example of invalid account

Status 200
Content-Type: application/json

{
    "bank_code": "bca",
    "account_number": "1232123123212",
    "account_holder": "",
    "status": "INVALID_ACCOUNT_NUMBER",
    "inquiry_key": "aVncCDdKW9dciRvH9qSH",

}
Attribute Description
bank_code Bank code of the account
inquiry_key Inquiry key for handling multiple request with multiple callback
account_number Account number of the bank account
account_holder Name of the bank account holder
status Possible values are
  • PENDING
    Inquiry still in process
  • SUCCESS
    Inquiry process is complete and bank account number is valid
  • INVALID_ACCOUNT_NUMBER
    Inquiry process is complete but the account number is invalid or maybe a virtual account number
  • SUSPECTED_ACCOUNT
    Bank account have been suspected on doing fraud. You still can do a disbursement to this account.
  • BLACK_LISTED
    Bank account have been confirmed on doing a fraud and therefore is blacklisted. You can’t do a disbursment to this account.
  • FAILED
    The inquiry process is failed before we get the final status of the inquiry, e.g due to timeout or any other errors from the bank. If you get this response, please retry the inquiry to trigger reverification of the account.
  • CLOSED
    The inquiry process is complete and the account is valid, but it is closed/inactive so that it cannot receive money. You cannot do a disbursement to this account.

Idempotent Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
    "account_number" => "0437051936",
    "bank_code" => "bni",
    "amount" => "10000",
    "remark" => "testing",
    "recipient_city" => "391"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded",
  "idempotency-key: 8anU9saqIU798wOo"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement \
    -X POST \
    -u <secret_key>: \
    -H "idempotency-key: 8anU9saqIU798wOo" \
    -d account_number="0437051936" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="testing" \
    -d recipient_city="391"

This version of API supports idempotency, so you can safely retrying request without accidentally performing the same operation twice. If you send a create a disbursement and the request fails due to network error or other factor, you can safely retry the request with the same idempotency key and be sure that only a single disbursement is created.

To perform an idempotent request, you can just provide an additonal idempotency-key header to your request.

You can provide any unique string to be the idempotency key, such as the transaction id on your side, or another random and unique identifier from your side. The string however, will be limited to 255 char in length.

This idempotency key will be stored forever if the related transacition success. However, if the transaction is cancelled because of wrong account number or other reasons, the idempotency key will be deleted and you can use the same key to retry the transaction. We’ll always send back the same response for request made with the same key.

If there are two or more requests with the same beneficiary account, bank, and amount within 10 minutes interval and the idempotency key is not used in those particular transactions, we will process the first one and hold the latter transaction temporarily to prevent accidental double transfer. Our team will inform you and ask for your confirmation on whether the transaction being held is eligible to be released or not.

Please read the implementation guide here.

Money Transfer

Money Transfer is one of the products within Flip for Business which was created with the aim to facilitate users complete high volume transactions in an easier, faster, and more cost-efficient manner. With Money Transfer, users can transfer money up to 20,000 accounts in one go across different beneficiaries.

As of now, Flip is providing Money Transfer service across three different beneficiary types: Bank, VA, and E-wallet which all bank codes are listed in the destination bank section. You can also get this list of bank codes along with other information in get bank info.

Below is a flow overview on how Money Transfer disbursement works via API.

Money Transfer Flow

Create Disbursement

POST /disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Use this endpoint to create a common disbursement transaction. For company operating as a Money Transfer Company (Perusahaan Transfer Dana), or anything related to that, please use Create Special Money Transfer V3 endpoint instead.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v3/disbursement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
    "account_number" => "1122333300",
    "bank_code" => "bni",
    "amount" => "10000",
    "remark" => "some remark",
    "recipient_city" => "391",
    "beneficiary_email" => "[email protected],[email protected]"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded",
  "idempotency-key: idem-key-1",
  "X-TIMESTAMP: 2022-01-01T15:02:15+0700"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v3/disbursement \
    -X POST \
    -u <secret_key>: \
    -d account_number="1122333300" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="some remark" \
    -d recipient_city="391",
    -d beneficiary_email="[email protected],[email protected]"

POST https://bigflip.id/api/v3/disbursement

Attribute Description
Content-Type string (required)
Request content type: application/x-www-form-urlencoded.
idempotency-key string (required)
Idempotency key. Please see more detail on Idempotent Request section.
X-TIMESTAMP string (optional)
Request timestamp. The format will follow the ISO8601 format.

Body

Attribute Description
account_number string (required)
The account number of the recipient
bank_code string (required)
Bank code of the recipient bank. Accepted value are listed above
amount integer (required)
The amount of money to be disbursed
remark string (optional)
Remark to be included in the transfer made to the recipient. Usually will appear as berita transfer or remark in the transfer receipt. Max length for this attribute is 18 character
Only for disbursement with the bank code being bri, the remark will be prepended with the beneficiary name. Example: tes remark will be john doe test remark
recipient_city integer (optional)
City code of the recipient city. Available value can be retrieved from city list
beneficiary_email string (optional)
List of the recipient emails (separated by comma)

Response

Status 200
Content-Type: application/json

{
  "id": 10,
  "user_id": 20,
  "amount": 10000,
  "status": "PENDING",
  "reason": "",
  "timestamp": "2017-08-28 14:32:47",
  "bank_code": "bni",
  "account_number": "1122333300",
  "recipient_name": "John Doe",
  "sender_bank": "bri",
  "remark": "some remark",
  "receipt": "",
  "time_served": "0000-00-00 00:00:00",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_TRANSFER",
  "sender": null,
  "fee": 1500,
  "beneficiary_email": "[email protected],[email protected]com",
  "idempotency_key": "idem-key-1"
}

See detailed explanation at Get All Money Transfer V3 response.

Get All Disbursements

GET /disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Use this endpoint to get the list of transaction you’ve made. By default, the result will be paginated by 20. You can change the pagination, filter, and sort the result by changing the url parameter.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v3/disbursement?pagination=pagination&page=page&sort=sort&atribut=value");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v3/disbursement?pagination=pagination&page=page&sort=sort&atribut=value \
    -u <secret_key>:

Format of the url parameter:

GET https://bigflip.id/api/v3/disbursement?pagination=pagination&page=page&sort=sort&attribute=value

param value
pagination integer (optional)
The pagination of the result. Default value is 20
page integer (optional)
The page number of the result to be viewed.
sort string (optional)
Sort the result by the attribute. Use the attribute name (e.g sort=id) to sort in ascending order or dash+attribute name (e.g sort=-id) to sort in descending order.

You can also filter the result by changing attribute with the attribute to be filtered and value with the filter value. You can filter more than one attribute by appending another attribute filter to the url. Attribute that can be filtered are:

Example:

https://bigflip.id/api/v3/disbursement?pagination=10&page=5&sort=-id

Response

Status 200
Content-Type: application/json

{
  "total_data": 85,
  "data_per_page": 20,
  "total_page": 5,
  "page": 1,
  "data": [
    {
      "id": 10,
      "user_id": 20,
      "amount": 10000,
      "status": "PENDING",
      "reason": "",
      "timestamp": "2017-08-28 14:32:47",
      "bank_code": "bni",
      "account_number": "1122333300",
      "recipient_name": "John Doe",
      "sender_bank": "bri",
      "remark": "some remark",
      "receipt": "",
      "time_served": "0000-00-00 00:00:00",
      "bundle_id": 0,
      "company_id": 7,
      "recipient_city": 391,
      "created_from": "API",
      "direction": "DOMESTIC_TRANSFER",
      "sender": null,
      "fee": 1500,
      "beneficiary_email": "[email protected],[email protected]",
      "idempotency_key": "idem-key-1"
    },
    {
      "id": 11,
      "user_id": 20,
      "amount": 10000,
      "status": "DONE",
      "reason": "",
      "timestamp": "2017-08-24 21:21:23",
      "bank_code": "bni",
      "account_number": "1122333301",
      "recipient_name": "John Smith",
      "sender_bank": "bri",
      "remark": "some remark",
      "receipt": "someurl.jpg",
      "time_served": "2017-08-25 09:11:35",
      "bundle_id": 0,
      "company_id": 7,
      "recipient_city": 391,
      "created_from": "API",
      "direction": "FOREIGN_INBOUND_SPECIAL_TRANSFER",
      "sender": {
        "sender_name": "John Doe",
        "place_of_birth": 391,
        "date_of_birth": "1992-01-01",
        "address": "Some Address Street 123",
        "sender_identity_type": "nat_id",
        "sender_identity_number": "asdas213123",
        "sender_country": 100252,
        "job": "entrepreneur"
      },
      "fee": 1000,
      "beneficiary_email": "[email protected],[email protected]",
      "idempotency_key": "idem-key-2"
    },
    ...
  ]
}
Attribute Description
total_data Total data returned in all page
data_per_page Total data returned in current page
total_page Total/max page available
page Current page
data Array of disbursement object.

Disbursement Object

Attribute Description
id Flip’s transaction id
user_id Your account user id in our system
amount The amount of money to be disbursed in IDR
status Transaction status. Possible values are:
  • PENDING
    Disbursement is still in process
  • CANCELLED
    The transaction is cancelled and the amount of the transaction plus the transaction fee will be credited to your balance. This will happen if the transfer process are failed for reason such as inactive recipient account, wrong account number, etc
  • DONE
    Disbursement process is finished and the money have been sent to the recipient
reason The reason value will be given if the transaction status is CANCELLED. Possible values are:
  • INACTIVE_ACCOUNT
    Inactive account / Nomor rekening tidak aktif
  • NOT_REGISTERED_ACCOUNT
    Not registered account / Nomor rekening tidak terdaftar
  • CANT_RECEIVE_TRANSFER
    Can’t receive transfer / Rekening tujuan tidak dapat menerima transfer
  • INTERMITTENT_DISTURBANCE_ON_BENEFICIARY_BANK
    Intermittent disturbance on destination bank / Bank tujuan sementara mengalami gangguan
  • BENEFICIARY_ACCOUNT_NOT_VERIFIED
    Account is not verified / Rekening tujuan belum terverifikasi
timestamp The time when the disbursement request created. Time will be in GMT+7 with yyyy-mm-dd hh:mm:ss format
bank_code Bank code of the recipient bank
account_number The account number of the recipient
recipient_name The name of the recipient account holder. If the account number haven’t cached by Flip yet, this attribute will show - (dash) instead
sender_bank The default sender bank in your account
remark Remark to be included in the transfer made to the recipient
receipt Url of the transfer receipt. The receipt will be a screenshot taken from the internet banking interface of each bank. This attribute will only show the url when the status is DONE
time_served The time when the transaction is finished. Will only show valid value when the status is DONE
bundle_id The bundle id of the transaction made from Flip for Business Dashboard (csv upload or manual input). For the transaction created from API, the value will always be 0
company_id Your Flip for Business account user id in our system
recipient_city City code of the recipient city
created_from The channel of which the transaction was created. Possible values are:
  • API
  • DASHBOARD
direction The direction of the transaction. Possible values are:
  • DOMESTIC_TRANSFER
    Common Disbursement from Indonesia to Indonesian recipient
  • DOMESTIC_SPECIAL_TRANSFER
    Special disbursement from the user of a Money Transfer Company residing in Indonesia to Indonesian recipient
  • FOREIGN_INBOUND_SPECIAL_TRANSFER
    Special disbursement from the user of a Money Transfer Company residing in a foreign country to Indonesian recipient
sender Possible values are null if the transaction is a common disbursement, and sender object if the transaction is a special disbursment.
fee The fee of the transaction
beneficiary_email List of the recipient emails
idempotency_key The idempotency key used to create the disbursement

Sender Object

Attribute Description
sender_name The name of the user of the Money Transfer Company that act as a sender
place_of_birth City/country code of the Sender’s place of birth
date_of_birth Sender’s date of birth
address Sender’s address
sender_identity_type Sender’s identity type. Possible value are:
  • nat_id
  • drv_lic
  • passport
  • bank_acc
sender_identity_number Sender’s identity number
sender_country Country code of the Sender’s country
job Sender’s job. Possible values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
  • indonesian_migrant_worker
  • others

Get Disbursement by Idempotency Key

GET /get-disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Use this endpoint to get one specific transaction specified by idempotency-key in the request url.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v3/get-disbursement?idempotency-key=idem-key-1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v3/get-disbursement?idempotency-key=idem-key-1 \
    -u <secret_key>:

GET https://bigflip.id/api/v3/get-disbursement?idempotency-key=idempotency_key

Response

Status 200
Content-Type: application/json

{
  "id": 10,
  "user_id": 20,
  "amount": 10000,
  "status": "PENDING",
  "reason": "",
  "timestamp": "2017-08-28 14:32:47",
  "bank_code": "bni",
  "account_number": "1122333300",
  "recipient_name": "John Doe",
  "sender_bank": "bri",
  "remark": "some remark",
  "receipt": "",
  "time_served": "0000-00-00 00:00:00",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_TRANSFER",
  "sender": null,
  "fee": 1500,
  "beneficiary_email": "[email protected],[email protected]",
  "idempotency_key": "idem-key-1"
}

See detailed explanation at Get All Money Transfer V3 response.

Get Disbursement by ID

GET /get-disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Use this endpoint to get one specific transaction specified by id in the request URL.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v3/get-disbursement?id=10");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v3/get-disbursement?id=10 \
    -u <secret_key>:

GET https://bigflip.id/api/v3/get-disbursement?id=id

Response

Status 200
Content-Type: application/json

{
  "id": 10,
  "user_id": 20,
  "amount": 10000,
  "status": "PENDING",
  "reason": "",
  "timestamp": "2017-08-28 14:32:47",
  "bank_code": "bni",
  "account_number": "1122333300",
  "recipient_name": "John Doe",
  "sender_bank": "bri",
  "remark": "some remark",
  "receipt": "",
  "time_served": "0000-00-00 00:00:00",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_TRANSFER",
  "sender": null,
  "fee": 1500,
  "beneficiary_email": "[email protected],[email protected]",
  "idempotency_key": "idem-key-1"
}

See detailed explanation at Get All Money Transfer V3 response.

Error List

As mentioned here, validation error or response with status code 422 will contain inner code. Here is the list of the code for Money Transfer:

Error Code Meaning
999 Undefined error
1001 The related attribute should not be empty
1002 Value for the related attribute is considered not clean. Things that considered as not clean is html tag and ?, #, $, ' (single quote), " (double quote), and ; character
1020 The related attribute can only contain number
1021 Transfer amount are less than the minimum amount (Rp10.000)
1022 Transfer amount are more than the maximum amount
1024 Max char for the related attribute exceeded
1025 Invalid bank account number or possibly a virtual account number
1026 The recipient bank account is suspected with fraud. You can’t send money to this account
1027 The account number is closed
1032 Pagination should be a number more than 0
1033 Invalid bank code
1034 Country is invalid. Please see available country code
1035 Your balance is insufficient for doing this transaction
1038 Country/city code is not valid. The difference with 1037 code is: 1037 will occur if the attribute only allows country code while this code will occur if the attribute allows country or city code.
1039 Date format is invalid
1040 Date is invalid
1041 Attribute is invalid
1042 Minimum transfer ovo amount is Rp10.000
1043 Bill title param is required when creating bill
1070 Max Beneficiary Email 20
1071 Invalid Beneficiary Email value
1074 Daily limit transaction exceeded
1080 You have reached the maximum limit of active transactions. Please complete your previous transactions.
1086 Minimum transfer dana amount is Rp20.000
1090 Agent KYC status is not approved
1091 Agent status is not active
1092 Agent is not allowed to update
1094 The sent request/transaction is marked as stale request (more than 1 minute than the server time)
1095 X-TIMESTAMP format is invalid. It should follow the ISO8601 format
2001 The related attribute should contain [at least or at most] [number] of characters
2002 The related attribute is duplicated
2003 The related attribute is considered not clean. Only letters (a-z), numbers (0-9), spaces ( ), periods (.), commas (,), apostrophes (‘), and dashes (-) are allowed
2004 The related attribute contains non-alphanumeric characters

Special Money Transfer

Special Money Transfer is a type of disbursement for a company with PJP (Penyedia Jasa Pembayaran) license, operating as a Money Transfer Company (Perusahaan Transfer Dana). While in Money Transfer disbursement the original sender is the company, in Special Money Transfer the original sender is the company’s user.

The main difference regarding the API flow with Money Transfer is in this disbursement type, you are required to provide some of your senders personal information as part of the Know Your Customer (KYC) process mandated by Bank Indonesia.

Below is a flow overview on how Special Money Transfer disbursement works via API.

Special Money Transfer Flow

Create Special Disbursement

POST /special-disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v3/special-disbursement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
    "account_number" => "1122333301",
    "bank_code" => "bni",
    "amount" => "10000",
    "remark" => "some remark",
    "recipient_city" => "391",
    "sender_country" => 100252,
    "sender_place_of_birth" => 391,
    "sender_date_of_birth" => "1992-01-01",
    "sender_identity_type" => "nat_id",
    "sender_name" => "John Doe",
    "sender_address" => "Some Address Street 123",
    "sender_identity_number" => "123456789",
    "sender_job" => "entrepreneur",
    "direction" => "DOMESTIC_SPECIAL_TRANSFER",
    "beneficiary_email" => "[email protected],[email protected]"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded",
  "idempotency-key: idem-key-1",
  "X-TIMESTAMP: 2022-01-01T15:02:15+0700"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v3/special-disbursement \
    -X POST \
    -u <secret_key>: \
    -d account_number="1122333301" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="some remark" \
    -d recipient_city="391" \
    -d sender_country="100252" \
    -d sender_place_of_birth="391",
    -d sender_date_of_birth="1992-01-01" \
    -d sender_identity_type="nat_id" \
    -d sender_name="John Doe" \
    -d sender_address="Some Address Street 123" \
    -d sender_identity_number="123456789" \
    -d sender_job="entrepreneur" \
    -d direction="DOMESTIC_SPECIAL_TRANSFER",
    -d beneficiary_email="[email protected],[email protected]"

POST https://bigflip.id/api/v3/special-disbursement

Attribute Description
Content-Type string (required)
Request content type: application/x-www-form-urlencoded.
idempotency-key string (required)
Idempotency key. Please see more detail on Idempotent Request section.
X-TIMESTAMP string (optional)
Request timestamp. The format will follow the ISO8601 format.

Body

Attribute Description
account_number string (required)
The account number of the recipient
bank_code string (required)
Bank code of the recipient bank. Accepted value are listed above
amount integer (required)
The amount of money to be disbursed
remark string (optional)
Remark to be included in the transfer made to the recipient. Usually will appear as berita transfer or remark in the transfer receipt. Max length for this attribute is 18 character
Only for disbursement with the bank code being bri, the remark will be prepended with the beneficiary name. Example: tes remark will be john doe test remark
recipient_city integer (optional)
City code of the recipient city. Available value can be retrieved from city list. Default value is 394.
sender_country integer (required)
Country code of the sender’s residence. Available value can be retrieved from country list
sender_place_of_birth integer (optional)
City/country code of the sender’s place of birth. Use city code if the sender’s place of birth is in Indonesia, and country code if outside Indonesia. Available value can be retrieved from city/country list
sender_date_of_birth string/date (optional)
Sender’s date of birth with YYYY-MM-DD format
sender_identity_type string (optional)
Sender’s ID type. Accepted value are:
  • nat_id
    National Id Card or KTP in Indonesia
  • drv_lic
    Driving license
  • passport
  • bank_acc
    Bank Account (DEFAULT)
sender_name string (required)
The name of the user of the Money Transfer Company that act as a sender
sender_address string (required)
Sender’s address
sender_identity_number string (optional)
Sender’s ID number. Default value is from attribute account_number
sender_job string (required) Sender’s job. Accepted values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
    People who work at foundation as an employee
  • indonesian_migrant_worker
    Also known as TKI
  • company
    If sender is a company, not individual
  • others
direction string (required) The direction of the transaction. Accepted values are:
  • DOMESTIC_SPECIAL_TRANSFER
    When the sender and the recipient are both residing in Indonesia
  • FOREIGN_INBOUND_SPECIAL_TRANSFER
    When the sender are in a foreign country, but the recipient are in Indonesia
beneficiary_email string (optional)
List of the recipient emails (separated by comma)

Response

Status 200
Content-Type: application/json

{
  "id": 11,
  "user_id": 20,
  "amount": 10000,
  "status": "DONE",
  "reason": "",
  "timestamp": "2017-08-24 21:21:23",
  "bank_code": "bni",
  "account_number": "1122333301",
  "recipient_name": "John Smith",
  "sender_bank": "bri",
  "remark": "some remark",
  "receipt": "someurl.jpg",
  "time_served": "2017-08-25 09:11:35",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "FOREIGN_INBOUND_SPECIAL_TRANSFER",
  "sender": {
    "sender_name": "John Doe",
    "place_of_birth": 391,
    "date_of_birth": "1992-01-01",
    "address": "Some Address Street 123",
    "sender_identity_type": "nat_id",
    "sender_identity_number": "123456789",
    "sender_country": 100252,
    "job": "entrepreneur"
  },
  "fee": 1000,
  "beneficiary_email": "[email protected],[email protected]",
  "idempotency_key": "idem-key-2"
}

See detailed explanation at Get All Money Transfer V3 response.

City List

GET /disbursement/city-list HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

This endpoint will return the list of available city code along with it’s name. The city name will be in Indonesian.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement/city-list");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement/city-list \
    -u <secret_key>:

GET https://bigflip.id/api/v2/disbursement/city-list

Response

Status 200
Content-Type: application/json

{
  "102": "Kab. Bekasi",
  "103": "Kab. Purwakarta",
  "106": "Kab. Karawang",
  "108": "Kab. Bogor",
  "109": "Kab. Sukabumi",
  "110": "Kab. Cianjur",
  "111": "Kab. Bandung",
  "112": "Kab. Sumedang",
  "113": "Kab. Tasikmalaya",
  "114": "Kab. Garut",
  "115": "Kab. Ciamis",
  "116": "Kab. Cirebon",
  "117": "Kab. Kuningan",
  "118": "Kab. Indramayu",
  "119": "Kab. Majalengka",
  ...
}

Return an object of all cities with format [city code]: [city name].

Country List

GET /disbursement/country-list HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

This endpoint will return the list of available country code along with it’s name. The country name will be in English.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement/country-list");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement/country-list \
    -u <secret_key>:

GET https://bigflip.id/api/v2/disbursement/country-list

Response

Status 200
Content-Type: application/json

{
  "100000": "Afghanistan",
  "100002": "Albania",
  "100003": "Algeria/Aljazair",
  "100004": "America Samoa",
  "100005": "Andorra",
  "100006": "Angola",
  "100007": "Anguilla",
  "100008": "Antarctica",
  "100009": "Antigua And Barbuda",
  "100010": "Argentina",
  "100011": "Armenia",
  ...
}

Return an object of all countries with format [country code]: [country name].

City and Country List

GET /disbursement/city-country-list HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

This is just a combination from city and country list.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement/city-country-list");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement/city-country-list \
    -u <secret_key>:

GET https://bigflip.id/api/v2/disbursement/city-country-list

Response

Status 200
Content-Type: application/json

{
  "102": "Kab. Bekasi",
  "103": "Kab. Purwakarta",
  "106": "Kab. Karawang",
  "108": "Kab. Bogor",
  "109": "Kab. Sukabumi",
  "110": "Kab. Cianjur",
  "111": "Kab. Bandung",
  "112": "Kab. Sumedang",
  "113": "Kab. Tasikmalaya",
  "114": "Kab. Garut",
  "115": "Kab. Ciamis",
  "116": "Kab. Cirebon",
  "117": "Kab. Kuningan",
  "118": "Kab. Indramayu",
  "119": "Kab. Majalengka",
  ...
}

Return an object of all cities and countries with format [city/country code]: [city/country name].

Error List

As mentioned here, validation error or response with status code 422 will contain inner code. For Special Money Transfer, you can refer to the Money Transfer Error List.

Agent Money Transfer

While there is a significant distinction between Money Transfer and Special Money Transfer, there is only one little difference between Special Money Transfer and Agent Transfer. The difference lies in the availability of the PJP (Penyedia Jasa Pembayaran) license. To put it simply, Agent Money Transfer is a disbursement type of Special Money Transfer for companies who don’t hold a PJP license but want to provide disbursement service for its users.

In this model, Flip as PTD license holder is responsible for the entire flow from the user KYC to money transfer processing. The difference between Agent Money Transfer with other disbursements is that Flip will verify the user KYC and will only process transactions from approved users. Please refer to this section to understand the flow of Agent Verification.

Below is a flow overview on how Agent Money Transfer disbursement works via API.

Agent Money Transfer Flow

Note: Flip will validate the Agent’s KYC status for every disbursement request. Only approved Agents can request to transfer money via Flip.

Create Disbursement for Agent

This is the endpoint for creating disbursement for Agent that has been verified.

POST /agent-disbursements HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/agent-disbursements");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
  "agent_id" => 1,
  "account_number" => "1122333301",
  "amount" => 10000,
  "bank_code" => "bni",
  "direction" => "DOMESTIC_SPECIAL_TRANSFER",
  "remark" => "some remark",
  "beneficiary_email" => "[email protected]"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded",
  "idempotency-key: idem-key-1",
  "X-TIMESTAMP: 2022-01-01T15:02:15+0700"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/agents \
    -X POST \
    -u <secret_key>: \
    -d "agent_id=1" \
    -d "account_number=1122333301" \
    -d "amount=10000" \
    -d "bank_code=bni" \
    -d "direction=DOMESTIC_SPECIAL_TRANSFER" \
    -d "remark=some remark" \
    -d "[email protected]"

POST https://bigflip.id/api/v2/agent-disbursements

Attribute Description
Content-Type string (required)
Request content type: application/x-www-form-urlencoded.
idempotency-key string (required)
Idempotency key. Please see more detail on Idempotent Request section.
X-TIMESTAMP string (optional)
Request timestamp. The format will follow the ISO8601 format.

Body

Attribute Description
agent_id integer (required)
Agent’s Id
account_number string (required)
The account number of the recipient
amount integer (required)
The amount of money to be disbursed
bank_code string (required)
Bank code of the recipient bank
direction string (required)
The direction of the transaction. Accepted values:
  • DOMESTIC_SPECIAL_TRANSFER
  • FOREIGN_INBOUND_SPECIAL_TRANSFER
remark string (optional)
Additional remark for the transaction
beneficiary_email string (optional)
List of the recipient emails (separated by comma)

Response

{
  "id": 1,
  "user_id": 1,
  "amount": 10000,
  "status": "DONE",
  "timestamp": "2022-01-02 13:00:00",
  "bank_code": "bni",
  "account_number": "1122333301",
  "recipient_name": "John Smith",
  "sender_bank": "bri",
  "remark": "some remark",
  "receipt": "someurl.jpg",
  "time_served": "2022-01-02 13:01:00",
  "bundle_id": 0,
  "company_id": 1,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_SPECIAL_TRANSFER",
  "sender": {
    "sender_name": "John Doe",
    "place_of_birth": null,
    "date_of_birth": "31-10-1990",
    "address": "Jalan Margonda Raya",
    "sender_identity_type": "nat_id",
    "sender_identity_number": "1234567890123456",
    "sender_country": 1,
    "job": "entrepreneur"
  },
  "fee": 1000,
  "beneficiary_email": "[email protected]",
  "idempotency_key": "idem-key-1"
}

Response for the Create Disbursement for Agent API is the same with Money Transfer V3 response. See detailed explanation on the Get All Money Transfer V3 response. The sender attribute in the response will be filled with the Agent data.

Get Agent Disbursement by ID

An endpoint for obtaining the Agent’s disbursement data by it’s ID.

GET /agent-disbursements HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/agent-disbursements/1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/agent-disbursements/1 \
    -u <secret_key>:

GET https://bigflip.id/api/v2/agent-disbursements/[transaction_id]

Response

{
  "id": 1,
  "user_id": 1,
  "amount": 10000,
  "status": "DONE",
  "timestamp": "2022-01-02 13:00:00",
  "bank_code": "bni",
  "account_number": "1122333301",
  "recipient_name": "John Smith",
  "sender_bank": "bri",
  "remark": "some remark",
  "receipt": "someurl.jpg",
  "time_served": "2022-01-02 13:01:00",
  "bundle_id": 0,
  "company_id": 1,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_SPECIAL_TRANSFER",
  "sender": {
    "sender_name": "John Doe",
    "place_of_birth": null,
    "date_of_birth": "31-10-1990",
    "address": "Jalan Margonda Raya",
    "sender_identity_type": "nat_id",
    "sender_identity_number": "1234567890123456",
    "sender_country": 1,
    "job": "entrepreneur"
  },
  "fee": 1000,
  "beneficiary_email": "[email protected]",
  "idempotency_key": "idem-key-1"
}

Response for the Get Agent Disbursement API is the same with Money Transfer V3 response. See detailed explanation on the Get All Money Transfer V3 response. The sender attribute in the response will be filled with the Agent data.

Get Agent Disbursement List

An endpoint for obtaining all Agent’s disbursement data.

GET /agent-disbursements HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/agent-disbursements?agent_id=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/agent-disbursements?agent_id=1 \
    -u <secret_key>:

GET https://bigflip.id/api/v2/agent-disbursements?agent_id=agent_id&pagination=pagination&page=page&sort=sort

Param Value
agent_id integer (optional)
The agent ID that wants to be retrieved. If not provided, will return all agent disbursement for the company instead.
pagination integer (optional)
The pagination of the result. Default value is 20
page integer (optional)
The page number of the result to be viewed.
sort string (optional)
Sort the result by the attribute. Use the attribute name (e.g sort=id) to sort in ascending order or dash+attribute name (e.g sort=-id) to sort in descending order. Possible values are:
  • id
  • amount
  • status

Response

{
  "total_data": 85,
  "data_per_page": 20,
  "total_page": 5,
  "page": 1,
  "data": [
    {
      "id": 1,
      "user_id": 1,
      "amount": 10000,
      "status": "DONE",
      "timestamp": "2022-01-02 13:00:00",
      "bank_code": "bni",
      "account_number": "1122333301",
      "recipient_name": "John Smith",
      "sender_bank": "bri",
      "remark": "some remark",
      "receipt": "someurl.jpg",
      "time_served": "2022-01-02 13:01:00",
      "bundle_id": 0,
      "company_id": 1,
      "recipient_city": 391,
      "created_from": "API",
      "direction": "DOMESTIC_SPECIAL_TRANSFER",
      "sender": {
        "sender_name": "John Doe",
        "place_of_birth": null,
        "date_of_birth": "31-10-1990",
        "address": "Jalan Margonda Raya",
        "sender_identity_type": "nat_id",
        "sender_identity_number": "1234567890123456",
        "sender_country": 1,
        "job": "entrepreneur"
      },
      "fee": 1000,
      "beneficiary_email": "[email protected]",
      "idempotency_key": "idem-key-1"
    },
    {
      "id": 2,
      "user_id": 1,
      "amount": 20000,
      "status": "DONE",
      "timestamp": "2022-01-02 13:00:00",
      "bank_code": "bni",
      "account_number": "1122333301",
      "recipient_name": "John Smith",
      "sender_bank": "bri",
      "remark": "some remark",
      "receipt": "someurl.jpg",
      "time_served": "2022-01-02 13:01:00",
      "bundle_id": 0,
      "company_id": 1,
      "recipient_city": 391,
      "created_from": "API",
      "direction": "DOMESTIC_SPECIAL_TRANSFER",
      "sender": {
        "sender_name": "John Doe",
        "place_of_birth": null,
        "date_of_birth": "31-10-1990",
        "address": "Jalan Margonda Raya",
        "sender_identity_type": "nat_id",
        "sender_identity_number": "1234567890123456",
        "sender_country": 1,
        "job": "entrepreneur"
      },
      "fee": 1000,
      "beneficiary_email": "[email protected]",
      "idempotency_key": "idem-key-2"
    },
    ...
  ]
}

Response for the Get All Agent Disbursement List API is the same with Money Transfer V3 response. See detailed explanation on the Get All Money Transfer V3 response. The sender attribute in the response will be filled with the Agent data.

Error List

As mentioned here, validation error or response with status code 422 will contain inner code. For Agent Money Transfer, you can refer to the Money Transfer Error List.

Agent Verification

Within this section you will find a set of APIs to have your Agent KYC-ed by Flip prior to creating disbursement with Agent Money Transfer disbursement type. Unlike Special Money Transfer, the KYC done by Flip for Agent Money Transfer is required as non-PJP licensed companies usually don’t conduct KYC on their end as mandated by Bank Indonesia.

Below is a flow overview on how Agent Verification takes place via API.

Agent Verification Flow

Create Agent Identity

An endpoint to create company’s user (Agent) in Flip.

POST /agents HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/agents");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
   "name" => "John Doe",
   "identity_type" => "ktp",
   "identity_number" => "1234567890123456",
   "birth_date" => "31-10-1990",
   "birth_place" => "Kota Depok",
   "country_id" => 1,
   "province_id" => 12,
   "city_id" => 184,
   "district_id" => 1234,
   "address" => "Jalan Margonda Raya",
   "gender" => "male",
   "occupation" => "entrepreneur",
   "phone_number" => "+628123456789",
   "use_identity_address" => 1,
   "email" => "[email protected]",
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/agents \
    -X POST \
    -u <secret_key>: \
    -d "name=John Doe" \
    -d "identity_type=ktp" \
    -d "identity_number=1234567890123456" \
    -d "birth_date=31-10-1990" \
    -d "birth_place=Kota Depok" \
    -d "country_id=1" \
    -d "province_id=12" \
    -d "city_id=184" \
    -d "district_id=1234" \
    -d "address=Jalan Margonda Raya" \
    -d "gender=male" \
    -d "occupation=entrepreneur" \
    -d "phone_number=+628123456789" \
    -d "use_identity_address=1" \
    -d "[email protected]"

POST https://bigflip.id/api/v2/agents

Attribute Description
name string (required)
Agent’s full name
identity_type string (required)
Type of identity. Accepted values:
  • ktp
    National Id Card or KTP in Indonesia
  • passport
identity_number string (required)
Identity number based on the type chosen. Maximum character for each identity type:
  • 16 characters for KTP
  • 20 characters for Passport
birth_date string (required)
Agent’s birth date on DD-MM-YYYY format
birth_place string (required)
Agent’s birth place
country_id integer (required)
Agent’s country code based on the identity chosen. Available values can be retrieved from the country list API.
province_id integer (required)
Agent’s province code based on the identity chosen. Available values can be retrieved from the province list API.
city_id integer (required)
Agent’s city code based on the identity chosen. Available values can be retrieved from the city list API.
district_id integer (required)
Agent’s district code based on the identity chosen. Available values can be retrieved from the district list API
address string (required)
Agent’s address based on the identity chosen
gender string (required)
Agent’s gender. Accepted values:
  • male
  • female
occupation string (required)
Agent’s job. Accepted values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
    People who work at foundation as an employee
  • indonesian_migrant_worker
    Also known as TKI
  • company
    If sender is a company, not individual
  • others
phone_number string (required)
Agent’s phone number. It must be the one that has been verified by the company.
use_identity_address integer (optional)
A flag to set if the current residential address of the Agent is the same as the identity address.
  • 0: false
  • 1: true
residence_country_id integer (optional)
Agent’s current residential address country code
residence_province_id integer (optional)
Agent’s current residential address province code
residence_city_id integer (optional)
Agent’s current residential address city code
residence_district_id integer (optional)
Agent’s current residential address district code
residence_address string (optional)
Agent’s current residential address
email string (optional)
Agent’s email

Response

Status 200
Content-Type: application/json

{
   "id": 1,
   "company_id": 1,
   "name": "John Doe",
   "identity_type": "ktp",
   "identity_number": "1234567890123456",
   "birth_place": "Kota Depok",
   "birth_date": "31-10-1990",
   "gender": "male",
   "country_id": 1,
   "country_name": "Indonesia",
   "province_id": 12,
   "province_name": "Jawa Barat",
   "city_id": 184,
   "city_name": "Kota Depok",
   "district_id": 1234,
   "district_name": "Sukmajaya",
   "address": "Jalan Margonda Raya",
   "residence_country_id": 1,
   "residence_country_name": "Indonesia",
   "residence_province_id": 12,
   "residence_province_name": "Jawa Barat",
   "residence_city_id": 128,
   "residence_city_name": "Kota Depok",
   "residence_district_id": 1234,
   "residence_district_name": "Sukmajaya",
   "residence_address": "Jalan Margonda Raya",
   "occupation": "entrepreneur",
   "phone_number": "+628123456789",
   "email": "examp[email protected]",
   "kyc_status": "BASIC_DATA"
}
Attribute Description
id Id of the created Agent
company_id Id of the company which the Agent belongs to
name Agent’s full name
identity_type Type of identity. Possible values are:
  • ktp
    National Id Card or KTP in Indonesia
  • passport
identity_number Identity number based on the type chosen
birth_place Agent’s birth place
birth_date Agent’s birth date on DD-MM-YYYY format
gender Agent’s gender. Possible values are:
  • male
  • female
country_id Agent’s country code
country_name Agent’s country name based on the country code
province_id Agent’s province code
provice_name Agent’s province name based on the province code
city_id Agent’s city ID in the identity type chosen
city_name Agent’s city name based on the city code
district_id Agent’s district ID in the identity type chosen
district_name Agent’s district name based on the district code
address Agent’s address
residence_country_id Agent’s current residential address country code
residence_country_name Agent’s current residential address country name
residence_province_id Agent’s current residential address province code
residence_provice_name Agent’s current residential address province name
residence_city_id Agent’s current residential address city code
residence_city_name Agent’s current residential address city name
residence_district_id Agent’s current residential address district code
residence_district_name Agent’s current residential address district name
residence_address Agent’s current residential address
occupation Agent’s job. Possible values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
    People who work at foundation as an employee
  • indonesian_migrant_worker
    Also known as TKI
  • company
    If sender is a company, not individual
  • others
phone_number Agent’s phone number
email Agent’s email
kyc_status Agent’s KYC status. Values can be seen on the KYC status enum.

Update Agent Identity

Use this endpoint to update data of the Agent.

PUT /agents HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

See Create Agent Identity request params for detailed explanation. All required parameters need to be sent through this API whether the value of the parameter wants to be changed or not.

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/agents/1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_PUT, TRUE);

$payloads = [
   "name" => "John Smith",
   "identity_type" => "ktp",
   "identity_number" => "1234567890123456",
   "birth_date" => "31-10-1990",
   "birth_place" => "Kota Depok",
   "country_id" => 1,
   "province_id" => 12,
   "city_id" => 184,
   "district_id" => 1234,
   "address" => "Jalan Margonda Raya",
   "gender" => "male",
   "occupation" => "entrepreneur",
   "phone_number" => "+628123456789",
   "use_identity_address" => 1,
   "email" => "[email protected]",
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/agents/1 \
    -X PUT \
    -u <secret_key>: \
    -d "name=John Smith" \
    -d "identity_type=ktp" \
    -d "identity_number=1234567890123456" \
    -d "birth_date=31-10-1990" \
    -d "birth_place=Kota Depok" \
    -d "country_id=1" \
    -d "province_id=12" \
    -d "city_id=184" \
    -d "district_id=1234" \
    -d "address=Jalan Margonda Raya" \
    -d "gender=male" \
    -d "occupation=entrepreneur" \
    -d "phone_number=+628123456789" \
    -d "use_identity_address=1" \
    -d "[email protected]"

PUT https://bigflip.id/api/v2/agents/[agent_id]

See Create Agent Identity request for detailed request parameters.

Response

{
  "id": 1,
  "company_id": 1,
  "name": "John Smith",
  "identity_type": "ktp",
  "identity_number": "1234567890123456",
  "birth_date": "31-10-1990",
  "birth_place": "Kota Depok ",
  "gender": "male",
  "country_id": 1,
  "country_name": "Indonesia",
  "province_id": 12,
  "provice_name": "Jawa Barat",
  "city_id": 184,
  "city_name": "Kota Depok",
  "district_id": 1234,
  "district_name": "Sukmajaya",
  "address": "Jalan Margonda Raya",
  "residence_country_id": 1,
  "residence_country_name": "Indonesia",
  "residence_province_id": 12,
  "residence_provice_name": "Jawa Barat",
  "residence_city_id": 128,
  "residence_city_name": "Kota Depok",
  "residence_district_id": 1234,
  "residence_district_name": "Sukmajaya",
  "residence_address": "Jalan Margonda Raya",
  "occupation": "ENTREPRENEUR",
  "phone_number": "+628123456789",
  "email": "[email protected]",
  "kyc_status": "BASIC_DATA"
}

See Create Agent Identity response for detailed explanation.

Get Agent Identity

An endpoint for obtaining the Agent identity data.

GET /agents HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/agents/1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/agents/1 \
    -u <secret_key>:

GET https://bigflip.id/api/v2/agents/[agent_id]

Response

{
  "id": 1,
  "company_id": 1,
  "name": "John Doe",
  "identity_type": "ktp",
  "identity_number": "1234567890123456",
  "phone_number": "+628123456789",
  "email": "[email protected]",
  "kyc_status": "APPROVED",
  "rejected_reason": "",
  "status": "ACTIVE",
  "created_at": "2022-01-01 13:00:00"
}
Attribute Description
id Id of the created Agent
company_id Id of the company which the Agent belongs to
name Agent’s full name
identity_type Type of identity. Possible values are:
  • ktp
    National Id Card or KTP in Indonesia
  • passport
identity_number Identity number based on the type chosen
phone_number Agent’s phone number
email Agent’s email
kyc_status Agent’s KYC status. Values can be seen on the KYC status enum.
rejected_reason Rejected reason for Agent’s KYC. Full list of rejected reasons can be seen in the Agent’s KYC Rejection Reasons list.
status Enum of agent status:
  • 0 - Deleted
  • 10 - Active
  • 20 - Blacklisted
  • 30 - Blocked
created_at Created timestamp

Upload Agent Identity Image

This is an endpoint for uploading the created Agent’s identity image. The identity image will be used by Flip for verifiying the agent data.

PUT /users/[id]/identities HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://api.flip.id/kyc/api/v1/users/1/identities");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_PUT, TRUE);

$payloads = [
   "user_type" => "1",
   "image" => (binary),
   "identity_type" => "1",
   "selfie" => "1"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: multipart/form-data",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

curl https://api.flip.id/kyc/api/v1/users/1/identities \
    -X PUT \
    -u <secret_key>: \
    -d "user_type=1" \
    -d "image=(binary)" \
    -d "identity_type=1" \
    -d "selfie=1"

PUT https://api.flip.id/kyc/api/v1/users/[agent_id]/identities

Attribute Description
user_type string (required)
The value should be: 1 (user type Agent)
image file (required)
Image file that wants to be uploaded
identity_type string (required)
Type of identity. Accepted values:
  • 1: National Id Card or KTP in Indonesia
  • 2: Passport
selfie string (optional)
Flag denotes the uploaded file is the identity image or selfie with identity image. Accepted values:
  • 0: False (default). Denotes that the uploaded file is identity image.
  • 1: True. Denotes that the uploaded file is selfie with identity image.

Response

{
  "image_url": "someurl.png"
}
Attribute Description
image_url URL of the uploaded image

Upload Supporting Documents

This is an endpoint for uploading supporting documents other than the identity image. Supporting documents could be passport, student card, employee card, driving license, etc.

POST /documents HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://api.flip.id/kyc/api/v1/documents");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
   "user_id" => "1",
   "user_type" => "1",
   "passport" => (binary)
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: multipart/form-data",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

curl https://api.flip.id/kyc/api/v1/documents \
    -X POST \
    -u <secret_key>: \
    -d "user_id=1" \
    -d "user_type=1" \
    -d "passport=(binary)"

POST https://api.flip.id/kyc/api/v1/documents

At least 1 image should be sent via this API.

Attribute Description
user_id string (required)
Agent’s ID
user_type string (required)
The value should be: 1 (user type Agent)
student_card file (optional)
Student card image file
student_card_selfie file (optional)
Selfie with the student card image file
employee_card file (optional)
Employee card image file
employee_card_selfie file (optional)
Selfie with the employee card image file
last_certificate file (optional)
Certificate image file
last_certificate_selfie file (optional)
Selfie with the certificate image file
passport file (optional)
Passport image file
passport_selfie file (optional)
Selfie with the passport image file
family_card file (optional)
Family card image file
family_card_selfie file (optional)
Selfie with the family card image file
driving_license file (optional)
Driving license image file
driving_license_selfie file (optional)
Selfie with the driving license image file

Response

[
  {
    "id": 1,
    "type": 1,
    "selfie": false,
    "path": "someurl.png",
    "created_at": "2022-01-02T15:38:49.317601182+07:00",
    "updated_at": "2022-01-02T15:38:49.317601182+07:00"
  }
]
Attribute Description
id ID of the uploaded image
type User type: 1 (Agent)
selfie Flag if the uploaded file is the selfie image
path Uploaded file path URL
created_at Timestamp of creation of the uploaded file
updated_at Timestamp of update of the uploaded file

KYC Submission

This endpoint is used when you have finish creating and uploading the required data for your Agent.

PUT /users/[id]/submit HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://api.flip.id/kyc/api/v1/users/1/submit");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_PUT, TRUE);

$payloads = [
   "user_type" => "1"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: multipart/form-data",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

curl https://api.flip.id/kyc/api/v1/users/1/submit \
    -X PUT \
    -u <secret_key>: \
    -d "user_type=1"

PUT https://api.flip.id/kyc/api/v1/users/[agent_id]/submit

Attribute Description
user_type string (required)
The value should be: 1 (user type Agent)

Response

{
  "message": "KYC submission success"
}
Attribute Description
message KYC submission status message

Repair Data

An endpoint for resubmit the Agent’s identity data.

PUT /users/[id]/repairData HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://api.flip.id/kyc/api/v1/users/1/repair");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_PUT, TRUE);

$payloads = [
  "user_type" => "1",
  "name" => "John Smith",
  "identity_type" => "1",
  "identity_number" => "1234567890123456",
  "birth_place" => "Kota Depok",
  "birth_date" => "31-10-1990",
  "gender" => "1",
  "occupation" => "entrepreneur",
  "nationality" => "WNI",
  "country_id" => "1",
  "province_id" => "12",
  "city_id" => "184",
  "district_id" => "1234",
  "address" => "Jalan Margonda Raya",
  "residence_country_id" => "1",
  "residence_province_id" => "12",
  "residence_city_id" => "184",
  "residence_district_id" => "1234",
  "residence_address" => "Jalan Margonda Raya"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: multipart/form-data",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

curl https://api.flip.id/kyc/api/v1/users/1/repair \
    -X PUT \
    -u <secret_key>: \
    -d "user_type=1" \
    -d "name=John Smith" \
    -d "identity_type=1" \
    -d "identity_number=1234567890123456" \
    -d "birth_place=Kota Depok" \
    -d "birth_date=31-10-1990" \
    -d "gender=1" \
    -d "occupation=entrepreneur" \
    -d "nationality=WNI" \
    -d "country_id=1" \
    -d "province_id=12" \
    -d "city_id=184" \
    -d "district_id=1234" \
    -d "address=Jalan Margonda Raya" \
    -d "residence_country_id=1" \
    -d "residence_province_id=12" \
    -d "residence_city_id=184" \
    -d "residence_district_id=1234" \
    -d "residence_address=Jalan Margonda Raya"

PUT https://api.flip.id/kyc/api/v1/users/[agent_id]/repair

Attribute Description
user_type string (required)
The value should be: 1 (user type Agent)
name string (optional)
Agent’s full name
identity_type string (optional)
Type of identity. Accepted values:
  • 1: National Id Card or KTP in Indonesia
  • 2: Passport
identity_number string (optional)
Identity number based on the type chosen. Maximum character for each identity type:
  • 16 characters for KTP
  • 20 characters for Passport
birth_place string (optional)
Agent’s birth place
birth_date string (optional)
Agent’s birth date on DD-MM-YYYY format
gender string (optional)
Agent’s gender. Accepted values:
  • 1 for male
  • 2 for female
occupation string (optional)
Agent’s job. Accepted values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
    People who work at foundation as an employee
  • indonesian_migrant_worker
    Also known as TKI
  • company
    If sender is a company, not individual
  • others
nationality string (optional)
Agent’s nationality. The value is free text, minimal character is 3 and maximum character is 100.
country_id string (optional)
Agent’s country code based on the identity chosen. Available values can be retrieved from the country list API.
province_id string (optional)
Agent’s province code based on the identity chosen. Available values can be retrieved from the province list API.
city_id string (optional)
Agent’s city code based on the identity chosen. Available values can be retrieved from the city list API.
district_id string (optional)
Agent’s district code based on the identity chosen. Available values can be retrieved from the district list API
address string (optional)
Agent’s address based on the identity chosen
residence_country_id integer (optional)
Agent’s current residential address country code
residence_province_id integer (optional)
Agent’s current residential address province code
residence_city_id integer (optional)
Agent’s current residential address city code
residence_district_id integer (optional)
Agent’s current residential address district code
residence_address string (optional)
Agent’s current residential address

Response

{
  "user_id": 1,
  "user_type": 1,
  "name": "John Smith",
  "birth_place": "Kota Depok ",
  "birth_date": "31-10-1990T00:00:00Z",
  "gender": 1,
  "status": 20,
  "basic_data_filled": true,
  "identity_type": 1,
  "nik": "1234567890123456",
  "passport_number": null,
  "occupation": "entrepreneur",
  "nationality": "WNI",
  "country_id": 1,
  "province_id": 12,
  "city_id": 184,
  "district_id": 1234,
  "address": "Jalan Margonda Raya",
  "residence_country_id": 1,
  "residence_province_id": 12,
  "residence_city_id": 128,
  "residence_district_id": 1234,
  "residence_address": "Jalan Margonda Raya",
  "created_at": "2022-04-20T14:37:07+07:00",
  "updated_at": "2022-04-21T13:48:05+07:00"
}
Attribute Description
user_id Id of the Agent
user_type User type Agent: 1
name Agent’s full name
birth_date Agent’s birth date
birth_place Agent’s birth place
gender Agent’s gender. Possible values are:
  • 1 for male
  • 2 for female
status For this endpoint, the returned status will always be 20. It means PENDING (See KYC status enum)
basic_data_filled Flag if the Agent’s basic data has been filled
identity_type Type of identity. Possible values:
  • 1: National Id Card or KTP in Indonesia
  • 2: Passport
nik Identity number value if the identity_type is KTP (1)
passport_number Identity number value if the identity_type is Passport (2)
occupation Agent’s job. Possible values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
    People who work at foundation as an employee
  • indonesian_migrant_worker
    Also known as TKI
  • company
    If sender is a company, not individual
  • others
nationality Agent’s nationality
country_id Agent’s country code
province_id Agent’s province code
city_id Agent’s city ID in the identity type chosen
district_id Agent’s district ID in the identity type chosen
address Agent’s address
residence_country_id Agent’s current residential address country code
residence_province_id Agent’s current residential address province code
residence_city_id Agent’s current residential address city code
residence_district_id Agent’s current residential address district code
residence_address Agent’s current residential address
created_at Agent’s identity data created at timestamp
updated_at Agent’s identity data updated at timestamp

Repair Identity Image

An endpoint for reuploading the Agent’s identity image.

PUT /users/[id]/repairPhoto HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://api.flip.id/kyc/api/v1/users/1/repairPhoto");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_PUT, TRUE);

$payloads = [
   "user_type" => "1",
   "image" => (binary)
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: multipart/form-data",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

curl https://api.flip.id/kyc/api/v1/users/1/repairPhoto \
    -X PUT \
    -u <secret_key>: \
    -d "user_type=1" \
    -d "image=(binary)"

PUT https://api.flip.id/kyc/api/v1/users/[agent_id]/repairPhoto

Attribute Description
user_type string (required)
The value should be: 1 (user type Agent)
image file (required)
Agent’s identity image file

Response

{
  "image_url": "someurl.png"
}
Attribute Description
image_url URL of the uploaded image

Repair Identity-Selfie Image

An endpoint for reuploading the Agent’s selfie with identity image.

PUT /users/[id]/repairSelfie HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://api.flip.id/kyc/api/v1/users/1/repairSelfie");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_PUT, TRUE);

$payloads = [
   "user_type" => "1",
   "image" => (binary)
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: multipart/form-data",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

curl https://api.flip.id/kyc/api/v1/users/1/repairSelfie \
    -X PUT \
    -u <secret_key>: \
    -d "user_type=1" \
    -d "image=(binary)"

PUT https://api.flip.id/kyc/api/v1/users/[agent_id]/repairSelfie

Attribute Description
user_type string (required)
The value should be: 1 (user type Agent)
image file (required)
Agent’s identity image file

Response

{
  "image_url": "someurl.png"
}
Attribute Description
image_url URL of the uploaded image

Get Country List

An endpoint for obtaining the Country List.

GET /countries HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/countries?user_type=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://api.flip.id/kyc/api/v1/countries?user_type=1 \
    -u <secret_key>:

GET https://api.flip.id/kyc/api/v1/countries?user_type=user_type

Param Value
user_type string (required)
The value should be: 1 (user type Agent)

Response

{
  "countries": [
    {
      "id": 1,
      "name": "Indonesia"
    },
    ...
  ]
}
Attribute Description
countries Array of country objects

Country Object

Attribute Description
id Country ID
name Country name

Get Province List

An endpoint for obtaining the Province List.

GET /provinces HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/provinces?user_type=1&country_id=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://api.flip.id/kyc/api/v1/provinces?user_type=1&country_id=1 \
    -u <secret_key>:

GET https://api.flip.id/kyc/api/v1/provinces?user_type=user_type&country_id=country_id

Param Value
user_type string (required)
The value should be: 1 (user type Agent)
country_id integer (optional)
Country ID for filtering the provinces

Response

{
  "provinces": [
    {
      "id": 1,
      "name": "West Java"
    },
    ...
  ]
}
Attribute Description
provinces Array of province objects

Province Object

Attribute Description
id Province ID
name Province name

Get City List

An endpoint for obtaining the City List.

GET /cities HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/cities?user_type=1&province_id=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://api.flip.id/kyc/api/v1/cities?user_type=1&province_id=1 \
    -u <secret_key>:

GET https://api.flip.id/kyc/api/v1/cities?user_type=user_type&province_id=province_id

Param Value
user_type string (required)
The value should be: 1 (user type Agent)
province_id integer (optional)
Province ID for filtering the cities

Response

{
  "cities": [
    {
      "id": 1,
      "name": "Depok"
    },
    ...
  ]
}
Attribute Description
cities Array of city objects

City Object

Attribute Description
id City ID
name City name

Get District List

An endpoint for obtaining the District List.

GET /districts HTTP/1.1
Content-Type: multipart/form-data
Authorization: Basic [your encoded flip for business secret key]
Request-ID: bigflip-[generated uuid]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/districts?user_type=1&city_id=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   "Content-Type: application/x-www-form-urlencoded",
   "Request-ID: bigflip-47EB7F57-5565-4BF0-B9DD-46C6268CEE71"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://api.flip.id/kyc/api/v1/districts?user_type=1&city_id=1 \
    -u <secret_key>:

GET https://api.flip.id/kyc/api/v1/districts?user_type=user_type&districts?city_id=city_id

Param Value
user_type string (required)
The value should be: 1 (user type Agent)
city_id integer (optional)
City ID for filtering the districts

Response

{
  "districts": [
    {
      "id": 1,
      "name": "Sukmajaya"
    },
    ...
  ]
}
Attribute Description
districts Array of district objects

District Object

Attribute Description
id District ID
name District name

Enumeration

Agent’s KYC Status

Name Description
BASIC_DATA Agent has been created successfully
UPLOAD_IDENTITY_FAILED Identity image is failed to be uploaded
UPLOAD_IDENTITY_SUCCESS Identity image is succeed to be uploaded
UPLOAD_IDENTITY_SELFIE_PROGRESS Selfie identity image has been uploaded
UPLOAD_IDENTITY_SELFIE_FAILED Selfie identity image is failed to be uploaded
UPLOAD_IDENTITY_SELFIE_SUCCESS Selfie identity image is succeed to be uploaded
PENDING Agent is waiting to be checked by Flip ops
SUSPICIOUS Agent is flagged by Flip’s admin, and needs to be checked.
NEED_TO_CHECK Agent is flagged by Flip’s admin, and needs to be checked.
HELP Need to upload supporting documents, usually after Agent is rejected
APPROVED KYC Approved
REJECTED KYC Rejected

Agent’s KYC Rejection Reasons

Code Meaning Expectation
10 The data that is filled in does not match with identity card Repair ID data
11 NIK does not match the format Upload supporting document (Kartu Keluarga/NPWP/BPJS Kesehatan)
12 NIK already registered in another account Chat with CX team
13 NIK data is bolded manually Upload supporting document (Kartu Keluarga/NPWP/BPJS Kesehatan)
14 Identity card blurry or got spotlight or cannot be read Upload ID again
15 The Identity card uploaded is not (KTP/Passport/KITAS) Upload ID again
16 Identity card is not fully captured Upload ID again
17 Part of the data on the photo ID card is missing so it can’t be read in its entirety Upload ID again OR Upload supporting documents (Kartu Keluarga/NPWP/BPJS Kesehatan)
18 If the identity card is broken up to the data section on the identity card Upload ID again
19 ID card has expired Upload ID again
20 Photo ID card is not original Upload ID again
21 The background of the user’s pass photo on the ID card is not blue/red Upload ID again OR Upload supporting documents (Kartu Keluarga/NPWP/BPJS Kesehatan)
22 Pass photo in identity card is not original but only patch photo Chat with CX team
23 Combination photos are not clearly visible or partially covered Upload selfie with ID again
24 Combination photos only contain face images Upload selfie with ID again
25 Combination photo of the user holding another identity card other than (KTP/Passport/KITAS) Upload selfie with ID again
26 Combination photos do not directly hold an identity card Upload selfie with ID again
27 Photos taken indirectly Upload selfie with ID again
28 User wearing veil Chat with CX team
29 Indicated in violation of the Terms and Conditions of the application Fraud user - Can’t do anything
30 We need confirm your KYC with some data Chat with CX team

Error List

This error list is related to the Agent’s KYC services. Agent’s KYC related services have different error response format and codes from what has been stated on the General Explanation section. These error codes and format are returned from endpoints that use https://api.flip.id/kyc/api/v1 as the base URL. See the example of error format on the right side.

Error format

{
  "errors": [
    {
      "code": [error code],
      "message": [error message]
    }
  ]
}
Error Code Meaning
1011 User/Agent ID is not found
4001 Invalid input parameter
4002 Invalid user type (for Agent, it should be 1)
4003 Invalid user ID
4004 Invalid identity type
4005 Invalid verifier action
4006 Invalid rejected reason
4007 Image file size is too large
4008 Invalid image file type
4009 Failed reading image data
4010 Invalid user status
4011 Maximum retry has been achieved
4012 Identity number has been used/registered
4013 Invalid document file type
4014 Image is not similar
4015 Cannot create user

Accept Payment

Hi, welcome to Flip for Business Accept Payment API!

Flip will help you to accept payment from your customers. We provide a redirection payment flow via payment link. Your customer can pay with Flip using various payment methods, like Bank Transfer and Virtual Account. See the end customer transaction flow in our live demo here https://business.flip.id/accept-payment-landing#demo.

All payment links, payment transactions, and/or the details can be monitored through the Flip for Business dashboard and various API endpoints.

Create Bill

An endpoint to create a payment/bill link.

POST /pwf/bill HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <secret_key>: (notes with ":" after secret key)

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/pwf/bill");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
    "title" => "Coffee Table",
    "amount" => 900000,
    "type" => "SINGLE",
    "expired_date" => "2022-12-30 15:50:00",
    "redirect_url" => "https://someurl.com",
    "is_address_required" => 0,
    "is_phone_number_required" => 0
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/pwf/bill \
    -X POST \
    -u <secret_key>: \
    -d title="Coffee Table" \
    -d amount="900000" \
    -d type="SINGLE" \
    -d expired_date="2022-12-30 15:50:00" \
    -d redirect_url="https://someurl.com" \
    -d is_address_required="0" \
    -d is_phone_number_required="0"

POST https://bigflip.id/api/v2/pwf/bill

Attribute Description
title string (required)
The title of the bill.
type string (required)
Bill type:
  • SINGLE: single use
  • MULTIPLE: multiple use
For bill created with step 3 only SINGLE is permissible.
amount integer (optional)
Payment amount, minimum Rp10.000 and maximum Rp10.000.000. Leave blank if want to set a flexible amount.
Optional for bill created with Step 1 and mandatory for bill created with Step 2/ Step 3.
expired_date string (optional)
Bill expiry date. The bill can’t be used any more beyond the expiry date. Format: YYYY-MM-DD HH:mm.
redirect_url string (optional)
Redirect URL after payment is success.
is_address_required integer (optional)
A flag if user needs to input their address when creating payment.
  • 0: false (default)
  • 1: true
is_phone_number_required integer (optional)
A flag if user needs to input their phone number when creating payment.
  • 0: false (default)
  • 1: true
step integer (required)
Which step the customers will be redirected to when opening the payment link.
  • 1: input-data (default)
  • 2: payment-method
  • 3: payment-confirmation
sender_name string (required for step 2-payment method or step 3-payment-confirmation)
Name of the Customer.
sender_email string (required for step 2-payment method or step 3-payment-confirmation)
Email of the Customer.
sender_phone_number string (applicable for step 2-payment method or step 3-payment-confirmation)
Phone number of the Customer.
sender_address string (applicable for step 2-payment method or step 3-payment-confirmation)
Address of the Customer.
sender_bank string (required for step 3-payment-confirmation)
Bank that is used for the payment.

Value will be bank_code of Flip.
sender_bank_type string (required for step 3-payment-confirmation)
  • For a virtual account the value must be set as virtual_account
  • For e-wallet the value must be set as wallet_account.
See Bank Account Constants.

Response

Status 200
Content-Type: application/json

Step 1
{
  "link_id": 1,
  "link_url": "flip.id/$companyname/#coffeetable",
  "title": "Coffee Table",
  "type": "SINGLE",
  "amount": 900000,
  "redirect_url": "https://someurl.com",
  "expired_date": "2022-12-30 15:50:00",
  "created_from": "API",
  "status": "ACTIVE",
  "step": 1,
  "is_address_required": 0,
  "is_phone_number_required": 0
}

Step 2
{
  "link_id": 1,
  "link_url": "flip.id/$companyname/#coffeetable",
  "title": "Coffee Table",
  "type": "SINGLE",
  "amount": 900000,
  "redirect_url": "https://someurl.com",
  "expired_date": "2022-12-30 15:50:00",
  "created_from": "API",
  "status": "ACTIVE",
  "is_address_required": 0,
  "is_phone_number_required": 0,
  "step": 2,
  "customer": {
      "name": "Customer a",
      "email": "[email protected]",
      "address": "Jl. Imam Bonjol No.39, Jakarta.",
      "phone": "+62888888888",
  }
}

Step 3 (VA and QRIS payment method option using internal `payment_url` for payment confirmation)
{
    "link_id": 3276,
    "link_url": "flip.id/$autobisonmaster/#testpgpayment303-5",
    "title": "Test PG Payment 303",
    "type": "SINGLE",
    "amount": 50000,
    "redirect_url": "",
    "expired_date": null,
    "created_from": "API",
    "status": "ACTIVE",
    "is_address_required": 0,
    "is_phone_number_required": 0,
    "step": 3,
    "customer": {
        "name": "Customer A",
        "email": "[email protected]",
        "address": "Jl. Imam Bonjol No.39, Jakarta.",
        "phone": "+62888888888",
    },
    "bill_payment": {
        "id": "62d8ddde3e10b",
        "amount": 50000,
        "unique_code": 0,
        "status": "PENDING",
        "sender_bank": "mandiri",
        "sender_bank_type": "virtual_account",
        "receiver_bank_account": {
            "account_number": "3453280274531212",
            "account_type": "virtual_account",
            "bank_code": "mandiri",
            "account_holder": "Customer A"
        },
        "user_address": "Jl. Imam Bonjol No.39, Jakarta.",
        "user_phone": "+62888888888",
        "created_at": 1658379743
    },
    "payment_url": "https://flip.id/pwf/transaction/consolidated?redirected_from=internal&id=62d8ddde3e10b"
}

Step 3 (for e-wallet payment method using external `payment_url` for payment instruction)
{
    "link_id": 55228,
    "link_url": "flip.id/$fliptechlenterainspirasipertiwi-1/#sfs3",
    "title": "SFS3",
    "type": "SINGLE",
    "amount": 10100,
    "redirect_url": "https://tokopedia.com",
    "expired_date": "2022-07-24 23:59",
    "created_from": "API",
    "status": "ACTIVE",
    "is_address_required": 0,
    "is_phone_number_required": 0,
    "step": 3,
    "customer": {
        "name": "Customer A",
        "email": "[email protected]",
        "address": "Jl. Imam Bonjol No.39, Jakarta.",
        "phone": "+62888888888",
    },
    "bill_payment": {
        "id": "62d8cfc3d145a",
        "amount": 10100,
        "unique_code": 0,
        "status": "PENDING",
        "sender_bank": "ovo",
        "sender_bank_type": "wallet_account",
        "receiver_bank_account": {
            "account_number": null,
            "account_type": "wallet_account",
            "bank_code": "ovo",
            "account_holder": "Customer A"
        },
        "user_address": "Jl. Imam Bonjol No.39, Jakarta.",
        "user_phone": "+62888888888",
        "created_at": 1658376132
    },
    "payment_url": "https://web.faspay.co.id/pws/100003/2830000010100000/a288b54f75a43350296adc1ada5d0482f22bcf2b?trx_id=3453281213235965&merchant_id=34532&bill_no=62d8cfc3d3cf2"
}

See Bill Object for the details.

Edit Bill

An endpoint to update the attributes of an existing payment link.

PUT /pwf/{bill_id}/bill HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <secret_key>: (notes with ":" after secret key)

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/pwf/1/bill");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
    "title" => "Coffee Table",
    "amount" => 900000,
    "type" => "SINGLE",
    "expired_date" => "2022-12-30 15:50:00",
    "redirect_url" => "https://someurl.com",
    "status" => "INACTIVE",
    "is_address_required" => 0,
    "is_phone_number_required" => 0
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/pwf/1/bill \
    -X POST \
    -u <secret_key>: \
    -d title="Coffee Table" \
    -d amount="900000" \
    -d type="SINGLE" \
    -d expired_date="2022-12-30 15:50:00" \
    -d redirect_url="https://someurl.com" \
    -d status="INACTIVE" \
    -d is_address_required="0" \
    -d is_phone_number_required="0"

PUT https://bigflip.id/api/v2/pwf/[bill_id]/bill

Attribute Description
title string (optional)
The title of the bill.
type string (optional)
Bill type:
  • SINGLE: single use
  • MULTIPLE: multiple use
for bill with step 3, type can only be “SINGLE”
amount integer (optional)
Payment amount, minimum Rp10.000 and maximum Rp10.000.000. Leave blank if want to set a flexible amount.
expired_date string (optional)
Bill expiry date. The bill can’t be used any more beyond the expiry date. Format: YYYY-MM-DD HH:mm.
redirect_url string (optional)
Redirect URL after payment is success.
status string (optional)
Bill activation status:
  • ACTIVE
  • INACTIVE
is_address_required integer (optional)
A flag if user needs to input their address when creating payment.
  • 0: false (default)
  • 1: true
is_phone_number_required integer (optional)
A flag if user needs to input their phone number when creating payment.
  • 0: false (default)
  • 1: true

Response

Status 200
Content-Type: application/json

{
  "link_id": 1,
  "link_url": "flip.id/$companyname/#coffeetable",
  "title": "Coffee Table",
  "type": "SINGLE",
  "amount": 900000,
  "redirect_url": "https://someurl.com",
  "expired_date": "2022-12-30 15:50:00",
  "created_from": "API",
  "status": "ACTIVE",
  "is_address_required": 0,
  "is_phone_number_required": 0
}

See Bill Object for the details.

Get Bill

An endpoint to get a specific payment link.

GET /pwf/{bill_id}/bill HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <secret_key>: (notes with ":" after secret key)

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/pwf/1/bill");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/pwf/1/bill \
    -u <secret_key>:

GET https://bigflip.id/api/v2/pwf/[bill_id]/bill

Response

Status 200
Content-Type: application/json

Step 1
{
  "link_id": 1,
  "link_url": "flip.id/$companyname/#coffeetable",
  "title": "Coffee Table",
  "type": "SINGLE",
  "amount": 900000,
  "redirect_url": "https://someurl.com",
  "expired_date": "2022-12-30 15:50:00",
  "created_from": "API",
  "status": "ACTIVE",
  "step": 1,
  "is_address_required": 0,
  "is_phone_number_required": 0
}

Step 2
{
  "link_id": 1,
  "link_url": "flip.id/$companyname/#coffeetable",
  "title": "Coffee Table",
  "type": "SINGLE",
  "amount": 900000,
  "redirect_url": "https://someurl.com",
  "expired_date": "2022-12-30 15:50:00",
  "created_from": "API",
  "status": "ACTIVE",
  "is_address_required": 0,
  "is_phone_number_required": 0,
  "step": 2,
  "customer": {
    "name": "Customer a",
    "email": "[email protected]",
    "address": "Jl. Imam Bonjol No.39, Jakarta.",
    "phone": "+62888888888",
  }
}

Step 3
{
  "link_id": 1,
  "link_url": "flip.id/$companyname/#coffeetable",
  "title": "Coffee Table",
  "type": "SINGLE",
  "amount": 900000,
  "redirect_url": "https://someurl.com",
  "expired_date": "2022-12-30 15:50:00",
  "created_from": "API",
  "status": "ACTIVE",
  "is_address_required": 0,
  "is_phone_number_required": 0,
  "step": 3,
  "customer": {
    "name": "Customer a",
    "email": "[email protected]",
    "address": "Jl. Imam Bonjol No.39, Jakarta.",
    "phone": "+62888888888",
  },
  "payment_method": {
    "sender_bank": "bni",
    "sender_bank_type": "virtual_account",
  }
}

See Bill Object for the details.

Get All Bills

An endpoint to get all existing payment links.

GET /pwf/bill HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <secret_key>: (notes with ":" after secret key)

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/pwf/bill");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/pwf/bill \
    -u <secret_key>:

GET https://bigflip.id/api/v2/pwf/bill

Response

Status 200
Content-Type: application/json

[
 {
   "link_id": 1,
   "link_url": "flip.id/$companyname/#coffeetable",
   "title": "Coffee Table",
   "type": "SINGLE",
   "amount": 900000,
   "redirect_url": "https://someurl.com",
   "expired_date": "2022-12-30 15:50:00",
   "created_from": "API",
   "status": "ACTIVE",
   "step": 1,
   "is_address_required": 0,
   "is_phone_number_required": 0
 },
 {
   "link_id": 1,
   "link_url": "flip.id/$companyname/#coffeetable",
   "title": "Coffee Table",
   "type": "SINGLE",
   "amount": 900000,
   "redirect_url": "https://someurl.com",
   "expired_date": "2022-12-30 15:50:00",
   "created_from": "API",
   "status": "ACTIVE",
   "is_address_required": 0,
   "is_phone_number_required": 0,
   "step": 2,
   "customer": {
      "name": "Customer a",
      "email": "[email protected]",
      "address": "Jl. Imam Bonjol No.39, Jakarta.",
      "phone": "+62888888888",
   }
 },
 {
    "link_id": 1,
    "link_url": "flip.id/$companyname/#coffeetable",
    "title": "Coffee Table",
    "type": "SINGLE",
    "amount": 900000,
    "redirect_url": "https://someurl.com",
    "expired_date": "2022-12-30 15:50:00",
    "created_from": "API",
    "status": "ACTIVE",
    "is_address_required": 0,
    "is_phone_number_required": 0,
    "step": 3,
    "customer": {
      "name": "Customer a",
      "email": "[email protected]",
      "address": "Jl. Imam Bonjol No.39, Jakarta.",
      "phone": "+62888888888",
    },
    "payment_method": {
      "sender_bank": "bni",
      "sender_bank_type": "virtual_account",
    }
 }
]


Array of Bill Objects.

Get Payment

An endpoint to get all payment transaction(s) from a specific bill link.

GET /pwf/{bill_id}/payment HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <secret_key>: (notes with ":" after secret key)

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/pwf/1/payment?start_date=2020-01-01&end_date=2020-12-12&pagination=50&page=1&sort_by=created_at&sort_type=sort_desc");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/pwf/1/payment?start_date=2020-01-01&end_date=2020-12-12&pagination=50&page=1&sort_by=created_at&sort_type=sort_desc \
    -u <secret_key>:

GET https://bigflip.id/api/v2/pwf/[bill_id]/payment?start_date=start_date&end_date=end_date&pagination=pagination&page=page&sort_by=sort_by&sort_type=sort_type

Param Value
start_date integer (optional)
Starting date of the data. Example: "2020-01-01".
end_date integer (optional)
Ending date of the data. Example: "2020-12-12". End date must be greater than start_date.
pagination integer (optional)
Pagination of the data.
page integer (optional)
The desired page of the data pagination.
sort_by string (optional)
Sort the result by the attribute. You can sort by:
  • id
  • bill_link
  • bill_title
  • sender_bank
  • amount
  • created_at
sort_type string (optional)
You can sort in
  • sort_desc (descending)
  • sort_asc (ascending)

Response

Status 200
Content-Type: application/json

{
  "link_id": 1065,
  "total_data": 2,
  "data_per_page": 2,
  "total_page": 1,
  "page": 1,
  "data": [
    {
      "id": "PGPWF3453271107384587",
      "bill_link": "flip.id/$companyname/#coffeetable",
      "bill_title": "Coffee Table",
      "sender_name": "John Smith",
      "sender_bank": "qris",
      "amount": 900000,
      "status": "SUCCESSFUL",
      "settlement_status": "Pending",
      "created_at": "2022-07-01 14:57:44"
    },
    {
      "id": "PGPWF3453271669674219",
      "bill_link": "flip.id/$companyname/#coffeetable",
      "bill_title": "Coffee Table",
      "sender_name": "Jon Doe",
      "sender_bank": "ovo",
      "amount": 900000,
      "status": "SUCCESSFUL",
      "settlement_status": "Pending",
      "created_at": "2022-07-02 14:57:44"
    }
  ]
}

Payment Object

Attribute Description
id Payment ID.
bill_link Bill link URL of the payment.
bill_title Title of the bill.
sender_name Name of the user who did the payment.
sender_bank Bank code of the user’s bank.
amount Payment amount done by the user.
status Payment status.
  • FAILED
  • SUCCESSFUL
  • PENDING
settlement_status Merchant settlement status.
  • Cancelled
  • Settled
  • Pending
created_at The time when the payment is created. Time will be in GMT+7 with yyyy-mm-dd hh:mm:ss format

Get All Payment

An endpoint to get all existing payment transactions.

GET /pwf/payment HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <secret_key>: (notes with ":" after secret key)

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/pwf/payment?start_date=2020-01-01&end_date=2020-12-12&pagination=50&page=1&sort_by=created_at&sort_type=sort_desc");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/pwf/payment?start_date=2020-01-01&end_date=2020-12-12&pagination=50&page=1&sort_by=created_at&sort_type=sort_desc \
    -u <secret_key>:

GET https://bigflip.id/api/v2/pwf/payment?start_date=start_date&end_date=end_date&pagination=pagination&page=page&sort_by=sort_by&sort_type=sort_type

Param Value
start_date integer (optional)
Starting date of the data. Example: "2020-01-01".
end_date integer (optional)
Ending date of the data. Example: "2020-12-12". End date must be greater than start_date.
pagination integer (optional)
Pagination of the data.
page integer (optional)
The desired page of the data pagination.
sort_by string (optional)
Sort the result by the attribute. You can sort by:
  • id
  • bill_link
  • bill_title
  • sender_bank
  • amount
  • created_at
sort_type string (optional)
You can sort in
  • sort_desc (descending)
  • sort_asc (ascending)

Response

Status 200
Content-Type: application/json

{
  "total_data": 3,
  "data_per_page": 3,
  "total_page": 1,
  "page": 1,
  "data": [
    {
      "id": "FT12345678",
      "bill_link": "flip.id/$companyname/#coffeetable",
      "bill_title": "Coffee Table",
      "sender_name": "John Smith",
      "sender_bank": "mandiri",
      "amount": 900000,
      "status": "SUCCESSFUL",
      "settlement_status": "Pending",
      "created_at": "2021-02-01 14:57:44"
    },
    {
      "id": "FT12345679",
      "bill_link": "flip.id/$companyname/#coffeetable",
      "bill_title": "Coffee Table",
      "sender_name": "Jon Doe",
      "sender_bank": "bca",
      "amount": 900000,
      "status": "SUCCESSFUL",
      "settlement_status": "Pending",
      "created_at": "2021-02-02 14:57:44"
    },
    {
      "id": "PGPWF3453281233886287",
      "bill_link": "flip.id/$companyname/#coffeechair",
      "bill_title": "Coffee Chair",
      "sender_name": "Jon Doe",
      "sender_bank": "ovo",
      "amount": 100000,
      "status": "SUCCESSFUL",
      "settlement_status": "Pending",
      "created_at": "2021-02-03 14:57:44"
    }
  ]
}

Attribute Description
total_data Total data returned in all page
data_per_page Total data returned in current page
total_page Total/max page available
page Current page
data Array of payment objects.

Confirm Bill Payment

An endpoint to confirm a specific payment transaction, except e-wallet payment method (for e-wallet transaction won’t be necessary for confirming it). This API only works for Live Environment

PUT /pwf/bill-payment/{transaction_id}/confirm HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <secret_key>: (notes with ":" after secret key)

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/pwf/bill-payment/PWF12/confirm");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_PUT, TRUE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/pwf/bill-payment/PWF12/confirm \
    -u <secret_key>:

PUT https://bigflip.id/api/v2/pwf/bill-payment/[transaction_id]/confirm

Response

Status 200
Content-Type: application/json

{
  "confirmed_at": "2022-12-30 15:50",
  "payment_url": "https://flip.id/transaksi/bill/PWF12/proses?email=customer%40gmail.com"
}

Constant

Bill Object

Bill detail data

Attribute Description
link_id Bill link ID.
link_url Bill link URL for the user.
title Title of the bill.
type Bill type:
  • SINGLE: single use
  • MULTIPLE: multiple use
amount Payment amount.
redirect_url Redirect URL after payment is success.
expired_date Bill expiry date. The bill can’t be used any more beyond the expiry date.
created_from Bill created from method.
status Bill activation status:
  • ACTIVE
  • INACTIVE
is_address_required A flag if user needs to input their address when creating payment.
  • 0: false
  • 1: true
is_phone_number_required A flag if user needs to input their phone number when creating payment.
  • 0: false
  • 1: true
step Which step the customers will be redirected to when opening the payment link.
  • 1: input-data (default)
  • 2: payment-method
  • 3: payment-confirmation
customer (Returned only if customer’s merchant chooses step 2 or 3)
Customer Data that is being saved.
See Customer Object.
bill_payment (Returned only if customer’s merchant chooses step 3)
Bill Payment data that has been created.
See Bill Payment Object.
payment_url (Returned only if customer’s merchant chooses step 3)
URL of the confirmation link or instruction to do the payment action.
  • URL confirmation link is for payment using bank transfer, VA payment method, and QRIS with internal url
  • URL instruction link is for payment using e-wallet payment method with external url

Customer Object

Customer detail data

Attribute Description
name Name of the Customer.
email Email of the Customer.
phone Phone number of the Customer.
address Address of the Customer.

Bill Payment Object

Payment detail data

Attribute Description
id ID of the transaction.
amount Amount of the transaction. Please note that in case of Bank Transfer payment option, the actual amount to be transferred by your customer must be equal to the amount + unique_code returned in the response.
unique_code Unique code of the transaction
status Status of the transaction
  • NOT_CONFIRMED: If the transaction was just created.
  • PENDING: If the transaction has been confirmed by the user
  • PROCESSED: If the transaction is being processed by the system.
  • CANCELED: If the transaction is canceled.
  • FAILED: If the transaction is failed.
  • DONE: If the transaction is successfully done.
sender_bank Bank that is used for the payment.
See Bank Code Constants.
sender_bank_type Type of the sender bank that is used for the payment.
  • bank_account: if the type of the sender bank uses bank transfer.
  • virtual_account: if the type of the sender bank uses a virtual account.
  • wallet_account: if the type of the sender bank uses e-wallet.
receiver_bank_account Account of the receiver of the payment.
See Bank Account Object.
user_address Address of the User.
user_phone Phone number of the User.
created_at Unix timestamps of the transaction when it is created.

Bank Account Object

Bank account detail data

Attribute Description
account_number Account number of the receiver bank.
account_type Type of the account, the value could be:
  1. virtual_account
  2. bank_account
  3. wallet_account
bank_code Bank code of the account.
See Bank Code Constants.
account_holder Name of the holder of the account.

Bank Code

List of sender_bank available to use. Virtual account currently only available for Mandiri, Danamon, CIMB, Maybank, Sinarmas, BNI, BRI and Permata.

Bank Code Bank Name
bni BNI
bri BRI
bca BCA
mandiri Mandiri
cimb CIMB Niaga
tabungan_pensiunan_nasional BTPN/Jenius/BTPN Wow!
dbs DBS Indonesia
permata Permata
muamalat Muamalat
danamon Danamon
bsm BSI (Bank Syariah Indonesia)
ovo OVO
qris QRIS
shopeepay_app ShopeePay
linkaja LinkAja
linkaja_app LinkAja App
dana Dana

Error List

As mentioned here, validation error or response with status code 422 will contain inner code. Here is the list of the code for Accept Payment:

Error code Meaning
999 Undefined error
1044 Bill type param is required when creating bill
1045 Bill type param is invalid when creating bill
1046 Maximum amount for the bill is Rp10.000.000
1047 Bill expired date param is invalid when creating bill
1048 Bill link has already expired
1049 Bill link has already used
1050 Bill link ID is not Found
1051 Param product_code is required
1052 Param page should be a number and more than 0
1053 Param pagination should be a number and more than 0
1054 Product bill link ID is not found
1055 Param start_date is invalid
1056 Param end_date is invalid
1057 Invalid date range. Param end_date must be greater than start_date
1058 Minimum transfer amount is Rp10.000
1059 Param redirect_url is invalid
1060 Param status is invalid
1061 Param title is invalid
1062 Param sort_by is invalid
1063 Param sort_type is invalid
1064 Param amount must be a number
1067 Param amount is exceeding company’s PWF maximum limit amount

International Transfer

Hi, welcome to Flip for Business International Transfer API!

This International Transfer API solution is intended for businesses, especially money transfer operators, who want to facilitate international transfer for their users in a cost-efficient, secured, and faster manner.

In this version of APIs, we provide a service to send money abroad from individuals in Indonesia to both personal accounts (C2C) and business accounts (C2B). We currently have several corridors and it will continue to grow.

Flow Overview

  1. Select the destination country and input amount to see the exchange rate, transfer fee, and other details. You can hit API Get Exchange Rate to get these details.
  2. Hit API Get Form Data to get the form with all the required fields to be filled.
  3. After completing the beneficiary/recipient’s details in the form data, hit API Create International Transfer to create and automatically confirm the transaction. Flip will respond with “PENDING” status and then process the transaction.
  4. After the transaction is completed, Flip will send the International Transfer Transaction Callback to notify you about the transaction status. If the transaction is successful, money is received by the beneficiary. If the transaction is failed, money will be refunded to the company’s deposit.
  5. You can also hit API Get International Transfer Transaction to get the transaction status and details.

All international transfer transactions and/or the details can be monitored through the Flip for Business dashboard https://business.flip.id and various API endpoints.

Get Exchange Rates

An endpoint to get the exchange rate and other details of the destination country corridors such as minimum and maximum transfer amount, cut-off time, estimated arrival time, and the transfer fee.

GET /international-disbursement/exchange-rates HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/international-disbursement/exchange-rates?transaction_type=C2C");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/international-disbursement/exchange-rates?transaction_type=C2C \
    -u <secret_key>:

GET https://bigflip.id/api/v2/international-disbursement/exchange-rates?country_iso_code=country_iso_code&transaction_type=transaction_type

Param Value
country_iso_code string (optional)
Country code using ISO 3166 (Alpha-3). You can choose multiple countries separate by comma. See supported Country ISO Codes.
transaction_type string (required)
Transaction type information. Possible values are:
  • C2C
  • C2B

Response

Status 200
Content-Type: application/json

[
  {
    "currency_code": "GBP",
    "country_code": "GBR",
    "country_name": "United Kingdom",
    "country_iso_code": "GBR",
    "flip_exchange_rate": 19000.55,
    "flip_transfer_fee": 80000,
    "minimum_amount": 1.50,
    "maximum_amount": 3000.50,
    "payment_speed": "Same Day",
    "arrival_message": null,
    "notes": null,
    "transaction_type": "C2C",
    "flip_cutoff_time": "2021-12-06 01:00:00+700",
    "flip_arrival_time": "2021-12-07 12:00:00+700"
  },
  {
    "currency_code": "AUD",
    "country_code": "AUS",
    "country_name": "Australia",
    "country_iso_code": "AUS",
    "flip_exchange_rate": 10588.78,
    "flip_transfer_fee": 80000,
    "minimum_amount": 1,
    "maximum_amount": 200000,
    "payment_speed": "+1 day",
    "arrival_message": {
      "id": "Jika dana sudah kami terima sebelum hari Senin pukul 08:00 WIB, dana akan sampai di penerima hari Selasa, 07 Desember 2021",
      "en": "If Flip receive your fund before Monday at 08:00 GMT+7, the fund will be arrived to the beneficiary on Tuesday, 07 December 2021"
    },
    "notes": null,
    "transaction_type": "C2C",
    "flip_cutoff_time": "2021-12-06 01:00:00+700",
    "flip_arrival_time": "2021-12-07 12:00:00+700"
  },
  ...
]

Array of Exchange Rate Object

Attribute Description
currency_code Currency code of the country
country_code Country code using ISO 3166 (Alpha-2)
country_name Name of the country
country_iso_code Country code using ISO 3166 (Alpha-3)
flip_exchange_rate The country exchange rates to IDR
flip_transfer_fee Transfer fee to the country
minimum_amount Minimum transfer amount
maximum_amount Maximum transfer amount
payment_speed Expected payment completion speed:
  • Real Time
  • Same Day
  • +1 day or “+N day”
arrival_message Message related to payment speed, available in Bahasa (ID) and English (EN)
notes Additional notes
transaction_type Transaction type information
flip_cutoff_time Transfer cutoff time. Time will be in GMT+7 with yyyy-mm-dd hh:mm:ss format
flip_arrival_time Estimation of arrival time. Time will be in GMT+7 with yyyy-mm-dd hh:mm:ss format

Get Form Data

An endpoint to get form with all required fields to be completed to create the transactions, such as remittance purpose, source of fund, relationship with beneficiary, and the beneficiary’s bank account details.

GET /international-disbursement/form-data HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/international-disbursement/form-data?country_iso_code=GBR&transaction_type=C2C");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/international-disbursement/form-data?country_iso_code=GBR&transaction_type=C2C \
    -u <secret_key>:

GET https://bigflip.id/api/v2/international-disbursement/form-data?country_iso_code=country_iso_code&transaction_type=transaction_type

Param Value
country_iso_code string (required)
Country code using ISO 3166 (Alpha-3). You can choose multiple countries separate by comma. See supported Country ISO Codes.
transaction_type string (required)
Transaction type information. Possible values are:
  • C2C
  • C2B

Response

Status 200
Content-Type: application/json

{
  "country_iso_code": "GBR",
  "currency_code": "GBP",
  "beneficiary_relationships": {
    "SELF": "Diri sendiri",
    "BROTHER": "Saudara laki-laki",
    "SISTER": "Saudara perempuan",
    "SON": "Anak laki-laki",
    "DAUGHTER": "Anak perempuan",
    "NEPHEW": "Keponakan laki-laki",
    "NIECE": "Keponakan perempuan",
    "FATHER": "Ayah",
    "MOTHER": "Ibu",
    "UNCLE": "Paman",
    "AUNT": "Bibi",
    "COUSIN": "Sepupu",
    "FATHER_IN_LAW": "Bapak mertua",
    "MOTHER_IN_LAW": "Ibu mertua",
    "BROTHER_IN_LAW": "Ipar laki-laki",
    "SISTER_IN_LAW": "Ipar perempuan",
    "GRAND_FATHER": "Kakek",
    "GRAND_MOTHER": "Nenek",
    "HUSBAND": "Suami",
    "WIFE": "Istri",
    "FRIEND": "Teman"
  },
  "source_of_funds": {
    "BUSINESS": "Bisnis",
    "SALARY": "Gaji",
    "SAVINGS": "Tabungan",
    "GIFT": "Hadiah"
  },
  "remittance_purposes": {
    "FAMILY_SUPPORT": "Bantuan keluarga",
    "SALARY_PAYMENT": "Pembayaran gaji"
  },
  "banks": {
    "101": "Standard Chartered Bank",
    "102": "Bank Something",
    ...
  },
  "special_identifiers": [
    "sort_code"
  ],
  "regions": [],
  "nationality_countries": [
    {
      "iso_code": "AFG",
      "name": "Afghanistan",
      "country_code": "AF"
    },
    ...
  ]
}
Attribute Description
country_iso_code Country code using ISO 3166 (Alpha-3)
currency_code Currency code of the country
beneficiary_relationships Object of relationship of beneficiary
source_of_funds Object of source of funds
remittance_purposes Object of purpose of remittance
banks Object of bank in specific country
special_identifiers Required identifier for specific country
regions Array of region object
nationality_countries Array of country object

Create International Transfer

An endpoint to create the international transfer transaction.

POST /international-disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/international-disbursement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
  "amount" => "52.63",
  "source_country" => "IDN",
  "destination_country" => "GBR",
  "transaction_type" => "C2C",
  "beneficiary_full_name" => "John Smith",
  "beneficiary_account_number" => "1122333300",
  "beneficiary_bank_id" => "1807",
  "beneficiary_bank_name" => "Allica Bank",
  "beneficiary_email" => "[email protected]",
  "beneficiary_msisdn" => "09584008222",
  "beneficiary_nationality" => "IDN",
  "beneficiary_province" => "United Kingdom",
  "beneficiary_city" => "Manchester",
  "beneficiary_address" => "Mosley St Manchester",
  "beneficiary_postal_code" => "M2",
  "beneficiary_relationship" => "SON",
  "beneficiary_source_of_funds" => "BUSINESS",
  "beneficiary_remittance_purposes" => "EDUCATION",
  "beneficiary_sort_code" => "506967",
  "sender_name" => "John Doe",
  "sender_country" => 100252,
  "sender_place_of_birth" => 100230,
  "sender_date_of_birth" => "1963-12-01",
  "sender_address" => "Some Address Street 123",
  "sender_identity_type" => "nat_id",
  "sender_identity_number" => "1234789012347890",
  "sender_job" => "entrepreneur",
  "sender_email" => "[email protected]",
  "sender_city" => "Sender City",
  "sender_phone_number" => "+628123456789",
  "beneficiary_region" => "10274"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded",
  "X-TIMESTAMP: 2022-01-01T15:02:15+0700"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/international-disbursement \
    -X POST \
    -u <secret_key>: \
    -d "amount=52.63" \
    -d "source_country=IDN" \
    -d "destination_country=GBR" \
    -d "transaction_type=C2C" \
    -d "beneficiary_full_name=John Smith" \
    -d "beneficiary_account_number=1122333300" \
    -d "beneficiary_bank_id=1807" \
    -d "beneficiary_bank_name=Allica Bank" \
    -d "[email protected]" \
    -d "beneficiary_msisdn=09584008222" \
    -d "beneficiary_nationality=IDN" \
    -d "beneficiary_province=United Kingdom" \
    -d "beneficiary_city=Manchester" \
    -d "beneficiary_address=Mosley St Manchester" \
    -d "beneficiary_postal_code=M2" \
    -d "beneficiary_relationship=SON" \
    -d "beneficiary_source_of_funds=BUSINESS" \
    -d "beneficiary_remittance_purposes=EDUCATION" \
    -d "beneficiary_sort_code=506967" \
    -d "sender_name=John Doe" \
    -d "sender_country=100252" \
    -d "sender_place_of_birth=100230" \
    -d "sender_date_of_birth=1963-12-01" \
    -d "sender_address=Some Address Street 123" \
    -d "sender_identity_type=nat_id" \
    -d "sender_identity_number=1234789012347890" \
    -d "sender_job=entrepreneur" \
    -d "[email protected]" \
    -d "sender_city=Sender City" \
    -d "sender_phone_number=+628123456789" \
    -d "beneficiary_region=10274"

POST https://bigflip.id/api/v2/international-disbursement

Attribute Description
Content-Type string (required)
Request content type: application/x-www-form-urlencoded.
X-TIMESTAMP string (optional)
Request timestamp. The format will follow the ISO8601 format.

Body

Attribute Description
amount string (required)
Amount of money that wants to be disbursed to the beneficiary (in beneficiary currency). Maximum 2 decimal places, for Japan there can be no decimal. Must be within the minimum and maximum amount based on transaction currency.
source_country string (required)
Source country code using ISO 3166 (Alpha-3). Currently possible value is IDN.
destination_country string (required)
Destination country code using ISO 3166 (Alpha-3). See supported Destination Countries.
transaction_type string (required)
Transaction type information. Possible values are:
  • C2C
  • C2B
beneficiary_full_name string (required)
Full name of the beneficiary
beneficiary_account_number string (required)
Account number of the beneficiary bank
beneficiary_bank_id string (required)
ID of beneficiary bank
beneficiary_bank_name string (optional)
Name of beneficiary bank. Can be used for destination countries AUS and GBR
beneficiary_email string (optional)
Email of beneficiary
beneficiary_msisdn string (required, if the destination country need it)
A number used to identify a phone number internationally
beneficiary_nationality string (required)
Country code using ISO 3166 (Alpha-3) of beneficiary nationality
beneficiary_province string (required)
Province or state of the beneficiary
beneficiary_city string (required)
City of the beneficiary
beneficiary_address string (required)
Address of the beneficiary
beneficiary_postal_code string (optional)
Postal code of the beneficiary
beneficiary_relationship string (required)
Relationship of beneficiary
beneficiary_source_of_funds string (required)
Source of funds
beneficiary_remittance_purposes string (required)
Purpose of remittance
beneficiary_iban string (required, if the destination country need it)
Identifier of individual account involved in the international transaction
beneficiary_swift_bic_code string (required, if the destination country need it)
Identifier of specific bank during an international transaction
beneficiary_sort_code string (required, if the destination country need it)
Digits of code which is used by British and Irish banks
beneficiary_ifs_code string (required, if the destination country need it)
Indian financial system code
beneficiary_bsb_number string (required, if the destination country need it)
Identifier of banks and branches across Australia
beneficiary_branch_number string (required, if the destination country need it)
Identifier of banks and branches across Japan
beneficiary_document_reference_number string (required, if the destination country need it)
Reference number of document related to the transaction
beneficiary_registration_number string (required, if the destination country need it)
Registration number
beneficiary_region string (required, if the destination country need it)
Required for destination country China code.
sender_name string (required)
The name of the user of the Money Transfer Company that act as a sender
sender_country integer (required)
Country code of the sender’s residence. Available value can be retrieved from country list.
sender_place_of_birth integer (required)
City/country code of the sender’s place of birth. Use city code if the sender’s place of birth is in Indonesia, and country code if outside Indonesia. Available value can be retrieved from city/country list.
sender_date_of_birth string (required)
Sender’s date of birth with YYYY-MM-DD format
sender_address string (required)
Sender’s address
sender_identity_type string (required)
Sender’s ID type. Accepted value are:
  • nat_id (National Id Card or KTP in Indonesia)
  • passport (Passport)
sender_identity_number string (required)
Sender’s ID number
sender_job string (required)
Sender’s job. Accepted values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board (People who work at foundation as an employee)
  • indonesian_migrant_worker (Also known as TKI)
  • company (If sender is a company, not individual)
  • others
sender_email string (required)
Sender’s email. Only accept one email.
sender_city string (required)
Sender’s city.
sender_phone_number string (required)
Sender’s phone number. Start with country phone code.

Response

Status 200
Content-Type: application/json

{
  "id": 10,
  "user_id": 12345,
  "company_id": 123456,
  "exchange_rate": 19000.55,
  "fee": 88888,
  "amount": 1000000,
  "source_country": "IDN",
  "destination_country": "GBR",
  "beneficiary_amount": 52.63,
  "beneficiary_currency_code": "GBP",
  "status": "PENDING",
  "timestamp": "2021-12-02 15:27:24",
  "time_served": "(not set)",
  "created_from": "API",
  "receipt": "someurl.png",
  "transaction_type": "C2C",
  "idempotency_key": "idem-1",
  "beneficiary": {
    "full_name": "John Smith",
    "bank_account_number": "1122333300",
    "bank": "Allica Bank",
    "email": "[email protected]",
    "msisdn": "09584008222",
    "nationality": "IDN",
    "country": "GBR",
    "province": "United Kingdom",
    "city": "Manchester",
    "address": "Mosley St Manchester",
    "postal_code": "M2",
    "relationship": "SON",
    "source_of_funds": "BUSINESS",
    "remittance_purpose": "EDUCATION",
    "iban": null,
    "swift_bic_code": null,
    "sort_code": "506967",
    "ifs_code": null,
    "bsb_number": null,
    "branch_number": null,
    "document_reference_number": null,
    "registration_number": null
  },
  "sender": {
    "name": "John Doe",
    "place_of_birth": 100230,
    "date_of_birth": "1963-12-01",
    "address": "Some Address Street 123",
    "identity_type": "nat_id",
    "identity_number": "1234789012347890",
    "country": 100252,
    "job": "entrepreneur",
    "email": "[email protected]",
    "city": "Sender City",
    "phone_number": "+628123456789"
  },
  "reason": ""
}

See International Transfer Object for the details.

Get International Transfer

An endpoint to get a specific international transfer transaction.

GET /international-disbursement/{transaction id} HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/international-disbursement/10");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/international-disbursement/10 \
    -u <secret_key>:

GET https://bigflip.id/api/v2/international-disbursement/[transaction id]

Response

Status 200
Content-Type: application/json

{
  "id": 10,
  "user_id": 12345,
  "company_id": 123456,
  "exchange_rate": 19000.55,
  "fee": 88888,
  "amount": 1000000,
  "source_country": "IDN",
  "destination_country": "GBR",
  "beneficiary_amount": 52.63,
  "beneficiary_currency_code": "GBP",
  "status": "PENDING",
  "timestamp": "2021-12-02 15:27:24",
  "time_served": "(not set)",
  "created_from": "API",
  "receipt": "someurl.png",
  "transaction_type": "C2C",
  "idempotency_key": "idem-1",
  "beneficiary": {
    "full_name": "John Smith",
    "bank_account_number": "1122333300",
    "bank": "Allica Bank",
    "email": "[email protected]",
    "msisdn": "09584008222",
    "nationality": "IDN",
    "country": "GBR",
    "province": "United Kingdom",
    "city": "Manchester",
    "address": "Mosley St Manchester",
    "postal_code": "M2",
    "relationship": "SON",
    "source_of_funds": "BUSINESS",
    "remittance_purpose": "EDUCATION",
    "iban": null,
    "swift_bic_code": null,
    "sort_code": "506967",
    "ifs_code": null,
    "bsb_number": null,
    "branch_number": null,
    "document_reference_number": null,
    "registration_number": null
  },
  "sender": {
    "name": "John Doe",
    "place_of_birth": 100230,
    "date_of_birth": "1963-12-01",
    "address": "Some Address Street 123",
    "identity_type": "nat_id",
    "identity_number": "1234789012347890",
    "country": 100252,
    "job": "entrepreneur",
    "email": "[email protected]",
    "city": "Sender City",
    "phone_number": "+628123456789"
  },
  "reason": ""
}

International Transfer Object

Attribute Description
id Id of international transfer
user_id Id creator of transaction
company_id Id of company
exchange_rate The country exchange rates to IDR
fee Transfer fee to the country
amount Transfer amount in IDR
source_country Source country code using ISO 3166 (Alpha-3)
destination_country Destination country code using ISO 3166 (Alpha-3)
beneficiary_amount Amount to be received by beneficiary
beneficiary_currency_code Currency code of the beneficiary
status Transaction status. Possible values are:
  • PENDING
  • CANCELLED
  • DONE
timestamp The time when the disbursement request was created. Time will be in GMT+7 with yyyy-mm-dd hh:mm:ss format
time_served The time when the disbursement is finished
created_from The channel of which the transaction was created. Possible values are:
  • API
  • Dashboard
receipt URL of the transfer receipt
transaction_type Transaction type information. Possible values are:
  • C2C
  • C2B
idempotency_key Idempotency key information
beneficiary Beneficiary object
sender Sender object
reason The reason value will be given if the transaction status is CANCELLED. Possible values can be seen in Cancelled Transaction Reasons table.

International Transfer Beneficiary Object

Attribute Description
full_name Full name of the beneficiary
bank_account_number Account number of the beneficiary bank
bank Bank name of beneficiary bank
email Email of beneficiary
msisdn A number used to identify a phone number internationally
nationality Country code using ISO 3166 (Alpha-3) of beneficiary nationality
country Country code using ISO 3166 (Alpha-3) of the beneficiary’s country
province Province or state of the beneficiary
city City of the beneficiary
address Address of the beneficiary
postal_code Postal code of the beneficiary
relationship Relationship of sender and beneficiary
source_of_funds Source of funds
remittance_purpose Purpose of remittance
iban Identifier of individual account involved in the international transaction
swift_bic_code Identifier of specific bank during an international transaction
sort_code Digits of code which is used by British and Irish banks
ifs_code Indian financial system code
bsb_number Identifier of banks and branches across Australia
branch_number Identifier of bank for Japan
document_reference_number Reference number of document related to the transaction
registration_number Registration number

International Transfer Sender Object

Attribute Description
name The name of the user of the Money Transfer Company that act as a sender
place_of_birth City/country code of the Sender’s place of birth
date_of_birth Sender’s date of birth
address Sender’s address
identity_type Sender’s identity type. Possible values are:
  • nat_id
  • passport
identity_number Sender’s identity number
country Country code of the Sender’s country
job Sender’s job. Possible values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
  • indonesian_migrant_worker
  • others
email Sender’s email
city Sender’s city
phone_number Sender’s phone number

Get All International Transfer

An endpoint to get all existing international transfer transactions.

GET /international-disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/international-disbursement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/international-disbursement \
    -u <secret_key>:

GET https://bigflip.id/api/v2/international-disbursement?pagination=pagination&page=page&sort=sort

Param Value
pagination integer (optional)
The pagination of the result. Default value is 20.
page integer (optional)
The page number of the result to be viewed. Default value is 1.
sort_by string (optional)
Sort the result by the attribute. Use the attribute name (e.g sort=id) to sort in ascending order or dash+attribute name (e.g sort=-id) to sort in descending order. Possible values are:
  • id (default)
  • amount
  • source_country
  • destination_country
  • status

Response

Status 200
Content-Type: application/json

{
  "total_data": 5,
  "data_per_page": 5,
  "total_page": 1,
  "page": 1,
  "data": [
    {
      "id": 10,
      "user_id": 12345,
      "company_id": 123456,
      "exchange_rate": 19000.55,
      "fee": 88888,
      "amount": 1000000,
      "source_country": "IDN",
      "destination_country": "GBR",
      "beneficiary_amount": 52.63,
      "beneficiary_currency_code": "GBP",
      "status": "PENDING",
      "timestamp": "2021-12-02 15:27:24",
      "time_served": "(not set)",
      "created_from": "API",
      "receipt": "someurl.png",
      "transaction_type": "C2C",
      "idempotency_key": "idem-1",
      "beneficiary": {
        "full_name": "John Smith",
        "bank_account_number": "1122333300",
        "bank": "Allica Bank",
        "email": "[email protected]",
        "msisdn": "09584008222",
        "nationality": "IDN",
        "country": "GBR",
        "province": "United Kingdom",
        "city": "Manchester",
        "address": "Mosley St Manchester",
        "postal_code": "M2",
        "relationship": "SON",
        "source_of_funds": "BUSINESS",
        "remittance_purpose": "EDUCATION",
        "iban": null,
        "swift_bic_code": null,
        "sort_code": "506967",
        "ifs_code": null,
        "bsb_number": null,
        "branch_number": null,
        "document_reference_number": null,
        "registration_number": null
      },
      "sender": {
        "name": "John Doe",
        "place_of_birth": 100230,
        "date_of_birth": "1963-12-01",
        "address": "Some Address Street 123",
        "identity_type": "nat_id",
        "identity_number": "1234789012347890",
        "country": 100252,
        "job": "entrepreneur",
        "email": "[email protected]",
        "city": "Sender City",
        "phone_number": "+628123456789"
      },
      "reason": ""
    },
    ...
  ]
}
Attribute Description
total_data Total data returned in all page
data_per_page Total data returned in current page
total_page Total/max page available
page Current page
data Array of international transfer object

Supported Destination Countries

Currently, we support International Transfer to these countries:

No. Country ISO Code Country Name Currency ISO Code
1 SGP Singapore SGD
2 MYS Malaysia MYR
3 AUS Australia AUD
4 JPN Japan JPY
5 TUR Turkey TRY
6 GBR United Kingdom GBP
7 THA Thailand THB
8 KOR South Korea KRW
9 HKG Hongkong HKD / CNY
10 CHN China (Alipay, C2C Only) CNY
11 AND Andorra EUR
12 AUT Austria EUR
13 BEL Belgium EUR
14 BGR Bulgaria EUR
15 HRV Croatia EUR
16 CYP Cyprus EUR
17 CZE Czech Republic EUR
18 DNK Denmark EUR
19 EST Estonia EUR
20 FIN Finland EUR
21 FRA France EUR
22 DEU Germany EUR
23 GRC Greece EUR
24 HUN Hungary EUR
25 ISL Iceland EUR
26 IRL Ireland EUR
27 ITA Italy EUR
28 LVA Latvia EUR
29 LIE Liechtenstein EUR
30 LTU Lithuania EUR
31 LUX Luxembourg EUR
32 MLT Malta EUR
33 MCO Monaco EUR
34 NLD Netherlands EUR
35 NOR Norway EUR
36 POL Poland EUR
37 PRT Portugal EUR
38 ROU Romania EUR
39 SMR San Marino EUR
40 SVK Slovakia EUR
41 SVN Slovenia EUR
42 ESP Spain EUR
43 SWE Sweden EUR
44 CHE Switzerland EUR
45 VAT Vatican City State EUR

Cancelled Transaction Reasons

These are the possible values for reason of International Transfer transaction if the transaction’s status is CANCELLED.

No. Error Code Description
1 DECLINED Transaction cannot be processed.
2 CANCELLED Transaction was cancelled by system.
3 REFUSED Transaction was not complete because beneficiary declined the fund.
4 INVALID_BENEFICIARY Transaction was failed due to invalid beneficiary account, e.g. bank account number.
5 INVALID_BENEFICIARY_DETAILS Transaction was failed due to invalid beneficiary details, e.g. name, email, phone number.
6 LIMITATIONS_ON_TRANSACTION_VALUE Transaction was failed due to value of transaction exceeding the limit.
7 SLS_SENDER Transaction was rejected due to sender failing the sanction list screening.
8 SLS_BENEFICIARY Transaction was not complete due to beneficiary failing the sanction list screening.
9 BARRED_BENEFICIARY Transaction was rejected due to sender being blacklisted.
10 BARRED_SENDER Transaction was not complete due to beneficiary being blacklisted.
11 COMPLIANCE_REASON Transaction was rejected due to compliance reason.
12 UNSUPPORTED_BENEFICIARY Transaction was not complete due to beneficiary’s inability to receive the fund.
13 DUPLICATED_TRANSACTION Transaction failed due it was a duplicate.
14 LIMITATIONS_ON_SENDER_QUANTITY Transaction was rejected due to sender had exceeded the transaction count limit.
15 LIMITATIONS_ON_BENEFICIARY_QUANTITY Transaction was not complete due to beneficiary had exceeded the transaction count limit.
16 LIMITATIONS_ON_ACCOUNT_QUANTITY Transaction was not complete due to beneficiary had exceeded the account transaction count limit.
17 LIMITATIONS_ON_ACCOUNT_VALUE Transaction was not complete due to beneficiary had reached the account transaction value limit.

Error List

As mentioned here, validation error or response with status code 422 will contain inner code. Here is the list of the code for International Transfer Transfer:

Error code Meaning
999 Undefined error
1020 The related attribute can only contain number
1024 Max char for the related attribute exceeded
1034 Country is invalid. Please see available country code
1038 Country/city code is not valid. The difference with 1037 code is 1037 will occur if the attribute only allows country code while this code will occur if the attribute allows country or city code
1039 Date format is invalid
1040 Date is invalid
1041 Attribute is invalid
1068 Param country_iso_code is invalid
1069 Param transaction_type is invalid
1081 Maximum amount is exceeded
1082 Minimum amount has not been reached
1083 Cannot use decimal amount
1084 The related attribute can only contain alphanumeric character
1085 Minimum words required
1087 Attribute must consist of X character
1094 The sent request/transaction is marked as stale request (more than 1 minute than the server time)
1095 X-TIMESTAMP format is invalid. It should follow the ISO8601 format

Callback

<?php
$data = isset($_POST['data']) ? $_POST['data'] : null;
$token = isset($_POST['token']) ? $_POST['token'] : null;
if($token === 'the_token_you_get_from_big_flip_dashboard'){
    $decoded_data = json_decode($data);
    print_r($decoded_data);
    //example of what will be printed are listed below
}
# See php tab for sample code

When your transaction status changed or when our system has completed the bank account inquiry process, we will hit the URL you’ve provided in your Flip for Business dashboard.

The provided URL must return a 200 HTTP Status Code. If the URL returns another HTTP Status Code or if our system doesn’t receive any response within 30 seconds (timeout), our system will retry the request 5 times, with a 2-minute interval for disbursement callback.

We will hit your URL using POST request with content type application/x-www-form-urlencoded and payload as described below:

Attribute Description
data string
JSON array string with content exactly the same as the response of disbursement or bank account inquiry (see example on the right side)
token string
Validation token to ensure that the callback is coming from our server. You can get your token in your Flip for Business dashboard.

Example code of how to receive the callback are shown on the right side.

Bank Inquiry Callback

Example of bank account inquiry

{
  "bank_code": "bca",
  "account_number": "5465327020",
  "account_holder": "PT Fliptech Lentera IP",
  "status": "SUCCESS",
  "inquiry_key": "aVncCDdKW9dciRvH9qSH"
}

If our system has completed the bank account inquiry process, then we will hit the provided URL for the bank inquiry callback. Please make sure that you have set the Bank Account Inquiry callback URL on the Flip for Business dashboard.

Disbursement Callback

Example of disbursement

{
  "id": 790,
  "user_id": 23,
  "amount": 10000,
  "status": "DONE",
  "reason": "",
  "timestamp": "2017-08-28 14:32:47",
  "bank_code": "bni",
  "account_number": "0437051936",
  "recipient_name": "- FLIPTECH LENTERA INSPIRASI P",
  "sender_bank": "bri",
  "remark": "testing",
  "receipt": "https://storage.biznetgiocloud.com/v1/AUTH_GIOOST443831/bukti_transfer/123993_2017-08-04%202017:07:26.jpg",
  "time_served": "2017-08-28 14:42:47",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_TRANSFER",
  "sender": null,
  "fee": 1500
}

Disbursement callback will be sent to you if you transaction status is changed to DONE or CANCELLED. This callback is used for the V2 and V3 Disbursement. Please make sure that you have set the Transaction callback URL on the Flip for Business dashboard.

Special Disbursement Callback

Example of special disbursement

{
  "id": 812,
  "user_id": 23,
  "amount": "10000",
  "status": "DONE",
  "reason": "",
  "timestamp": "2017-09-06 14:29:55",
  "bank_code": "bni",
  "account_number": "0437051936",
  "recipient_name": "- FLIPTECH LENTERA INSPIRASI P",
  "sender_bank": "bri",
  "remark": "testing",
  "receipt": "https://storage.biznetgiocloud.com/v1/AUTH_GIOOST443831/bukti_transfer/123993_2017-08-04%202017:07:26.jpg",
  "time_served": "2017-09-06 14:39:55",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_SPECIAL_TRANSFER",
  "sender": {
    "sender_name": "John Doe",
    "place_of_birth": 391,
    "date_of_birth": "1992-01-31",
    "address": "taman bakokekok di jalan bakokekok 15 no.2 - 230",
    "sender_identity_type": "nat_id",
    "sender_identity_number": "asdas213123",
    "sender_country": 100252,
    "job": "private_employee"
  },
  "fee": 1500
}

Special Disbursement callback will be sent to you if you transaction status is changed to DONE or CANCELLED. This callback is used for the V2 and V3 Special Disbursement. Please make sure that you have set the Transaction callback URL on the Flip for Business dashboard.

Accept Payment Callback

Example of accept payment

{
  "id": "FT1",
  "bill_link": "flip.id/$<company_code>/#<product_code>",
  "bill_link_id": 4740,
  "bill_title": "Cimol Goreng",
  "sender_name": "Jon Doe",
  "sender_bank": "bni",
  "amount": 10000,
  "status": "SUCCESSFUL",
  "sender_bank_type": "bank_account",
  "created_at": "2021-11-29 10:10:10"
}

Accept payment callback will be sent to you if there is a payment status that changed to SUCCESSFUL, CANCELED, or FAILED. Please make sure that you have set the Accept Payment callback URL on the Flip for Business dashboard.

International Transfer Callback

Example of international transfer

{
  "id": 10,
  "user_id": 12345,
  "company_id": 123456,
  "exchange_rate": 19000.55,
  "amount": 1000000,
  "beneficiary_amount": 52.63,
  "fee": 88888,
  "source_country": "IDN",
  "destination_country": "GBR",
  "beneficiary_currency_code": "GBP",
  "status": "DONE",
  "timestamp": "2021-12-02 15:27:24",
  "time_served": "(not set)",
  "created_from": "API",
  "receipt": "someurl.png",
  "transaction_type": "C2C",
  "idempotency_key": "idem-1",
  "beneficiary": {
    "full_name": "John Smith",
    "bank_account_number": "1122333300",
    "bank": "Allica Bank",
    "email": "[email protected]",
    "msisdn": "09584008222",
    "nationality": "IDN",
    "country": "GBR",
    "province": "United Kingdom",
    "city": "Manchester",
    "address": "Mosley St Manchester",
    "postal_code": "M2",
    "relationship": "SON",
    "source_of_funds": "BUSINESS",
    "remittance_purpose": "EDUCATION",
    "iban": null,
    "swift_bic_code": null,
    "sort_code": "506967",
    "ifs_code": null,
    "bsb_number": null,
    "branch_number": null,
    "document_reference_number": null,
    "registration_number": null
  },
  "sender": {
    "name": "John Doe",
    "place_of_birth": 100230,
    "date_of_birth": "1963-12-01",
    "address": "Some Address Street 123",
    "identity_type": "nat_id",
    "identity_number": "1234789012347890",
    "country": 100252,
    "job": "entrepreneur",
    "email": "[email protected]",
    "city": "Sender City",
    "phone_number": "+628123456789"
  }
}

International transfer callback will be sent to you if you transaction status is changed. Please make sure that you have set the International Transfer callback URL on the Flip for Business dashboard.

Agent’s KYC Status Callback

Example of Agent’s KYC

{
  "agent_id": 1,
  "agent_name": "John Doe",
  "kyc_status": "UPLOAD_IDENTITY_SELFIE_FAILED",
  "rejected_reason": "The data that is filled in does not match with identity card",
  "created_at": "2022-02-18 05:03:32",
  "updated_at": "2022-03-17 09:48:58",
  "submitted_at": "2022-03-17 09:48:58",
  "verified_at": "2022-01-03 09:11:49"
}

A callback notification will be sent to your Agent KYC callback URL if there is a status update related to the agent’s KYC process. Flip will send callback notification for KYC status which has status as below:

Name Code Description
UPLOAD_IDENTITY_SELFIE_FAILED 15 Selfie identity image is failed to be uploaded
UPLOAD_IDENTITY_SELFIE_SUCCESS 19 Selfie identity image is succeed to be uploaded
APPROVED 40 KYC Approved
REJECTED 50 KYC Rejected

Please make sure that you have set the Agent KYC Verification callback URL on the Flip for Business dashboard.

Legacy APIs

The legacy APIs documented in this section are provided for backwards-compatibility. These endpoints may be deprecated in the future. The newer version of APIs are already provided as replacement for these legacy APIs.

Money Transfer V2

Valid bank code are listed in destination bank section.

You can also get this list of bank code along with another information in get bank info.

Create Disbursement

POST /disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Use this endpoint to create a common disbursement transaction. For company operating as a Money Transfer Company (Perusahaan Transfer Dana), or anything related to that, please use Create Special Disbursement endpoint instead.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
    "account_number" => "1122333300",
    "bank_code" => "bni",
    "amount" => "10000",
    "remark" => "some remark",
    "recipient_city" => "391"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded",
  "idempotency-key: idem-key-1",
  "X-TIMESTAMP: 2022-01-01T15:02:15+0700"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement \
    -X POST \
    -u <secret_key>: \
    -d account_number="1122333300" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="some remark" \
    -d recipient_city="391"

POST https://bigflip.id/api/v2/disbursement

Attribute Description
Content-Type string (required)
Request content type: application/x-www-form-urlencoded.
idempotency-key string (required)
Idempotency key. Please see more detail on Idempotent Request section.
X-TIMESTAMP string (optional)
Request timestamp. The format will follow the ISO8601 format.

Body

Attribute Description
account_number string (required)
The account number of the recipient
bank_code string (required)
Bank code of the recipient bank. Accepted value are listed above
amount integer (required)
The amount of money to be disbursed
remark string (optional)
Remark to be included in the transfer made to the recipient. Usually will appear as berita transfer or remark in the transfer receipt. Max length for this attribute is 18 character
Only for disbursement with the bank code being bri, the remark will be prepended with the beneficiary name. Example: tes remark will be john doe test remark
recipient_city integer (optional)
City code of the recipient city. Available value can be retrieved from city list

Response

Status 200
Content-Type: application/json

{
  "id": 10,
  "user_id": 20,
  "amount": 10000,
  "status": "PENDING",
  "reason": "",
  "timestamp": "2017-08-28 14:32:47",
  "bank_code": "bni",
  "account_number": "1122333300",
  "recipient_name": "John Doe",
  "sender_bank": "bri",
  "remark": "testing",
  "receipt": "",
  "time_served": "0000-00-00 00:00:00",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_TRANSFER",
  "sender": null,
  "fee": 1500
}

See detailed explanation at the Disbursement object details.

Get All Disbursement

GET /disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Use this endpoint to get the list of transaction you’ve made. By default, the result will be paginated by 20. You can change the pagination, filter, and sort the result by changing the url parameter.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement?pagination=pagination&page=page&sort=sort&atribut=value");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement?pagination=pagination&page=page&sort=sort&atribut=value \
    -u <secret_key>:

Format of the url parameter:

GET https://bigflip.id/api/v2/disbursement?pagination=pagination&page=page&sort=sort&attribute=value

param value
pagination integer (optional)
The pagination of the result. Default value is 20
page integer (optional)
The page number of the result to be viewed.
sort string (optional)
Sort the result by the attribute. Use the attribute name (e.g sort=id) to sort in ascending order or dash+attribute name (e.g sort=-id) to sort in descending order.

You can also filter the result by changing attribute with the attribute to be filtered and value with the filter value. You can filter more than one attribute by appending another attribute filter to the url. Attribute that can be filtered are:

Example:

https://bigflip.id/api/v2/disbursement?pagination=10&page=5&sort=-id

Response

Status 200
Content-Type: application/json

{
  "total_data": 85,
  "data_per_page": 20,
  "total_page": 5,
  "page": 1,
  "data": [
    {
      "id": 10,
      "user_id": 20,
      "amount": 10000,
      "status": "PENDING",
      "reason": "",
      "timestamp": "2017-08-28 14:32:47",
      "bank_code": "bni",
      "account_number": "1122333300",
      "recipient_name": "John Doe",
      "sender_bank": "bri",
      "remark": "some remark",
      "receipt": "",
      "time_served": "0000-00-00 00:00:00",
      "bundle_id": 0,
      "company_id": 7,
      "recipient_city": 391,
      "created_from": "API",
      "direction": "DOMESTIC_TRANSFER",
      "sender": null,
      "fee": 1500
    },
    {
      "id": 11,
      "user_id": 20,
      "amount": 10000,
      "status": "DONE",
      "reason": "",
      "timestamp": "2017-08-24 21:21:23",
      "bank_code": "bni",
      "account_number": "1122333300",
      "recipient_name": "John Doe",
      "sender_bank": "bri",
      "remark": "some remark",
      "receipt": "someurl.jpg",
      "time_served": "2017-08-25 09:11:35",
      "bundle_id": 0,
      "company_id": 7,
      "recipient_city": 391,
      "created_from": "API",
      "direction": "FOREIGN_INBOUND_SPECIAL_TRANSFER",
      "sender": {
        "sender_name": "John Doe",
        "place_of_birth": 391,
        "date_of_birth": "1992-01-01",
        "address": "Some Address Street 123",
        "sender_identity_type": "nat_id",
        "sender_identity_number": "123456789",
        "sender_country": 100252,
        "job": "entrepreneur"
      },
      "fee": 1000
    }
  ]
}
Attribute Description
total_data Total data returned in all page
data_per_page Total data returned in current page
total_page Total/max page available
page Current page
data Array of disbursement object.

Get Disbursement

GET /disbursement/{transaction_id} HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Use this endpoint to get one specific transaction specified by transaction_id in the request URL.

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/disbursement/10");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/disbursement/10 \
    -u <secret_key>:

GET https://bigflip.id/api/v2/disbursement/[transaction_id]

Response

Status 200
Content-Type: application/json

{
  "id": 10,
  "user_id": 20,
  "amount": 10000,
  "status": "PENDING",
  "reason": "",
  "timestamp": "2017-08-28 14:32:47",
  "bank_code": "bni",
  "account_number": "1122333300",
  "recipient_name": "John Doe",
  "sender_bank": "bri",
  "remark": "testing",
  "receipt": "",
  "time_served": "0000-00-00 00:00:00",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "DOMESTIC_TRANSFER",
  "sender": null,
  "fee": 1500
}

Disbursement Object

Attribute Description
id Flip’s transaction id
user_id Your account user id in our system
amount The amount of money to be disbursed in IDR
status Transaction status. Possible values are:
  • PENDING
    Disbursement is still in process
  • CANCELLED
    The transaction is cancelled and the amount of the transaction plus the transaction fee will be credited to your balance. This will happen if the transfer process are failed for reason such as inactive recipient account, wrong account number, etc
  • DONE
    Disbursement process is finished and the money have been sent to the recipient
reason The reason value will be given if the transaction status is CANCELLED. Possible values are:
  • INACTIVE_ACCOUNT
    Inactive account / Nomor rekening tidak aktif
  • NOT_REGISTERED_ACCOUNT
    Not registered account / Nomor rekening tidak terdaftar
  • CANT_RECEIVE_TRANSFER
    Can’t receive transfer / Rekening tujuan tidak dapat menerima transfer
  • INTERMITTENT_DISTURBANCE_ON_BENEFICIARY_BANK
    Intermittent disturbance on destination bank / Bank tujuan sementara mengalami gangguan
  • BENEFICIARY_ACCOUNT_NOT_VERIFIED
    Account is not verified / Rekening tujuan belum terverifikasi
timestamp The time when the disbursement request created. Time will be in GMT+7 with yyyy-mm-dd hh:mm:ss format
bank_code Bank code of the recipient bank
account_number The account number of the recipient
recipient_name The name of the recipient account holder. If the account number haven’t cached by Flip yet, this attribute will show - (dash) instead
sender_bank The default sender bank in your account
remark Remark to be included in the transfer made to the recipient
receipt Url of the transfer receipt. The receipt will be a screenshot taken from the internet banking interface of each bank. This attribute will only show the url when the status is DONE
time_served The time when the transaction is finished. Will only show valid value when the status is DONE
bundle_id The bundle id of the transaction made from Flip for Business Dashboard (csv upload or manual input). For the transaction created from API, the value will always be 0
company_id Your Flip for Business account user id in our system
recipient_city City code of the recipient city
created_from The channel of which the transaction was created. Possible values are:
  • API
  • DASHBOARD
direction The direction of the transaction. Possible values are:
  • DOMESTIC_TRANSFER
    Common Disbursement from Indonesia to Indonesian recipient
  • DOMESTIC_SPECIAL_TRANSFER
    Special disbursement from the user of a Money Transfer Company residing in Indonesia to Indonesian recipient
  • FOREIGN_INBOUND_SPECIAL_TRANSFER
    Special disbursement from the user of a Money Transfer Company residing in a foreign country to Indonesian recipient
sender Possible values are null if the transaction is a common disbursement, and sender object if the transaction is a special disbursment.
fee The fee of the transaction

Sender Object

Attribute Description
sender_name The name of the user of the Money Transfer Company that act as a sender
place_of_birth City/country code of the Sender’s place of birth
date_of_birth Sender’s date of birth
address Sender’s address
sender_identity_type Sender’s identity type. Possible value are:
  • nat_id
  • drv_lic
  • passport
  • bank_acc
sender_identity_number Sender’s identity number
sender_country Country code of the Sender’s country
job Sender’s job. Possible values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
  • indonesian_migrant_worker
  • others

Special Money Transfer V2

Special Money Transfer is a set of special disbursement APIs for a company operating as a Money Transfer Company (Perusahaan Transfer Dana). The difference with common disbursement, is in this transaction you must provide your senders personal information as part of the Know Your Customer (KYC) process mandated by Bank Indonesia.

Create Special Disbursement

POST /special-disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded flip for business secret key]

Request

<?php

$ch = curl_init();
$secret_key = "wwwwwwwxxxxxxxaaaaaaabbbbbbbbbcccccdddd";

curl_setopt($ch, CURLOPT_URL, "https://bigflip.id/api/v2/special-disbursement");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);

curl_setopt($ch, CURLOPT_POST, TRUE);

$payloads = [
    "account_number" => "1122333300",
    "bank_code" => "bni",
    "amount" => "10000",
    "remark" => "some remark",
    "recipient_city" => "391",
    "sender_country" => 100252,
    "sender_place_of_birth" => 391,
    "sender_date_of_birth" => "1992-01-01",
    "sender_identity_type" => "nat_id",
    "sender_name" => "John Doe",
    "sender_address" => "Some Address Street 123",
    "sender_identity_number" => "123456789",
    "sender_job" => "entrepreneur",
    "direction" => "DOMESTIC_SPECIAL_TRANSFER"
];

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payloads));

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Content-Type: application/x-www-form-urlencoded",
  "idempotency-key: idem-key-1",
  "X-TIMESTAMP: 2022-01-01T15:02:15+0700"
));

curl_setopt($ch, CURLOPT_USERPWD, $secret_key.":");

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);
curl https://bigflip.id/api/v2/special-disbursement \
    -X POST \
    -u <secret_key>: \
    -d account_number="1122333300" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="some remark" \
    -d recipient_city="391" \
    -d sender_country="100252" \
    -d sender_place_of_birth="391",
    -d sender_date_of_birth="1992-01-01" \
    -d sender_identity_type="nat_id" \
    -d sender_name="John Doe" \
    -d sender_address="Some Address Street 123" \
    -d sender_identity_number="123456789" \
    -d sender_job="entrepreneur" \
    -d direction="DOMESTIC_SPECIAL_TRANSFER"

POST https://bigflip.id/api/v2/special-disbursement

Attribute Description
Content-Type string (required)
Request content type: application/x-www-form-urlencoded.
idempotency-key string (required)
Idempotency key. Please see more detail on Idempotent Request section.
X-TIMESTAMP string (optional)
Request timestamp. The format will follow the ISO8601 format.

Body

Attribute Description
account_number string (required)
The account number of the recipient
bank_code string (required)
Bank code of the recipient bank. Accepted value are listed above
amount integer (required)
The amount of money to be disbursed
remark string (optional)
Remark to be included in the transfer made to the recipient. Usually will appear as berita transfer or remark in the transfer receipt. Max length for this attribute is 18 character
Only for disbursement with the bank code being bri, the remark will be prepended with the beneficiary name. Example: tes remark will be john doe test remark
recipient_city integer (optional)
City code of the recipient city. Available value can be retrieved from city list. Default value is 394.
sender_country integer (required)
Country code of the sender’s residence. Available value can be retrieved from country list
sender_place_of_birth integer (optional)
City/country code of the sender’s place of birth. Use city code if the sender’s place of birth is in Indonesia, and country code if outside Indonesia. Available value can be retrieved from city/country list
sender_date_of_birth string/date (optional)
Sender’s date of birth with YYYY-MM-DD format
sender_identity_type string (optional)
Sender’s ID type. Accepted value are:
  • nat_id
    National Id Card or KTP in Indonesia
  • drv_lic
    Driving license
  • passport
  • bank_acc
    Bank Account (DEFAULT)
sender_name string (required)
The name of the user of the Money Transfer Company that act as a sender
sender_address string (required)
Sender’s address
sender_identity_number string (optional)
Sender’s ID number. Default value is from attribute account_number
sender_job string (required) Sender’s job. Accepted values are:
  • housewife
  • entrepreneur
  • private_employee
  • government_employee
  • foundation_board
    People who work at foundation as an employee
  • indonesian_migrant_worker
    Also known as TKI
  • company
    If sender is a company, not individual
  • others
direction string (required) The direction of the transaction. Accepted values are:
  • DOMESTIC_SPECIAL_TRANSFER
    When the sender and the recipient are both residing in Indonesia
  • FOREIGN_INBOUND_SPECIAL_TRANSFER
    When the sender are in a foreign country, but the recipient are in Indonesia

Response

Status 200
Content-Type: application/json

{
  "id": 11,
  "user_id": 20,
  "amount": 10000,
  "status": "DONE",
  "reason": "",
  "timestamp": "2017-08-24 21:21:23",
  "bank_code": "bni",
  "account_number": "1122333300",
  "recipient_name": "John Doe",
  "sender_bank": "bri",
  "remark": "some remark",
  "receipt": "someurl.jpg",
  "time_served": "2017-08-25 09:11:35",
  "bundle_id": 0,
  "company_id": 7,
  "recipient_city": 391,
  "created_from": "API",
  "direction": "FOREIGN_INBOUND_SPECIAL_TRANSFER",
  "sender": {
    "sender_name": "John Doe",
    "place_of_birth": 391,
    "date_of_birth": "1992-01-01",
    "address": "Some Address Street 123",
    "sender_identity_type": "nat_id",
    "sender_identity_number": "123456789",
    "sender_country": 100252,
    "job": "entrepreneur"
  },
  "fee": 1000
}

See detailed explanation at the Disbursement object details.

Changelog

Friday, December 2 2022

Monday, November 28 2022

Monday, November 14 2022

Tuesday, November 8 2022

Thursday, November 3 2022

Wednesday, October 10 2022

Wednesday, August 31 2022

Thursday, August 23 2022

Thursday, July 21 2022

Friday, July 15 2022

Wednesday, July 6 2022

Thursday, June 21 2022

Monday, April 25 2022

Wednesday, April 13 2022

Friday, April 1 2022

Tuesday, March 8 2022

Thursday, February 17 2022

Thursday, December 23 2021

Monday, December 20 2021

Tuesday, December 7 2021

Tuesday, November 30 2021

Friday, October 01 2021

Wednesday, September 22 2021

Tuesday, August 16 2021

Tuesday, March 23 2021

Wednesday, March 17 2021

Thursday, March 04 2021

Tuesday, November 10 2020

Monday, October 12 2020

Friday, April 17 2020

Wednesday, Apr 01 2020

Tuesday, March 31 2020

Wednesday, March 18 2020

Friday, February 28 2020

Monday, January 27 2020

Wednesday, January 22 2020

Wednesday, May 5 2019

Wednesday, February 20 2019

Friday, February 8 2019

Sunday, January 13 2018

Wednesday, August 29 2018

Monday, May 28 2018

Wednesday, April 18 2018

Monday, January 15 2018

Wednesday, December 6 2017

Monday, November 20 2017

Thursday, November 9 2017

Wednesday, October 25 2017

Wednesday, October 18 2017

Wednesday, September 13 2017

Wednesday, August 9 2017

Monday, July 17 2017