NAV Navbar
Logo
PHP Shell

Introduction

Welcome to Big Flip v2 API. Flip will help you in doing task related to sending your money, so you can focus on creating a better product.

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

I 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 me an email at luqman@flip.id

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 the Error Code section.

Supported Banks

Currently, we only support disbursement to these banks:

Bank Code Bank Name
mandiri Bank Mandiri
bri Bank Rakyat Indonesia
bni BNI (Bank Negara Indonesia) & BNI Syariah
bca Bank Central Asia
bsm Bank Syariah Mandiri
cimb CIMB Niaga & CIMB Niaga Syariah
muamalat Muamalat
danamon Bank Danamon
permata Bank Permata
bii Maybank Indonesia
panin Panin Bank
uob UOB Indonesia
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) *temporary unavailable
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 Kaltim *temporary unavailable
kalimantan_tengah Bank Kalteng
sulselbar Bank Sulselbar
sulut Bank SulutGo
nusa_tenggara_barat Bank NTB
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 (Bank Tabungan Negara) *temporary unavailable
woori Bank Woori Saudara
tabungan_pensiunan_nasional BTPN
bri_syr BRI (Bank Rakyat Indonesia) Syariah
bjb_syr BJB Syariah
mega Bank Mega *temporary unavailable
bukopin Bukopin
jasa_jakarta Bank Jasa Jakarta
hana KEB Hana Bank Indonesia
mnc_internasional Bank MNC Internasional
agroniaga BRI Agroniaga
sbi_indonesia SBI Indonesia
royal Bank Royal Indonesia
nationalnobu Nobu (Nationalnobu) Bank
mega_syr Bank Mega Syariah
ina_perdana Bank Ina Perdana
sahabat_sampoerna Bank Sahabat Sampoerna
kesejahteraan_ekonomi Bank Kesejahteraan Ekonomi
bca_syr BCA (Bank Central Asia) Syariah
artos Bank Artos Indonesia
mayora Bank Mayora Indonesia
index_selindo Bank Index Selindo
victoria_internasional Bank Victoria International
agris Bank Agris
chinatrust CTBC (Chinatrust) Indonesia
commonwealth Commonwealth Bank

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://big.flip.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 Big Flip 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.

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.

Error Code

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

Error Code Meaning
999 Undefined error. Or maybe we just missed to give the error a proper error code. Please contact us if this happen.
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 (Rp20.000.000)
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
1032 Pagination should be a number more than 0
1033 Invalid bank code
1035 Insufficient Big Flip balance
1037 Country code is not valid. Available country code is in country code endpoint
1038 Country/city code is not valid. The difference with 1037 code is 1037 will occur if the attribute only allow country code while this code will occure if the attribute allow country or city code.
1039 Date format is not valid according to the requested format
1040 Date is not valid (e.g Feb 29 when not in leap year, future date, etc)
1041 The related attribute value is out of the allowed value

Environment

Sandbox

We provide a sandbox/testing environment for you. The base URL for the sandbox is https://sandbox.flip.id/api/v2/.

The sandbox environment is completely separated from the production environment, so whatever you’ll do in sandbox will not affect your Big Flip account. Each sandbox account will be given Rp50.000.000 balance for you to test the API.

The secret key and the validation token in sandbox will be different with the production environment.

We won’t process any transaction you’ve made in the sandbox environment. Any transaction created will be left at PENDING status. However, you can ask us to manually trigger the transaction to simulate DONE or WRONG_ACCOUNT_NUMBER status. You can tell us via the in browser chat feature or email me at luqman@flip.id and give us the transaction id you want to trigger.

If you doesn’t have a Big Flip account yet, or just want to try the API without registering, you can use this sample secret key:

JDJ5JDEzJGRYZ04zeGtkZkdwRy5NRm82WjM5bi5nV3NxYVByVG9YQnVPSDFaR1JZNDUxSjBHLy5yUUhp

Production

The production environment base url is https://big.flip.id/api/v2/. Every transaction made through this url will be processed (except if something goes wrong).

Race Condition

Status 500
Content-Type: application/json

{
    "code": "RACE_CONDITION",
    "errors": [
        {
            "attribute": "id",
            "code": 999,
            "message": "Race condition happened, please retry the request"
        }
    ]
}

Race condition will happen if there are several transfer request made at nearly the same time (only several milisecon gap). This will sometimes result in inconsistency of your balance. To prevent this from happened, our system will only accept the first transaction, and foil the others. The foiled request will get response shown on the right side.

Our system will make several attemp internally before foiling your request. But in case this is still happened, your system should retry the request if it get this response.

Idempotent Request

<?php

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

curl_setopt($ch, CURLOPT_URL, "https://big.flip.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://big.flip.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.

Disbursement

Valid bank code are listed in supported banks 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 big flip 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://big.flip.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"
));

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

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

var_dump($response);
curl https://big.flip.id/api/v2/disbursement \
    -X POST \
    -u <secret_key>: \
    -d account_number="0437051936" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="testing" \
    -d recipient_city="391"
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 (Rp20.000.000 max)
remark string (required)
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
recipient_city integer (optional)
City code of the recipient city. This attribute is mandatory only for bni, cimb, and bsm. Available value can be retrieved from city list

Response

Status 200
Content-Type: application/json

{
    "id": 790,
    "user_id": 23,
    "amount": 10000,
    "status": "PENDING",
    "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": "",
    "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 get all disbursement response.

Get All Disbursement

GET /disbursement HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded big flip 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://big.flip.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://big.flip.id/api/v2/disbursement?pagination=pagination&page=page&sort=sort&atribut=value \
    -u <secret_key>: 

Format of the url parameter:

/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:

/disbursement?pagination=10&page=5&sort=-id&status=PENDING&bank_code=bni

Response

Status 200
Content-Type: application/json

{
    "total_data": 85,
    "data_per_page": 20,
    "total_page": 5,
    "page": 1,
    "data": [
        {
            "id": 790,
            "user_id": 23,
            "amount": 10000,
            "status": "PENDING",
            "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": "",
            "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": 789,
            "user_id": 23,
            "amount": 10000,
            "status": "DONE",
            "timestamp": "2017-08-24 21:21:23",
            "bank_code": "bni",
            "account_number": "0437051936",
            "recipient_name": "- FLIPTECH LENTERA INSPIRASI P",
            "sender_bank": "bri",
            "remark": "test remark",
            "receipt": "https://storage.biznetgiocloud.com/v1/AUTH_GIOOST443831/bukti_transfer/123993_2017-08-04%202017:07:26.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": "taman bakokekok di jalan bakokekok 15 no.2 - 230",
                "sender_identity_type": "nat_id",
                "sender_identity_number": "asdas213123",
                "sender_country": 100252,
                "job": "babu"
            },
            "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.

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
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 Big Flip Dashboard (csv upload or manual input). For the transaction created from API, the value will always be 0
company_id Your Big Flip 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
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

GET /disbursement/{transaction_id} HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded big flip 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://big.flip.id/api/v2/disbursement/123");
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://big.flip.id/api/v2/disbursement/123 \
    -u <secret_key>: 

Response

Status 200
Content-Type: application/json

{
    "id": 790,
    "user_id": 23,
    "amount": 10000,
    "status": "PENDING",
    "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": "",
    "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 get all disbursement response

Disbursement Queue

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

Each disbursement transaction will queued to be sent to the recipient. You can view the queue number for each transanction in this endpoint.

Request

<?php

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

curl_setopt($ch, CURLOPT_URL, "https://big.flip.id/api/v2/disbursement/123/queue");
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://big.flip.id/api/v2/disbursement/123/queue \
    -u <secret_key>: 

/disbursement/{transaction_id}/queue

Replace {transaction_id} with the desired transaction id.

Response

Status 200
Content-Type: application/json

{
    "queue": 24
}

City List

GET /disbursement/city-list HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded big flip 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://big.flip.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://big.flip.id/api/v2/disbursement/city-list \
    -u <secret_key>: 

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",
    ...
}

Country List

GET /disbursement/country-list HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded big flip 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://big.flip.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://big.flip.id/api/v2/disbursement/country-list \
    -u <secret_key>: 

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",
    ...
}

City and Country List

GET /disbursement/city-country-list HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded big flip 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://big.flip.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://big.flip.id/api/v2/disbursement/city-country-list \
    -u <secret_key>: 

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",
    ...
}

Bank Account Inquiry

POST /disbursement/bank-account-inquiry HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic [your encoded big flip 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 Big Flip dashboard.

Request

<?php

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

curl_setopt($ch, CURLOPT_URL, "https://big.flip.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");

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://big.flip.id/api/v2/disbursement/bank-account-inquiry \
    -X POST \
    -u <secret_key>: \
    -d account_number="5465327020" \
    -d bank_code="bca"
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

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"
}

Example of uncached response

Status 200
Content-Type: application/json

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

Example of invalid account

Status 200
Content-Type: application/json

{
    "bank_code": "bca",
    "account_number": "1232123123212",
    "account_holder": "",
    "status": "INVALID_ACCOUNT_NUMBER"
}
Attribute Description
bank_code Bank code of the account
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.

Special Disbursement

Special Disbursement is a type of disbursement 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 big flip secret key]

Request

<?php

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

curl_setopt($ch, CURLOPT_URL, "https://big.flip.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",
    "sender_country" => 100252,
    "sender_place_of_birth" => 391,
    "sender_date_of_birth" => "1992-01-01",
    "sender_identity_type" => "nat_id",
    "sender_name" => "paijo",
    "sender_address" => "taman bakokekok di jalan bakokekok 15 no.2 - 230",
    "sender_identity_number" => "123456789",
    "sender_job" => "private_employee",
    "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"
));

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

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

var_dump($response);
curl https://big.flip.id/api/v2/disbursement \
    -X POST \
    -u <secret_key>: \
    -d account_number="0437051936" \
    -d bank_code="bni" \
    -d amount="10000" \
    -d remark="testing" \
    -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="paijo" \
    -d sender_address="taman bakokekok di jalan bakokekok 15 no.2 - 230" \
    -d sender_identity_number="123456789" \
    -d sender_job="private_employee" \
    -d direction="DOMESTIC_SPECIAL_TRANSFER"
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 (Rp20.000.000 max)
remark string (required)
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
recipient_city integer (optional)
City code of the recipient city. This attribute is mandatory only for bni, cimb, and bsm. Available value can be retrieved from city list
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/date (required)
Sender’s date of birth with YYYY-MM-DD format
sender_identity_type string (required)
Sender’s ID type. Accepted value are:
  • nat_id
    National Id Card or KTP in Indonesia
  • drv_lic
    Driving license
  • passport
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 (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
  • 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": 812,
    "user_id": 23,
    "amount": "10000",
    "status": "PENDING",
    "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": "",
    "time_served": "0000-00-00 00:00:00",
    "bundle_id": 0,
    "company_id": 7,
    "recipient_city": 391,
    "created_from": "API",
    "direction": "DOMESTIC_SPECIAL_TRANSFER",
    "sender": {
        "sender_name": "John Doe",
        "sender_place_of_birth": 391,
        "sender_date_of_birth": "1992-01-31",
        "sender_address": "taman bakokekok di jalan bakokekok 15 no.2 - 230",
        "sender_identity_type": "nat_id",
        "sender_identity_number": "asdas213123",
        "sender_country": 100252,
        "sender_job": "private_employee"
    },
    "fee": 1500
}

See detailed explanation at get all disbursement response.

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

Example of bank account inquiry

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

Example of disbursement

{
    "id": 790,
    "user_id": 23,
    "amount": 10000,
    "status": "DONE",
    "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
}

Example of special disbursement

{
    "id": 812,
    "user_id": 23,
    "amount": "10000",
    "status": "DONE",
    "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
}

When your transaction status changed to DONE or CANCELLED, or when our system have complete the bank account inquiry process, we will hit the URL you’ve provided in your Big Flip dashboard. The provided URL must return a 200 HTTP Status Code. If the URL return another HTTP Status Code, our system will retry the request 5 times, with 2 minute interval for disbursement callback. For bank account inquiry, we’ll only do the callback once, so you have to make sure that your callback URL always in good condition.

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 Big Flip dashboard.

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

General

Get Balance

GET /general/balance HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: basic [your encoded big flip 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://big.flip.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://big.flip.id/api/v2/general/balance \
    -u <secret_key>: 

Response

Status 200
Content-Type: application/json

{
    "balance": 49656053
}

Get Bank Info

GET /general/banks HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: basic [your encoded big flip 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://big.flip.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://big.flip.id/api/v2/general/banks \
    -u <secret_key>: 

/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": 3500,
        "queue": 8,
        "status": "DISTURBED"
    },
    {
        "bank_code": "bri",
        "name": "BRI",
        "fee": 1000,
        "queue": 39,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "bni",
        "name": "BNI",
        "fee": 3500,
        "queue": 57,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "bca",
        "name": "BCA",
        "fee": 3500,
        "queue": 8,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "bsm",
        "name": "Bank Syariah Mandiri",
        "fee": 3500,
        "queue": 2,
        "status": "HEAVILY_DISTURBED"
    },
    {
        "bank_code": "cimb",
        "name": "CIMB Niaga",
        "fee": 3500,
        "queue": 3,
        "status": "OPERATIONAL"
    },
    {
        "bank_code": "muamalat",
        "name": "Muamalat",
        "fee": 3500,
        "queue": 1,
        "status": "OPERATIONAL"
    },
    .
    .
    .
]

Filtered result:

Status 200
Content-Type: application/json

[
    {
        "bank_code": "bca",
        "name": "BCA",
        "fee": 3500,
        "queue": 8,
        "status": "OPERATIONAL"
    }
]
Attribute Description
bank_code Flip’s bank code. bni is the code for both BNI and BNI Syariah, and 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 Operational

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

This endpoint will return information whether Flip currently is operational or not. Our operational hour is 09.00-19.00 (WIB/GMT+7) on Monday-Friday, and 09.00-14.00 (WIB/GMT+7) on Saturday. Currently we are not operational on Sunday. All transactions made outside those hour will be processed on the next operational hour.

Request

<?php

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

curl_setopt($ch, CURLOPT_URL, "https://big.flip.id/api/v2/general/operational");
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://big.flip.id/api/v2/general/operational \
    -u <secret_key>: 

Response

Status 200
Content-Type: application/json

{
    "operational": true
}

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://big.flip.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://big.flip.id/api/v2/general/maintenance \
    -u <secret_key>: 

Response

Status 200
Content-Type: application/json

{
    "maintenance": false
}

Changelog

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