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:
BALANCE_INSUFFICIENT
, happen when your Flip account balance are insufficient for the current transaction (balance < (transfer amount + transfer fee)).-
VALIDATION_ERROR
, error related to the validation of your payload data.
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) |
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 |
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) |
woori |
Bank Woori Saudara |
tabungan_pensiunan_nasional |
BTPN |
bri_syr |
BRI (Bank Rakyat Indonesia) Syariah |
bjb_syr |
BJB Syariah |
mega |
Bank Mega |
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 |
victoria_syr |
Bank Victoria Syariah |
banten |
BPD Banten |
doku |
Doku |
mutiara |
Bank Mutiara |
panin_syr |
Panin Dubai Syariah |
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.
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:
- Generate public key and private key pair. Use algorithm OPENSSL_KEYTYPE_RSA 2048 bits.
- Send the public key to flip.id and inform when you ready to request with signature.
- 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.
<?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://big.flip.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.
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 |
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
Flip provides two types of sandbox environment: old sandbox (sandbox.flip.id - base URL: https://sandbox.flip.id/api/v2/) and new sandbox (bigflip.id/sandbox/overview - base URL: https://bigflip.id/big_sandbox_api/v2).
Please also note that we recommend for users registering on November 1st, 2020 or later to utilize the newer version of our sandbox environment. To help your integration, we recommend you to utilize our Postman collection for new sandbox, download 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 Big Flip 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 is https://big.flip.id/api/v2/. Every transaction made through this url 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 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": 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. 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:
|
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 08.00-18.00 (WIB/GMT+7) on Monday-Friday, and 08.00-13.30 (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
}
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
|
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.
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.
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 |
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 characterOnly 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": 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:
id
- exact comparisonamount
- exact comparisonstatus
- exact comparisontimestamp
- “like” comparisonbank_code
- “like” comparisonaccount_number
- “like” comparisonrecipient_name
- “like” comparisonremark
- “like” comparisontime_served
- “like” comparisoncreated_from
- “like” comparisondirection
- exact comparison
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:
|
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:
|
direction | The direction of the transaction. Possible values are:
|
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:
|
sender_identity_number | Sender’s identity number |
sender_country | Country code of the Sender’s country |
job | Sender’s job. Possible values are:
|
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
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/special-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/special-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 |
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 characterOnly 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:
|
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:
|
direction | string (required) The direction of the transaction. Accepted values are:
|
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.
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",
...
}
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.
Changelog
Tuesday, Nov 10 2020
- Change sandbox 2.0 description
Monday, Oct 12 2020
- Remove OVO and Dana as supported banks
- Add Idempotency Key implementation guide
Friday, Apr 17 2020
- Add
company
as a new option insender_job
for non-individual sender - Add Bank Victoria Syariah and BPD Banten in supported banks
Wednesday, Apr 01 2020
- Remove max amount information
Tuesday, Mar 31 2020
- Drop the “required” from recipient city code
Wednesday, Mar 18 2020
- Update attributes sender_identity_type, sender_identity_number, recipient_city, sender_place_of_birth, and sender_date_of_birth in Special Disbursement to be optionals
Friday, Feb 28 2020
- Update OVO availability
Monday, Jan 27 2020
- Update information about sandbox environment
Wednesday, Jan 22 2020
- Add OVO, Dana, and Doku as a bank code
Wednesday, May 5 2019
- Fix special disbursement url in sample code
Wednesday, February 20 2019
- Change
WRONG_ACCOUNT_NUMBER
toCANCELLED
in sandbox env description
Friday, February 8 2019
- Change sample price on
/general/banks
endpoint
Sunday, January 13 2018
- Update operational time
- Remove information about race condition
Wednesday, August 29 2018
- Update bank availability info
Monday, May 28 2018
- Add information about changed remark when disbursing to
bri
Wednesday, April 18 2018
- Change remark from
required
tooptional
Monday, January 15 2018
- Update idempotency key behavior
Wednesday, December 6 2017
- Update bank availability info
Monday, November 20 2017
- Change sender attribute name for improved readability
Thursday, November 9 2017
- Add idempotency-key header
Wednesday, October 25 2017
- Add list of newly supported banks
Wednesday, October 18 2017
- Change country list to English
Wednesday, September 13 2017
- Add remaining endpoint
- Remove leading zeroes removal information, as it cause another problem
Wednesday, August 9 2017
- Add leading zeroes removal information
Monday, July 17 2017
- Initial commit