NAV undefined
undefined
bash

Introduction

This API Reference is specifically designed for RDL (Rekening Dana Lender).

Authentication

To successfully authenticate with Instamoney's API, you must append a colon and Base 64 encode the API key you find in the dashboard. For example if your API key is

sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==

First, add a colon at the end

sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==:

Finally, Base64 encode the colon appended key to get

c2tfdGVzdF9PWUNFZkw1eGdMTCtsOFp2SzdRYVNHR1ZNTjczb05FcGszeXorUnhuLzJiUy9MQ2dDUVorZ3c9PTo=

Steps for all endpoints:

  1. Obtain your API key in https://dashboard.instamoney.co/security.

Errors

Below are some of most common errors across all our endpoints. Specific errors are located under each endpoint. If you have any questions please contact us.

Error code Meaning
400 Bad request, e.g. validation error (API_VALIDATION_ERROR) or invalid JSON (INVALID_JSON_FORMAT)
401 Unauthorised access, e.g. the wrong API key
403 Forbidden access, e.g. API key does not have permission for this endpoint
404 Page or data not found
500 Unhandled error - contact us when this happens. If this was a response to a request to send money, please check the status of the resource (eg. disbursement, credit card refund) before retrying to ensure that the request will not be processed twice.

Rate Limit

API Rate Limit is a feature that limits the number of requests that a user or account can make to an API within a specific time period. This is often used to prevent excessive or abusive usage of an API, and to ensure that all users have fair access to the resources provided by the API.

Instamoney uses the Sliding Window algorithm to implement API Rate Limit. This algorithm divides a specific time period (such as an hour or a day) into smaller windows, and tracks the number of requests made within each window. For example, if the rate limit is 50 requests per second (RPS), and the window size is one minute, the algorithm will allow up to 3000 requests in each one-minute window.

In general, API Rate Limit is set 3000 requests per minute (RPM) per endpoint per account in Test mode. In Live mode, the rate limit is set to 6000 requests per minute (RPM) per endpoint per account. The Rate Limit value can be different per endpoint when stated otherwise in each API section in API Reference. We return the following headers in API response to let you check Rate Limit details:

Response Header Example Value Description
Rate-Limit-Limit 6000 Containing the requests quota in the time window
Rate-Limit-Remaining 5839 Containing the remaining requests quota in the current window
Rate-Limit-Reset 58.379 Containing the time remaining in the current window, specified in seconds

If you exceed the rate limit for an endpoint, you will receive an HTTP status code of 429 (Too Many Requests) with the error code RATE_LIMIT_EXCEEDED. It is important to handle this error and throttle your requests until the rate limit quota replenishes.

Here are some best practices for handling API Rate Limit gracefully as a client:

  1. Implement rate limiting in your application: As a client, it is important to implement rate limiting in your own application to ensure that you do not exceed the API's rate limits. This can be done by tracking the number of requests made and the time at which they were made, and comparing this to the API's rate limit policies.
  2. Handle rate limit errors: When you receive an HTTP status code of 429 (Too Many Requests) with the error code RATE_LIMIT_EXCEEDED, it is important to handle this error gracefully in your application. One way to do this is to retry the request after a certain amount of time has passed, to give the rate limit quota a chance to replenish.
  3. Use exponential backoff: When retrying a request after a rate limit error, it can be helpful to use exponential backoff. This means that you should increase the amount of time you wait between retries by a factor of two (or some other multiplier) each time you receive a rate limit error. For example, you might retry the request after 1 second, then 2 seconds, then 4 seconds, and so on. This helps to reduce the risk of overwhelming the API with too many retries in a short period of time.
  4. Use caching: Caching the results of API requests can help to reduce the number of requests made to the API, and can also improve the performance of your application. By storing the results of API requests locally and reusing them until they become stale, you can reduce the need to make frequent requests to the API.

By following these best practices, you can help to ensure that your application handles rate limits gracefully and provides a reliable and consistent experience for your users.

We may reduce limits to prevent abuse, or increase limits to enable high-traffic applications. To increase the rate limit for your account, you can contact us 4 weeks in advance via email api.instamoney.co by providing your Business ID. We will review your request and may be able to increase the limit based on the needs of your application and the overall usage of the API.

Overall, it is important to carefully manage your API usage to ensure that you do not exceed the rate limits and disrupt the service for other users. By implementing proper rate limiting and error handling in your application, you can ensure that your users have a reliable and consistent experience when accessing the API.

RDL Investor

Investors are the lenders which will be the main customers on your platform. Our Investors API calls allow you to register your customers’ personal details with BNI and use these to create RDLs. No need for a visit to the bank to open these accounts. Your customers’ personal data is retained to comply with regulatory requirements for IT-based lending services in Indonesia, and also allows Instamoney to fulfill Know-Your-Client obligations.

The Investors resource will be used together with our other APIs to process transfers through your customers’ RDLs.

There are 2 types of Investor Object Creation, which are creating new RDL Investor (online method) and registering existing RDL Investor account which requires you to fill in your customer’s RDL account_number (offline method).

Create New RDL Investor

Endpoint: Create New RDL Investor

POST https://api.instamoney.co/rdl-investors

Register a new Investor in your platform and create a BNI RDL account owned by them, with just one API request. As this API call replaces the usual manual process involved in opening a bank account, it requires more detailed fields.

Create New RDL Investor Request

Example Create New RDL Investor Request

curl -X POST \
  https://api.instamoney.co/rdl-investors \
  -u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
  -H 'Content-Type: application/json' \
  -d '{
    "external_id": "investor-123",
    "title": "BPK",
    "first_name": "Wisnu",
    "middle_name": "Praditya",
    "last_name": "Utama",
    "npwp_number": "012345678901234",
    "nationality": "ID",
    "domicile_country": "ID",
    "religion": "CHRISTIAN",
    "birth_place": "Surakarta",
    "birth_date": "1994-06-10",
    "gender": "MALE",
    "marital_status": "SINGLE",
    "mother_maiden_name": "Sumiyati",
    "job_code": "EMPLOYEE",
    "education": "BACHELORS_DEGREE",
    "id_number": "1234567890123456",
    "id_issuing_city": "Surakarta",
    "id_expiry_date": "2017-06-10",
    "address_street": "Jl. Sultan Hasanudin No. 47-51",
    "address_rt_rw_perum": "RT 06 RW 02",
    "address_kelurahan": "Melawai",
    "address_kecamatan": "Kebayoran Baru",
    "zip_code": "12160",
    "home_phone_number": "021-081111",
    "office_phone_number": "021-091111",
    "mobile_phone_number": "08123123123",
    "fax_number": "0271-08123123",
    "branch_opening_location_code": "JAKARTA_KOTA",
    "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
    "email": "wisnuputra123123@gmail.com",
    "account_type": "RDL",
    "open_account_reason": "INVESTMENTS",
    "source_of_fund": "SALARY"
}'
Parameter Description
external_id
required
string Unique ID of the investor.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)_:,.-
Example: ab,cd:ext-id.test_1
title
required
title Titles to be shown before your name
first_name
optional
string alphabet only First name
middle_name
optional
string alphabet only Middle name
last_name
required
string alphabet and space only Last name. If your Investor does not have a last name / surname, they can fill in whatever name they have here
npwp_number
required
string Indonesian Tax ID. We encourage Investors to register their NPWP numbers so their RDLs can be more easily identifiable
nationality
required
string Country code according to ISO3166-1 alpha 2. But currently, only Indonesians (code: ID) can apply for RDLs
domicile_country
required
string Where the Investor lives for the majority of their time. The format of nationality should follow the ISO3166-1 alpha-2 standard, e.g. ID
religion
required
religion Religion code of the investor
birth_place
required
string Place in Indonesia where your Investor was born, e.g. Jakarta Kota, Medan, Surabaya.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space).,'-
Example: Ka'anjan.
birth_date
required
YYYY-MM-DD Birth date
gender
required
MALE or FEMALE
marital_status
required
marital status
mother_maiden_name
required
string alphabet and space only Maiden name of the Investor’s mother. This information is collected to facilitate easy authentication of your Investor in the event the RDL is disputed.
job_code
required
job code
education
required
education
id_number
required
string KTP number only
id_issuing_city
required
string The city which issued your customer’s Identity.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space).,'-
Example: Ka'anjan.
id_expiry_date
optional
YYYY-MM-DD ID expiry date. You can put year 2099 if the ID is an expired EKTP, or if it's a lifetime KTP
address_street
required
string Domicile street address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: Ka'anjan/Kanjanan (12).
address_rt_rw_perum
required
stringRT/RW domicile address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: RT 06 / RW 07.
address_kelurahan
required
stringKelurahan domicile address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: Bromonayu
address_kecamatan
required
stringKecamatan domicile address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: Setiahati
zip_code
required
string Zip code
home_phone_number
optional
string Area code and home phone number. Follow this format: xxx-xxxxxx e.g. 021-874012
office_phone_number
optional
string Area code and office phone number. Follow this format: xxx-xxxxxx e.g. 021-874012
mobile_phone_number
required
string Mobile phone number
fax_number
optional
string Area code and fax number. Follow this format: xxx-xxxxxx e.g. 021-874012
branch_opening_location_code
required
branch opening location code This is the BNI branch which your Investor prefers to set up their RDL at
monthly_income_range
required
monthly income range Monthly income range
email
required
string Your valid email address
account_type
required
account type Account type
open_account_reason
required
open account reason Reason for opening account
source_of_fund
required
source of fund Source of fund

Create New RDL Investor Response

See Investor Resource for parameter details.

Example Create New RDL Investor Response

{
    "home_phone_number": "021-081111",
    "office_phone_number": "021-091111",
    "mobile_phone_number": "08123123123",
    "fax_number": "0271-08123123",
    "account_status": "PENDING",
    "id": "6bc50b40-dea0-11e9-aeaf-651a8718890e",
    "external_id": "investor-123",
    "title": "BPK",
    "first_name": "Wisnu",
    "middle_name": "Praditya",
    "last_name": "Utama",
    "npwp_number": "012345678901234",
    "nationality": "ID",
    "domicile_country": "ID",
    "religion": "CHRISTIAN",
    "birth_place": "Surakarta",
    "birth_date": "1994-06-10T00:00:00.000Z",
    "gender": "MALE",
    "marital_status": "SINGLE",
    "mother_maiden_name": "Sumiyati",
    "job_code": "EMPLOYEE",
    "education": "BACHELORS_DEGREE",
    "id_number": "1234567890123456",
    "id_issuing_city": "Surakarta",
    "id_expiry_date": "2017-06-10T00:00:00.000Z",
    "address_street": "Jl. Sultan Hasanudin No. 47-51",
    "address_rt_rw_perum": "RT 06 RW 02",
    "address_kelurahan": "Melawai",
    "address_kecamatan": "Kebayoran Baru",
    "zip_code": "12160",
    "branch_opening_location_code": "JAKARTA_KOTA",
    "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
    "email": "wisnuputra123123@gmail.com",
    "account_type": "RDL",
    "open_account_reason": "INVESTMENTS",
    "source_of_fund": "SALARY",
    "updated": "2019-09-24T07:53:43.505Z",
    "created": "2019-09-24T07:53:39.572Z",
    "account_balance": 0
}

Create New RDL Investor Errors

Error Code Description
DUPLICATE_EXTERNAL_ID_ERROR
409
The external_id entered has been used before. Please enter a unique external_id and try again.
DUPLICATE_ACCOUNT_NUMBER_ERROR
409
The account_number entered has been used before.
ACCOUNT_NOT_FOUND_ERROR
404
RDL investor account is not exist.
ACCOUNT_INACTIVE_ERROR
400
RDL investor account is "tutup"/inactive.
ACCOUNT_CURRENCY_ERROR
400
RDL investor account currency is not supported.
ACCOUNT_CUSTOMER_NAME_ERROR
400
RDL investor account customer name is not match.

Register Existing RDL Investor

Endpoint: Register Existing RDL Investor

POST https://api.instamoney.co/rdl-investors

Register an existing BNI RDL account into your platform, it can be done by adding a valid account_number field in the request body.

Register Existing RDL Investor Request

Example Register Existing RDL Investor Request

curl -X POST \
  https://api.instamoney.co/rdl-investors \
  -u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
  -H 'Content-Type: application/json' \
  -d '{
    "external_id": "investor-126",
    "account_number": "9812366723",
    "last_name": "Doe Du",
    "id_number": "1234567890123456",
    "id_issuing_city": "Jogja",
    "mobile_phone_number": "08123123123",
    "branch_opening_location_code": "YOGYAKARTA",
    "email": "wisnuputra123123@gmail.com",
    "account_type": "RDL",
    "source_of_fund": "SALARY"
}'
Parameter Description
account_number
required
string Account number of your existing RDL, fill this only if you want to register an existing RDL investor account
external_id
required
string Unique ID of the investor.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)_:,.-
Example: ab,cd:ext-id.test_1
title
optional
title Titles to be shown before your name
first_name
optional
string alphabet only First name
middle_name
optional
string alphabet only Middle name
last_name
required
string alphabet and space only Last name. If your Investor does not have a last name / surname, they can fill in whatever name they have here
npwp_number
optional
string Indonesian Tax ID. We encourage Investors to register their NPWP numbers so their RDLs can be more easily identifiable
nationality
optional
string Country code according to ISO3166-1 alpha 2. But currently, only Indonesians (code: ID) can apply for RDLs
domicile_country
optional
string Where the Investor lives for the majority of their time. The format of nationality should follow the ISO3166-1 alpha-2 standard, e.g. ID
religion
optional
religion Religion code of the investor
birth_place
optional
string Place in Indonesia where your Investor was born, e.g. Jakarta Kota, Medan, Surabaya.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space).,'-
Example: Ka'anjan.
birth_date
optional
YYYY-MM-DD Birth date
gender
optional
MALE or FEMALE
marital_status
optional
marital status
mother_maiden_name
optional
string alphabet and space only Maiden name of the Investor’s mother. This information is collected to facilitate easy authentication of your Investor in the event the RDL is disputed.
job_code
optional
job code
education
optional
education
id_number
required
string KTP number only
id_issuing_city
required
string The city which issued your customer’s Identity.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space).,'-
Example: Ka'anjan.
id_expiry_date
optional
YYYY-MM-DD ID expiry date. You can put year 2099 if the ID is an expired EKTP, or if it's a lifetime KTP
address_street
optional
string Domicile street address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: Ka'anjan/Kanjanan (12).
address_rt_rw_perum
optional
stringRT/RW domicile address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: RT 06 / RW 07.
address_kelurahan
optional
stringKelurahan domicile address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: Bromonayu
address_kecamatan
optional
stringKecamatan domicile address.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'-
Example: Setiahati
zip_code
optional
string Zip code
home_phone_number
optional
string Area code and home phone number. Follow this format: xxx-xxxxxx e.g. 021-874012
office_phone_number
optional
string Area code and office phone number. Follow this format: xxx-xxxxxx e.g. 021-874012
mobile_phone_number
required
string Mobile phone number
fax_number
optional
string Area code and fax number. Follow this format: xxx-xxxxxx e.g. 021-874012
branch_opening_location_code
required
branch opening location code This is the BNI branch which your Investor prefers to set up their RDL at
monthly_income_range
optional
monthly income range Monthly income range
email
required
string Your valid email address
account_type
required
account type Account type
open_account_reason
optional
open account reason Reason for opening account
source_of_fund
required
source of fund Source of fund

Register Existing RDL Investor Response

See Investor Resource for parameter details.

Example Register Existing RDL Investor Response

{
    "external_id": "investor-126",
    "account_number": "9812366723",
    "last_name": "Doe Du",
    "id_number": "1234567890123456",
    "id_issuing_city": "Jogja",
    "mobile_phone_number": "08123123123",
    "branch_opening_location_code": "YOGYAKARTA",
    "email": "wisnuputra123123@gmail.com",
    "account_type": "RDL",
    "source_of_fund": "SALARY",
    "id": "d235412-23523-11e9-aeaf-c2d453234",
    "balance": 0,
    "updated": "2019-09-24T07:53:43.505Z",
    "created": "2019-09-24T07:53:39.572Z"
}

Register Existing RDL Investor Errors

Please refer the error in above Create New RDL Investor Errors.

Get RDL Investor by ID

Endpoint: Get RDL Investor by ID

GET https://api.instamoney.co/rdl-investors/{investor_id}

Example Get RDL Investor by ID Request

curl -X GET \
  https://api.instamoney.co/rdl-investors/7ae39cc8-f491-48c7-8253-ff4928bc998c \
  -u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
  -H 'Content-Type: application/json'

Get the RDL details of an existing Investor by using their investor_id (as returned to you in the Create Investor callback under the field id. You can get basic account details and the current balance information of the Investor using this API.

Get RDL Investor by ID Response

See Investor Resource for parameter details.

Example Get RDL Investor Response

{
    "home_phone_number": "021-081111",
    "office_phone_number": "021-091111",
    "mobile_phone_number": "08123123123",
    "fax_number": "0271-08123123",
    "account_status": "PENDING",
    "id": "6bc50b40-dea0-11e9-aeaf-651a8718890e",
    "external_id": "investor-123",
    "title": "BPK",
    "first_name": "Wisnu",
    "middle_name": "Praditya",
    "last_name": "Utama",
    "npwp_number": "012345678901234",
    "nationality": "ID",
    "domicile_country": "ID",
    "religion": "CHRISTIAN",
    "birth_place": "Surakarta",
    "birth_date": "1994-06-10T00:00:00.000Z",
    "gender": "MALE",
    "marital_status": "SINGLE",
    "mother_maiden_name": "Sumiyati",
    "job_code": "EMPLOYEE",
    "education": "BACHELORS_DEGREE",
    "id_number": "1234567890123456",
    "id_issuing_city": "Surakarta",
    "id_expiry_date": "2017-06-10T00:00:00.000Z",
    "address_street": "Jl. Sultan Hasanudin No. 47-51",
    "address_rt_rw_perum": "RT 06 RW 02",
    "address_kelurahan": "Melawai",
    "address_kecamatan": "Kebayoran Baru",
    "zip_code": "12160",
    "branch_opening_location_code": "JAKARTA_KOTA",
    "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
    "email": "wisnuputra123123@gmail.com",
    "account_type": "RDL",
    "open_account_reason": "INVESTMENTS",
    "source_of_fund": "SALARY",
    "account_status": "ACTIVE",
    "account_type": "RDL",
    "cif_number": "49381125087428936000",
    "account_number": "2349283596162630000",
    "created": "2019-02-12T03:47:36.449Z",
    "updated": "2019-02-12T03:47:36.647Z",
    "account_balance": "1000000"
}

Get RDL Investor by ID Errors

Error Code Description
INVESTOR_NOT_FOUND_ERROR
400
Investor not found.

Get RDL Investor by External ID

Endpoint: Get RDL Investor by External ID

GET https://api.instamoney.co/rdl-investors/external-id/{external_id}

Get the RDL details of an existing Investor by using your defined external_id. You can get basic account details and the current balance information of the Investor using this API.

Example: Get RDL Investor by External ID

curl -X GET \
  https://api.instamoney.co/rdl-investors/external-id/investor-123 \
  -u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
  -H 'Content-Type: application/json'

Get RDL Investor by External ID Response

See Investor Resource for parameter details.

Example Get RDL Investor Response

{
    "home_phone_number": "021-081111",
    "office_phone_number": "021-091111",
    "mobile_phone_number": "08123123123",
    "fax_number": "0271-08123123",
    "account_status": "PENDING",
    "id": "6bc50b40-dea0-11e9-aeaf-651a8718890e",
    "external_id": "investor-123",
    "title": "BPK",
    "first_name": "Wisnu",
    "middle_name": "Praditya",
    "last_name": "Utama",
    "npwp_number": "012345678901234",
    "nationality": "ID",
    "domicile_country": "ID",
    "religion": "CHRISTIAN",
    "birth_place": "Surakarta",
    "birth_date": "1994-06-10T00:00:00.000Z",
    "gender": "MALE",
    "marital_status": "SINGLE",
    "mother_maiden_name": "Sumiyati",
    "job_code": "EMPLOYEE",
    "education": "BACHELORS_DEGREE",
    "id_number": "1234567890123456",
    "id_issuing_city": "Surakarta",
    "id_expiry_date": "2017-06-10T00:00:00.000Z",
    "address_street": "Jl. Sultan Hasanudin No. 47-51",
    "address_rt_rw_perum": "RT 06 RW 02",
    "address_kelurahan": "Melawai",
    "address_kecamatan": "Kebayoran Baru",
    "zip_code": "12160",
    "branch_opening_location_code": "JAKARTA_KOTA",
    "monthly_income_range": "GTE_20_AND_LT_50_MILLION",
    "email": "wisnuputra123123@gmail.com",
    "account_type": "RDL",
    "open_account_reason": "INVESTMENTS",
    "source_of_fund": "SALARY",
    "account_status": "ACTIVE",
    "account_type": "RDL",
    "cif_number": "49381125087428936000",
    "account_number": "2349283596162630000",
    "created": "2019-02-12T03:47:36.449Z",
    "updated": "2019-02-12T03:47:36.647Z",
    "account_balance": "1000000"
}

Get RDL Investor by External ID Errors

Error Code Description
INVESTOR_NOT_FOUND_ERROR
400
Investor not found.

RDL Investor Callback

You will receive RDL Investor callback if the investor account_status has changed.

RDL Investor Account Activated Callback

Once your investor has been registered, and the RDL has been activated by the bank, you will receive callback with request body RDL Investore Resource with the following fields filled

RDL Investor Account Activation Failed Callback

If your RDL investor failed to be registered to the bank, you will receive callback with request body RDL Investore Resource with following fields filled

RDL Investor Resource

Field Description
id string The unique ID of the RDL investor you have created, generated by Instamoney
external_id string Unique ID of the investor
title title Titles to be shown before your name
first_name string First name
middle_name string Middle name
last_name string Last name. If your Investor does not have a last name / surname, they can fill in whatever name they have here
npwp_number string Indonesian Tax ID. We encourage Investors to register their NPWP numbers so their RDLs can be more easily identifiable
nationality string Country code according to ISO3166-1 alpha 2. But currently, only Indonesians (code: ID) can apply for RDLs
domicile_country string Where the Investor lives for the majority of their time. The format of nationality should follow the ISO3166-1 alpha-2 standard, e.g. ID
religion religion Religion code of the investor
birth_place string Place in Indonesia where your Investor was born, e.g. Jakarta Kota, Medan, Surabaya
birth_date YYYY-MM-DD Birth date
gender MALE or FEMALE
marital_status marital status
mother_maiden_name string Maiden name of the Investor’s mother. This information is collected to facilitate easy authentication of your Investor in the event the RDL is disputed.
job_code job code
education education
id_number string KTP number only
id_issuing_city string The city which issued your customer’s Identity Card
id_expiry_date YYYY-MM-DD ID expiry date. You can put year 2099 if the ID is an expired EKTP, or if it's a lifetime KTP
address_street string
address_rt_rw_perum string
address_kelurahan string
address_kecamatan string
zip_code string Zip code
home_phone_number string Area code and home phone number. Follow this format: xxx-xxxxxx e.g. 021-874012
office_phone_number string Area code and office phone number. Follow this format: xxx-xxxxxx e.g. 021-874012
mobile_phone_number string Mobile phone number
fax_number string Area code and fax number. Follow this format: xxx-xxxxxx e.g. 021-874012
branch_opening_location_code branch opening location code This is the BNI branch which your Investor prefers to set up their RDL at
monthly_income_range monthly income range Monthly income range
account_type account type Account type
open_account_reason open account reason Reason for opening account
source_of_fund source of fund Source of fund
account_status string The status of the account owned by the Investor.

Possible range of statuses:
PENDING: the transaction to create the account is in progress
ACTIVE: the account is created and active
FAILED: Investor registration failed. see failure_reason field to check the reasons and how to fix
INACTIVE: the account is no longer active
cif_number

will be assigned after the investor's RDL account activated by BNI
string BNI ID for the Investor
account_number

will be assigned after the investor's RDL account activated by BNI
string RDL bank account number
failure_reason

will be assigned if investor's RDL registration is rejected by BNI
failure reason Error code for the investor registration's failure reason

RDL Investor Enums

Investor Failure Reason

Code Description Suggestion
INVALID_ZIP_CODE_ERROR zip_code field is invalid or provided zip_code does not match with the provided address Fix zip_code or address and retry
NPWP_NOT_REGISTERED_ERROR npwp_number field is invalid Ask your customer to come to bank branch to update NPWP number in all of their bank accounts, and then retry after it's done
BANK_DOWNTIME_ERROR Registration happened when bank was on scheduled or unscheduled downtime/maintenance Retry regularly on 1 hour interval
INVALID_LAST_NAME last_name field is invalid, rejected by bank's standard Fix last_name and retry
INVALID_MOTHER_MAIDEN_NAME_ERROR mother_maiden_name field is invalid, rejected by bank's standard Fix mother_maiden_name and retry
INVALID_BIRTH_PLACE_ERROR birth_place field is invalid, rejected by bank's standard Fix birth_place and retry
INCOMPLETE_ADDRESS_ERROR some of address_* field is invalid, rejected by bank's standard Fix address_* fields and retry
INVALID_ID_EXPIRY_DATE_ERROR id_expiry_date field is invalid Fix id_expiry_date and retry. Use year 2099 for lifetime KTP
INACTIVE_CIF_STATUS Bank already has investor's profile prior to this investor creation but his/her CIF has been inactive in bank's database Ask your customer to come to bank branch to activate their CIF, and then retry after the CIF is reactivated
REGISTRATION_REJECTED Bank rejects the registration for other reasons

Also applies for all FAILED registration before 21 July 2020
Check all fields for obvious issues and retry

Investor Name Title

Code Description
BPK Bapak
IBU Ibu
SDR Saudara
SDRI Saudari

Investor Religion

Code Description
ISLAM Islam
CATHOLIC Catholic
CHRISTIAN Christian (Protestant)
BUDDHIST Buddhist
HINDU Hindu
CONFUCIAN Confucian
OTHERS Others

Investor Marital Status

Code Description
SINGLE Lajang (Single)
MARRIED Menikah (Married)
WIDOWER Duda (Widower)
WIDOW Janda (Widow)

Investor Job Code

Code Description
GOVERNMENT_EMPLOYEE Pegawai Negeri
PRIVATE_SECTOR_EMPLOYEE Pegawai Swasta
STATE_OWNED_ENTERPRISE_EMPLOYEE Pegawai BUMN/BUMD
NATIONAL_MILITARY_OR_POLICE_OFFICER TNI/POLRI
BUSINESS_OWNER Pengusaha
TRADER Pedagang
FARMER_OR_FISHERMAN Petani/Nelayan
STUDENT Pelajar/Mahasiswa
HOUSEWIFE Ibu Rumah Tangga
UNEMPLOYED Tidak Bekerja
EMPLOYEE Karyawan / Karyawati
ENTREPRENEUR Wiraswasta
STATE_OFFICIAL Pejabat Negara
ACCOUNTANT Akuntan
LAWYER_OR_NOTARY Pengacara/Notaris
PROFESSION Profesi
RETIREE Pensiunan
PRIVATE_LECTURER_OR_TEACHER Dosen/Guru Swasta
PUBLIC_LECTURER_OR_TEACHER Dosen/Guru Negeri
DOCTOR Dokter
BNI_EMPLOYEE Pegawai BNI
BNI_AFFILIATE_UNIT Unit Afiliasi BNI
OTHERS Lain-lain

Investor Education

Code Description
ELEMENTARY_SCHOOL SD
JUNIOR_HIGH_SCHOOL SMP
HIGH_SCHOOL_OR_EQUIVALENT SMA / Sederajat
ACADEMY_OR_DIPLOMA Akademi / Diploma
BACHELORS_DEGREE S1
MASTERS_DEGREE S2
PHD S3

Investor Branch Opening Location Code

Code Description
JAKARTA_KOTA Jakarta City
BANDUNG Bandung
JAMBI Jambi
YOGYAKARTA Yogyakarta
BANDA_ACEH Banda Aceh
MEDAN Medan
MAKASSAR Makassar
PEKANBARU Pekanbaru
PADANG Padang
PALEMBANG Palembang
SURAKARTA Surakarta
SIBOLGA Sibolga
SEMARANG Semarang
SURABAYA Surabaya
BANJARMASIN Banjarmasin
KRAMAT Kramat
MANADO Manado
CIREBON Cirebon
TANJUNG_PINANG Tanjung Pinang
MAGELANG Magelang
MELAWAI_RAYA Melawai Raya
PONTIANAK Pontianak
TANJUNG_PRIOK Tanjung Priok
BANDAR_LAMPUNG Bandar Lampung
TASIKMALAYA Tasikmalaya
RENGAT Rengat
PURWOKERTO Purwokerto
JEMBER Jember
JL_JEND_SUDIRMAN_BANDUNG Jalan Jendral Sudirman, Bandung
GUNUNG_SITOLI Gunung Sitoli
DENPASAR Denpasar
SAMPIT Sampit
JATINEGARA Jatinegara
MATARAM Mataram
GORONTALO Gorontalo
MEULABOH Meulaboh
AMBON Ambon
TANJUNG_PERAK Tanjung Perak
KUDUS Kudus
CILACAP Cilacap
TEMBILAHAN Tembilahan
SERANG Serang
KUALA_TUNGKAL Kuala Tungkal
BALIKPAPAN Balikpapan
LHOKSEUMAWE Lhokseumawe
TANJUNG_BALAI_KARIMUN Tanjung Balai Karimun
KAWASAN_INDUSTRI_MEDAN Kawasan Industri Medan
BUKITTINGGI Bukittinggi
URIP_SUMOHARJO Urip Sumoharjo
PEKALONGAN Pekalongan
DUMAI Dumai
DUKUH_BAWAH Dukuh Bawah
BOGOR Bogor
SINGARAJA Singaraja
SENAYAN Senayan
TANJUNG_BALAI_ASAHAN Tanjung Balai Asahan
PEMANGKAT Pemangkat
SUMBAWA_BESAR Sumbawa Besar
SELAT_PENJANG Selat Penjang
PARIGI Parigi
MAJALAYA Majalaya
HARMONI Harmoni
KEDUNGDORO_SURABAYA Kedungdoro Surabaya
WONOSOBO Wonosobo
KEBUMEN Kebumen
SUKABUMI Sukabumi
PASAR_MAYESTIK Pasar Mayestik
JEMBATAN_MERAH Jembatan Merah
JL_A_YANI_PADANG Jalan Ahmad Yani, Padang
KENDARI Kendari
TANGERANG Tangerang
SITUBONDO Situbondo
SUMENEP Sumenep
PURBALINGGA Purbalingga
BANJAR Banjar
JL_A_YANI_BANDUNG Jalan Ahmad Yani, Bandung
PADANGSIDEMPUAN Padangsidempuan
GAMBIR Gambir
LANGSA Langsa
BANYUWANGI Banyuwangi
PEMATANG_SIANTAR Pematang Siantar
MENTENG Menteng
KARAWANG Karawang
TEMANGGUNG Temanggung
TERNATE Ternate
PAMEKASAN Pamekasan
PARE_PARE Pare-Pare
SENGKANG Sengkang
GARUT Garut
CIANJUR Cianjur
BIREUN Bireun
KOTAMOBAGU Kotamobagu
JL_IMAM_BONJOL_PADANG Jalan Imam Bonjol, Padang
KETAPANG Katapang
PROBOLINGGO Probolinggo
JEMBATAN_AMPERA_PALEMBANG Jembatan Ampera Palembang
MUSI_PALEMBANG Musi Palembang
KEDIRI Kediri
JL_SUTOMO_MEDAN Jalan Sutomo, Medan
KOTABUMI Kotabumi
BOJONEGORO Bojonegoro
INDRAMAYU Indramyu
MADIUN Madiun
TEBET Tebet
MALANG Malang
JOMBANG Jombang
MOJOKERTO Mojokerto
CILEGON Cilegon
RANGKASBITUNG Rangkasbitung
KOTABARU_PULAU_LAUT Kotabaru Pulau Laut
PECENONGAN Pecenongan
KUNINGAN Kuningan
LUWUK Luwuk
PANGKAL_PINANG Pangkal Pinang
CIAMIS Ciamis
SALATIGA Salatiga
PURWOREJO Purworejo
BITUNG Bitung
PAYAKUMBUH Payakumbuh
TANJUNG_KARANG Tanjung Karang
PATI Pati
JEPARA Jepara
PASAR_PUSAT_PEKANBARU Pasar Pusat Pekanbaru
SIGLI Sigli
SINGKAWANG Singkawang
BANJARBARU Banjarbaru
BALIGE Balige
PANJANG Panjang
KUALA_KAPUAS Kuala Kapuas
BAU_BAU Bau Bau
TEGAL Tegal
ROA_MALAKA Roa Malaka
SUNGAI_PENUH Sungai Penuh
PURWAKARTA Purwakarta
SUMEDANG Sumedang
BEKASI Bekasi
SUBANG Subang
BLITAR Blitar
SAMARINDA Samarinda
TEBING_TINGGI_DELI Tebing Tinggi Deli
TAHUNA Tahuna
BIMA Bima
WONOGIRI Wonogiri
KABANJAHE Kabanjahe
TOLI_TOLI Toli Toli
PENGKALANBUN Pengkalanbun
PALOPO Palopo
LUBUK_LINGGAU Lubuk Linggau
PANGERAN_ANTASARI_BJMS Pangeran Antasari BJMS
KLATEN Klaten
CIKAMPEK Cikampek
PASURUAN Pasuruan
POLEWALI Polewali
KANAKA_MANADO Kanaka Manado
NUNUKAN Nunukan
PALU Palu
KENGKULU Kengkulu
GRESIK Gresik
TARAKAN Tarakan
SLAMET_RIYADI_SOLO Slamet Riyadi Solo
UGM_YOGYA Gadjah Mada University, Yogyakarta
KUPANG Kupang
SIDOARJO Sidoarjo
PANDANSARI_BALIKPAPAN Pandansari Balikpapan
BOOMBARU_PALEMBANG Boombaru Palembang
M_H_THAMRIN Jalan M.H.Thamrin
TANJUNG_REDEB Tanjung Redeb
BONDOWOSO Bondowoso
ITB_BANDUNG Bandung Institute of Technology
DAAN_MOGOT Daan Mogot
KUALA_TANJUNG Kuala Tanjung
TULUNGAGUNG Tulungagung
RAWAMANGUN Rawamangun
KARANGAYU Karangayu
BATAM Batam
MATTOANGIN Mattoangin
FATMAWATI Fatmawati
CEPU Cepu
UNIBRAW_MALANG University of Brawijaya, Malang
UPI_BANDUNG Universitas Pendidikan Indonesia, Bandung
GRAHA_PANGERAN_SURABAYA Graha Pangeran Surabaya
BARABAI Barabai
UNAIR_SURABAYA Universitas Airlangga, Surabaya
JAKARTA_PUSAT Jakarta Pusat
UNDIP_SEMARANG Universitas Diponegro, Semarang
LEGIAN Legian
USU_MEDAN Universitas Sumatera Utara, Medan
JAYAPURA Jayapura
JL_PERINTIS_KEMERDEKAAN Jalan Perintis Kemerdekaan
UNPAD_BANDUNG Padjadjaran University
CIMAHI Cimahi
PONDOK_INDAH_MALL Pondok Indah Mall
UI_DEPOK University of Indonesia, Depok
SEBELAS_MARET_SURAKARTA Sebelas Maret Surakarta
TUBAN Tuban
PALANGKARAYA Palangkaraya
SORONG Sorong
BANGKO Bangko
RANTALI_PRAPAT Rantali Prapat
ENDE Ende
MARGONDA_DEPOK Margonda Depok
PONOROGO Ponorogo
METRO Metro
MAUMERE Maumere
LUMAJANG Lumajang
KAYU_AGUNG Kayu Agung
PRABUMULIH Prabumulih
BATURAJA Baturaja
POSINDO KCP Posindo Bandung
BONTANG Bontang
MANOKWARI Manokwari
BIAK Biak
MERAUKE Merauke
BULUKUMBA Bulukumba
RENON Renon
MUARA_BUNGO Maura Bungo
SOLOK Solok
MUARA_TEWEH Maura Teweh
MAMUJU Mamuju
SINTANG Sintang
KELAPA_GADING Kelapa Gading
BUMI_SERPONG_DAMAI Bumi Serpong Damai
JABABEKA Jababeka
W01_MEDAN To Be Determined
W02_PADANG To Be Determined
W00_PALEMBANG To Be Determined
W04_BANDUNG To Be Determined
W05_SEMARANG To Be Determined
W06_SURABAYA To Be Determined
W07_MAKASSAR To Be Determined
W08_DENPASAR To Be Determined
W09_BANJARMASIN To Be Determined
W10_JAKARTA To Be Determined
W11_MANADO To Be Determined
W12_JAKARTA_KOTA To Be Determined

Investor Monthly Income Range Code

Code Description
LESS_THAN_3_MILLION Monthly income less than IDR 3 mio
GTE_3_AND_LT_5_MILLION Monthly income between IDR 3 mio to 5 mio
GTE_5_AND_LT_10_MILLION Monthly income between IDR 5 to 10 mio
GTE_10_AND_LT_20_MILLION Monthly income between IDR 10 to 20 mio
GTE_20_AND_LT_50_MILLION Monthly income between IDR 20 to 50 mio
GTE_50_AND_LT_100_MILLION Monthly income between IDR 50 to 100 mio
GTE_100_AND_LT_500_MILLION Monthly income between IDR 100 to 500 mio
GREATER_THAN_500_MILLION Monthly income more than IDR 500 mio

Investor Account Type

Code Description
RDL Lender funding account

Investor Open Account Reason

Code Description
INVESTMENTS For investment purposes
SAVINGS For savings purposes
TRANSACTIONS For transactional purposes

Investor Source of Fund

Code Description
SALARY Salary
BUSINESS Business outcome
INVESTMENT Investment outcome
GRANTS Grants/Hibah

RDL Disbursement

Our RDL Disbursements API calls allow you to send funds from a specific RDL to third party accounts for a variety of purposes.

Please note that you are unable to cancel a disbursement request once it has been made.

Create RDL Disbursement

Endpoint: Create RDL Disbursement

POST /rdl-investors/{investor_id}/disbursements

Disburse funds from the selected RDL to another bank account using the endpoint below.

Create RDL Disbursement Request

Example Create RDL Disbursement Request

curl -X POST \
  /rdl-investors/0abbe066-9402-4728-b19e-f703ade7769d/disbursements \
  -u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
  -H 'Content-Type: application/json' \
  -d '{
    "external_id": "rdl-disbursement-951",
    "destination_account_code": "BCA",
    "destination_account_holder_name": "Lingga",
    "destination_account_number": "81232131",
    "description": "test",
    "amount": "10000"
}'
Parameter Description
external_id
required
string Unique ID provided by you, for your own reference, for the fund transfer. Used to identify transactions and reconcile transfers after they have been completed.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)_:,.-
Example: ab,cd:ext-id.test_1
destination_account_code
required
string Instamoney bank code
destination_account_holder_name
required
string Name of the account holder, as per the bank’s records. Used for verification and error/customer support scenarios
Accepted characters a-z,0-9,A-Z; Accepted symbols (space).,'/-
Example: Fa'ni, S.T-09/2017
destination_account_number
required
string Account number of the destination you wish to transfer funds to.
Accepted characters 0-9
Example: 9883456789
description
required
string Description of the fund transfer, set by you.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'#_-
Example: esc-wtdrw-123
amount
required
number Amount of funds you wish to transfer

Maximum limit (BNI, BNI Syariah) No Limit***
Minimum limit (BNI, BNI Syariah) No Limit
Maximum Limit (Other banks) Rp. 25.000.000
Minimum Limit (Other banks) Rp. 10.000


While there is theoretically no maximum transfer limit for transfers to these banks, please note that we may have to report all transaction amounts above IDR 100,000,000 to the financial authorities in Indonesia along with supporting documentation for the underlying transactions.

Please take note that disbursement to non-BNI Bank Account will be charged IDR 6,500 (Interbank transfer fee) automatically from the RDL Account.

Create RDL Disbursement Response

Example Create RDL Disbursement Response

{
    "status": "PENDING",
    "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
    "investor_id": "12312312312",
    "external_id": "rdl-disbursement-951",
    "destination_account_code": "BCA",
    "destination_account_holder_name": "Lingga",
    "destination_account_number": "81232131",
    "amount": "10000",
    "updated": "2019-02-12T05:03:12.426Z",
    "created": "2019-02-12T05:03:12.438Z"
}

See RDL Disbursement for parameter details.

Create RDL Disbursement Errors

Error Code Description
INSUFFICIENT_INVESTOR_BALANCE_ERROR
400
The Investor’s RDL balance has insufficient funds for the specified transfer.
ACCOUNT_CODE_NOT_SUPPORTED_ERROR
400
The code of the destination account is currently not supported.
DUPLICATE_EXTERNAL_ID_ERROR
400
The external_id entered has been used before. Please enter a unique external_id and try again.
INVESTOR_NOT_FOUND_ERROR
400
The investor_id entered cannot be found. Please enter a correct ID.
MINIMUM_TRANSFER_LIMIT_ERROR
400
The amount entered is lower than the minimum amount accepted from destination_account_code. Please enter the accpeted amount range (See RDL Disbursement Resource for parameter details).
MAXIMUM_TRANSFER_LIMIT_ERROR
400
The amount entered is higher than the maxmimum amount accepted from destination_account_code. Please enter the accpeted amount range (See RDL Disbursement Resource for amount details).

Get RDL Disbursement by ID

Endpoint: Get RDL Disbursement by ID

GET /rdl-investors/{investor_id}/disbursements/{id}

Get RDL Disbursement by ID Request

GET an existing RDL Disbursement by entering the id. You can use this endpoint to query details of previous disbursements from the RDL, or to check the current status of an ongoing RDL disbursement before the callback arrives.

Example Get RDL Disbursement by ID Request

curl -X GET \
  /rdl-investors/0abbe066-9402-4728-b19e-f703ade7769d/disbursements/7ae39cc8-f491-48c7-8253-ff4928bc998c \
  -u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
  -H 'Content-Type: application/json'

Get RDL Disbursement by ID Response

Example Get RDL Disbursement by ID Response

{
    "status": "COMPLETED",
    "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
    "investor_id": "12312312312",
    "external_id": "rdl-disbursement-951",
    "destination_account_code": "BCA",
    "destination_account_holder_name": "Lingga",
    "destination_account_number": "81232131",
    "amount": "10000",
    "bank-reference": "bni-7f65eb11-2e83-11e9-b22f-2b4f9440c84b",
    "updated": "2019-02-12T05:03:12.563Z",
    "created": "2019-02-12T05:03:12.438Z"
}

See RDL Disbursement Resource for parameter details.

Get RDL Disbursement Errors

Error Code Description
RDL_DISBURSEMENT_NOT_FOUND_ERROR
400
RDL disbursement not found.

Get RDL Disbursement by External ID

Endpoint: Get RDL Disbursement by External ID

GET /rdl-investors/{investor_id}/disbursements/external-id/{external_id}

GET an existing RDL Disbursement by entering External ID. You can use this endpoint to query details of previous disbursements from the RDL, or to check the current status of an ongoing RDL disbursement before the callback arrives.

Example Get RDL Disbursement External ID Request

curl -X GET \
  /rdl-investors/0abbe066-9402-4728-b19e-f703ade7769d/disbursements/external-id/rdl-disbursement-951 \
  -u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
  -H 'Content-Type: application/json'

Get RDL Disbursement by External ID Response

Example Get RDL Disbursement by External ID Response

{
    "status": "COMPLETED",
    "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
    "investor_id": "12312312312",
    "external_id": "rdl-disbursement-951",
    "destination_account_code": "BCA",
    "destination_account_holder_name": "Lingga",
    "destination_account_number": "81232131",
    "amount": "10000",
    "bank-reference": "bni-7f65eb11-2e83-11e9-b22f-2b4f9440c84b",
    "updated": "2019-02-12T05:03:12.563Z",
    "created": "2019-02-12T05:03:12.438Z"
}

See RDL Disbursement Resource for parameter details.

Get RDL Disbursement Errors

Error Code Description
RDL_DISBURSEMENT_NOT_FOUND_ERROR
400
RDL disbursement not found.

RDL Disbursement Callback

You can receive notifications via a callback whenever the status of a disbursement has changed. You can set your callback URL in the Instamoney Dashboard.

RDL Disbursement Completed Callback

Example RDL Disbursement Completed Callback

{
    "status": "COMPLETED",
    "id": "7f5cc350-2e83-11e9-98dc-d12e9c286a1a",
    "investor_id": "12312312312",
    "external_id": "rdl-disbursement-951",
    "destination_account_code": "BCA",
    "destination_account_holder_name": "Lingga",
    "destination_account_number": "81232131",
    "amount": "10000",
    "bank-reference": "bni-7f65eb11-2e83-11e9-b22f-2b4f9440c84b",
    "updated": "2019-02-12T05:03:12.563Z",
    "created": "2019-02-12T05:03:12.438Z"
}

RDL Disbursement Resource with status COMPLETED and bank_reference filled. You will get this callback once the RDL Disbursement has been successfully disbursed from the RDL to the destination bank account.

RDL Disbursement Failed Callback

Example RDL Disbursement Failed Callback

{
    "status": "FAILED",
    "id": "f81ffc30-2e83-11e9-98dc-d12e9c286a1a",
    "investor_id": "14564564567",
    "external_id": "rdl-disbursement-361",
    "destination_account_code": "BCA",
    "destination_account_holder_name": "Lingga",
    "destination_account_number": "81232131",
    "amount": "100",
    "failure_code": "INVALID_DESTINATION",
    "updated": "2019-02-12T05:06:34.995Z",
    "created": "2019-02-12T05:06:35.195Z"
}

RDL Disbursement Resource with status FAILED and failure_code field. You will get this callback if the RDL disbursement has failed to reach the destination bank account, and after the funds have returned to the RDL in question.

RDL Disbursement Resource

Field Description
id string The unique ID assigned by Instamoney’s system to the RDL disbursement
external_id string A unique ID for your RDL disbursement, set by you (used to identify the disbursement in your system and for reconciliation)
amount number Amount of funds sent to destination bank account (more than 0)
destination_account_code string Code of the destination bank. Refer to our list of supported banks here
destination_account_holder_name string Name of the account holder as per the destination bank’s records.
Accepted characters a-z,0-9,A-Z; Accepted symbols (space).,'/-
Example: Fa'ni, S.T-09/2017
destination_account_number string Destination bank account.
Accepted characters 0-9
Example: 9883456789
number
status string RDL disbursement status

PENDING The disbursement is queued to be sent
COMPLETED The sending bank has confirmed transmission of the disbursement
FAILEDThe sending bank has rejected the disbursement. We will not retry
created ISO date An ISO timestamp that tracks when the RDL disbursement was created
updated ISO date An ISO timestamp that tracks when the RDL disbursement was last updated
failure_code string Failure code of the failed RDL disbursement

INVALID_DESTINATION - The banks have reported that the destination account is unregistered or blocked. If unsure about this, please retry again or contact the destination bank directly regarding the status of the destination account
INSUFFICIENT_BALANCE - The RDL account balance is not sufficient to make disbursement, please ensure the RDL account balance is sufficient
bank_reference string Bank transfer reference of the successful RDL disbursement

Bank Codes

Find the list of bank codes below for the banks we support. We support transfers to 140+ banks in Indonesia, including some BPDs and BPRs, and virtual accounts of major banks (BRI, BNI, and Mandiri). If you would like us to support payment to a specific destination, please contact us at help@instamoney.co.

Bank Bank Code Swift Code
Bank Agroniaga AGRONIAGA AGTBIDJA
Bank Amar Indonesia (formerly Anglomas International Bank) AMAR LOMAIDJ1
Bank ANZ Indonesia ANZ ANZBIDJX
Bank Artha Graha International ARTHA ARTGIDJA
Bank Bisnis Internasional BISNIS_INTERNASIONAL BUSTIDJ1
Bank BJB BJB PDJBIDJA
Bank BJB Syariah BJB_SYR SYJBIDJ1
Bank BNP Paribas BNP_PARIBAS BNPAIDJA
Bank Bukopin BUKOPIN BBUKIDJA
Bank Bumi Arta BUMI_ARTA BBAIIDJA
Bank Capital Indonesia CAPITAL BCIAIDJA
Bank Central Asia (BCA) BCA CENAIDJA
Bank Central Asia (BCA) Syariah BCA_SYR SYCAIDJ1
Bank Chinatrust Indonesia CHINATRUST CTCBIDJA
Bank CIMB Niaga CIMB BNIAIDJA
Bank CIMB Niaga UUS CIMB_UUS SYNAIDJ1
Bank Commonwealth COMMONWEALTH BICNIDJA
Bank Danamon DANAMON BDINIDJA
Bank Danamon UUS DANAMON_UUS SYBDIDJ1
Bank DBS Indonesia DBS DBSBIDJA
Bank Dinar Indonesia DINAR_INDONESIA LMANIDJ1
Bank DKI DKI BDKIIDJA
Bank DKI UUS DKI_UUS SYDKIDJ1
Bank Fama International FAMA FAMAIDJ1
Bank Ganesha GANESHA GNESIDJA
Bank Hana HANA HNBNIDJA
Bank ICBC Indonesia ICBC ICBKIDJA
Bank Ina Perdania INA_PERDANA INPBIDJ1
Bank Index Selindo INDEX_SELINDO BIDXIDJA
Bank Jasa Jakarta JASA_JAKARTA JAJSIDJ1
Bank JTrust Indonesia (formerly Bank Mutiara) JTRUST CICTIDJA
Bank Mandiri MANDIRI BMRIIDJA
Bank Maspion Indonesia MASPION MASDIDJS
Bank Mayapada International MAYAPADA MAYAIDJA
Bank Maybank MAYBANK IBBKIDJA
Bank Maybank Syariah Indonesia MAYBANK_SYR MBBEIDJA
Bank Mayora MAYORA MAYOIDJA
Bank Mega MEGA MEGAIDJA
Bank Mestika Dharma MESTIKA_DHARMA MEDHIDS1
Bank Mizuho Indonesia MIZUHO MHCCIDJA
Bank MNC Internasional MNC_INTERNASIONAL BUMIIDJA
Bank Muamalat Indonesia MUAMALAT MUABIDJA
Bank Multi Arta Sentosa MULTI_ARTA_SENTOSA BMSEIDJA
Bank Nationalnobu NATIONALNOBU LFIBIDJ1
Bank Negara Indonesia (BNI) BNI BNINIDJA
Bank OCBC NISP OCBC NISPIDJA
Bank OCBC NISP UUS OCBC_UUS SYONIDJ1
Bank of America Merill-Lynch BAML BOFAID2X
Bank of China (BOC) BOC BKCHIDJA
Bank of India Indonesia INDIA BKIDIDJA
Bank of Tokyo Mitsubishi UFJ TOKYO BOTKIDJX
Bank Oke Indonesia (formerly Bank Andara) OKE RIPAIDJ1
Bank Panin PANIN PINBIDJA
Bank Panin Syariah PANIN_SYR ARFAIDJ1
Bank Permata PERMATA BBBAIDJA
Bank Permata UUS PERMATA_UUS SYBBIDJ1
Bank QNB Indonesia (formerly Bank QNB Kesawan) QNB_INDONESIA AWANIDJA
Bank Rabobank International Indonesia RABOBANK RABOIDJA
Bank Rakyat Indonesia (BRI) BRI BRINIDJA
Bank Resona Perdania RESONA BPIAIDJA
Bank Royal Indonesia ROYAL ROYBIDJ1
BPD Riau Dan Kepri UUS RIAU_DAN_KEPRI_UUS SYRIIDJ1
Bank Sahabat Sampoerna SAHABAT_SAMPOERNA BDIPIDJ1
Bank SBI Indonesia SBI_INDONESIA IDMOIDJ1
Bank Shinhan Indonesia (formerly Bank Metro Express) SHINHAN MEEKIDJ1
Bank Sinarmas SINARMAS SBJKIDJA
Bank Sinarmas UUS SINARMAS_UUS SYTBIDJ1
Bank Syariah Bukopin BUKOPIN_SYR SDOBIDJ1
Bank Syariah Indonesia BSI BSMDIDJA
Bank Syariah Mega MEGA_SYR BUTGIDJ1
Bank Tabungan Negara (BTN) BTN BTANIDJA
Bank Tabungan Negara (BTN) UUS BTN_UUS SYBTIDJ1
Bank Tabungan Pensiunan Nasional TABUNGAN_PENSIUNAN_NASIONAL BTPNIDJA
Bank UOB Indonesia UOB BBIJIDJA
Bank Victoria Internasional VICTORIA_INTERNASIONAL BVICIDJA
Bank Victoria Syariah VICTORIA_SYR SWAGIDJ1
Bank Woori Indonesia WOORI HVBKIDJA
BPD Aceh ACEH PDACIDJ1
BPD Aceh UUS ACEH_UUS SYACIDJ1
BPD Bali BALI ABALIDBS
BPD Banten (formerly Bank Pundi Indonesia) BANTEN PDBBIDJ1
BPD Bengkulu BENGKULU PDBKIDJ1
BPD Daerah Istimewa Yogyakarta (DIY) DAERAH_ISTIMEWA PDYKIDJ1
BPD Daerah Istimewa Yogyakarta (DIY) UUS DAERAH_ISTIMEWA_UUS SYYKIDJ1
BPD Jambi JAMBI PDJMIDJ1
BPD Jawa Tengah JAWA_TENGAH PDJGIDJ1
BPD Jawa Tengah UUS JAWA_TENGAH_UUS SYJGIDJ1
BPD Jawa Timur JAWA_TIMUR PDJTIDJ1
BPD Jawa Timur UUS JAWA_TIMUR_UUS SYJTIDJ1
BPD Kalimantan Barat KALIMANTAN_BARAT PDKBIDJ1
BPD Kalimantan Barat UUS KALIMANTAN_BARAT_UUS SYKBIDJ1
BPD Kalimantan Selatan KALIMANTAN_SELATAN PDKSIDJ1
BPD Kalimantan Selatan UUS KALIMANTAN_SELATAN_UUS SYKSIDJ1
BPD Kalimantan Tengah KALIMANTAN_TENGAH PDKGIDJ1
BPD Kalimantan Timur KALIMANTAN_TIMUR PDKTIDJ1
BPD Kalimantan Timur UUS KALIMANTAN_TIMUR_UUS SYKTIDJ1
BPD Lampung LAMPUNG PDLPIDJ1
BPD Maluku MALUKU PDMLIDJ1
BPD Nusa Tenggara Barat NUSA_TENGGARA_BARAT PDNBIDJ1
BPD Nusa Tenggara Timur NUSA_TENGGARA_TIMUR PDNTIDJ1
BPD Papua PAPUA PDIJIDJ1
BPD Riau Dan Kepri RIAU_DAN_KEPRI PDRIIDJA
BPD Sulawesi Tengah SULAWESI PDWGIDJ1
BPD Sulawesi Tenggara SULAWESI_TENGGARA PDWRIDJ1
BPD Sulselbar SULSELBAR PDWSIDJ1
BPD Sulselbar UUS SULSELBAR_UUS SYWSIDJ1
BPD Sulut SULUT PDWUIDJ1
BPD Sumatera Barat SUMATERA_BARAT PDSBIDSP
BPD Sumatera Barat UUS SUMATERA_BARAT_UUS SYSBIDJ1
BPD Sumsel Dan Babel SUMSEL_DAN_BABEL BSSPIDSP
BPD Sumsel Dan Babel UUS SUMSEL_DAN_BABEL_UUS SYSSIDJ1
BPD Sumut SUMUT PDSUIDJ1
BPD Sumut UUS SUMUT_UUS SYSUIDJ1
BTPN Syariah (formerly BTPN UUS and Bank Sahabat Purba Danarta) BTPN_SYARIAH PUBAIDJ1
China Construction Bank Indonesia (formerly Bank Antar Daerah and Bank Windu Kentjana International) CCB BWKIIDJA
Citibank CITIBANK CITIIDJX
Deutsche Bank DEUTSCHE DEUTIDJA
Hongkong and Shanghai Bank Corporation (HSBC) UUS HSBC_UUS HSBCIDJA
HSBC Indonesia (formerly Bank Ekonomi Raharja) HSBC HSBCIDJA
JP Morgan Chase Bank JPMORGAN CHASIDJX
Mandiri Taspen Pos (formerly Bank Sinar Harapan Bali) MANDIRI_TASPEN SIHBIDJ1
Prima Master Bank PRIMA_MASTER PMASIDJ1
Standard Chartered Bank STANDARD_CHARTERED SCBLIDJX
Anglomas International Bank ANGLOMAS LOMAIDJ1
Bank Himpunan Saudara 1906 HIMPUNAN_SAUDARA HVBKIDJA
BPD Nusa Tenggara Barat UUS NUSA_TENGGARA_BARAT_UUS SYNBIDJ1

RDL Payment

RDL Payment is the record of payments into the RDL bank account owned by the RDL Investor.

RDL Payment Callback

Example RDL Payment Callback

{
    "status": "SETTLED",
    "id": "83112450-2e79-11e9-95b4-9f8e56f00546",
    "amount": 1000000,
    "account_number": "23429283596162630000",
    "investor_id": "e736f317-d16d-4414-bcd5-92b4ba73a6f4",
    "updated": "2019-02-12T03:51:43.694Z",
    "created": "2019-02-12T03:51:43.637Z",
    "transaction_timestamp": "2019-02-12T03:51:43.637Z"
}

We will send you RDL payment callback with a body RDL Payment Resource when you paid into the RDL bank account.

RDL Payment Resource

Field Description
id string The unique ID assigned by Instamoney’s system to the RDL payment
status string Status of the RDL payment. it will always be SETTLED
amount number The payment amount received by RDL bank account
account_number string The RDL bank account number paid
investor_id string The RDL Investor's id who owns the paid RDL bank account
created ISO date An ISO timestamp that tracks when the RDL payment was created
updated ISO date An ISO timestamp that tracks when the RDL payment was last updated
transaction_timestamp ISO date An ISO timestamp of when your end customer has paid to the RDL bank account, according to bank

Testing RDL Standalone

Step 1: Register

Register on the Instamoney Dashboard https://dashboard.instamoney.co/login

Step 2: Set your callback for testing

Step 3: Create RDL Investor

Scenario Parameters Callback
Activation success case Valid fields entered, except for below cases RDL Account Activated Callbackwith
account_status:ACTIVE
account_number and cif_number filled
Failed due to invalid zip code zip_code: 919191 RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_ZIP_CODE_ERROR
Failed due to NPWP not registered npwp_number: 919191919191919 RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: NPWP_NOT_REGISTERED_ERROR
Failed due to bank downtime / maintenance last_name: bank downtime test case RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: BANK_DOWNTIME_ERROR
Failed due to invalid last name last_name: S E or S T RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_LAST_NAME_ERROR
Failed due to invalid mother maiden name mother_maiden_name: L A RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_MOTHER_MAIDEN_NAME_ERROR
Failed due to invalid birth place birth_place: Kota Invalid RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_BIRTH_PLACE_ERROR
Failed due to invalid address address_street: Jalan Tidak Lengkap RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INCOMPLETE_ADDRESS_ERROR
Failed due to invalid id / ktp expiry date id_expiry_date: any address before today RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_ID_EXPIRY_DATE_ERROR

Step 4: Top Up your RDL Investor Account

Example RDL top up request

POST https://api.instamoney.co/rdl-investors/{investor_id}/testing-topups
{
    "amount": "1000000"
}

Step 5: Create RDL Disbursement

Scenario Parameter Values
Successful RDL Disbursement Any description other than stated in other scenarios below that following request body constraint.
Bank account does not exist
RDL disbursement failed with failure INVALID_DESTINATION
description: invalid destination test

Testing RDL with P2P Escrow

For this step-by step testing, you can download our postman collection here

Step 1: Register

Register on the Instamoney Dashboard https://dashboard.instamoney.co/login

Step 2: Set your account up for testing

Step 3: Create RDL Investor

Scenario Parameters Callback
Activation success case Valid fields entered, except for below cases RDL Account Activated Callbackwith
account_status:ACTIVE
account_number and cif_number filled
Failed due to invalid zip code zip_code: 919191 RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_ZIP_CODE_ERROR
Failed due to NPWP not registered npwp_number: 919191919191919 RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: NPWP_NOT_REGISTERED_ERROR
Failed due to bank downtime / maintenance last_name: bank downtime test case RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: BANK_DOWNTIME_ERROR
Failed due to invalid last name last_name: S E or S T RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_LAST_NAME_ERROR
Failed due to invalid mother maiden name mother_maiden_name: L A RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_MOTHER_MAIDEN_NAME_ERROR
Failed due to invalid birth place birth_place: Kota Invalid RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_BIRTH_PLACE_ERROR
Failed due to invalid address address_street: Jalan Tidak Lengkap RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INCOMPLETE_ADDRESS_ERROR
Failed due to invalid id / ktp expiry date id_expiry_date: any address before today RDL Account Activation Failed Callback with
account_status:FAILED
failure_reason: INVALID_ID_EXPIRY_DATE_ERROR

Step 4: Create Customers for your testing flow

Step 5: Top Up your RDL Investor Account

Example RDL top up request

POST https://api.instamoney.co/rdl-investors/{investor_id}/testing-topups
{
    "amount": "1000000"
}

Step 6: Create Fixed Virtual Accounts with type LOAN for lenders to pay into

Step 7: Topup Escrow LOAN FVA Using RDL

Create an RDL Disbursement request with the account_code and account_number obtained from VA in step 6

Since this is a transfer from RDL into P2P Escrow VA, once the RDL Disbursement is completed, you will receive 3 callbacks:

You can also test failed RDL disbursement into P2P Escrow VA by filling:

Step 8: Create Loan Disbursement

Scenario Parameter Values
Successful loan disbursement Any values other than stated in other scenarios below
Bank account does not exist
Loan disbursement failed with failure INVALID_DESTINATION
bank_code: MANDIRI
account_holder_name: Rizky
account_number: 7654321
Switching network is experiencing downtime
Loan disbursement failed with failure SWITCHING_NETWORK_ERROR
bank_code: MANDIRI
account_holder_name: Siti
account_number: 12121212
Bank networks have rejected the transaction for an unknown reason
Loan disbursement failed with failure UNKNOWN_BANK_NETWORK_ERROR
bank_code: MANDIRI
account_holder_name: Andri
account_number: 987654321
Bank is undergoing unscheduled maintenance
Loan disbursement failed with failure TEMPORARY_BANK_NETWORK_ERROR
bank_code: MANDIRI
account_holder_name: Yono
account_number: 321321321
Transaction has been rejected by the destination bank without a clear error reason
Loan disbursement failed with failure REJECTED_BY_BANK
bank_code: MANDIRI
account_holder_name: Budi
account_number: 8787878
Transaction was rejected because of a fatal error
Loan disbursement failed with failure TRANSFER_ERROR
bank_code: MANDIRI
account_holder_name: Adnin
account_number: 1351357
Transaction failed because of a known temporary issue
Loan disbursement failed with failure TEMPORARY_TRANSFER_ERROR
bank_code: MANDIRI
account_holder_name: Sutiono
account_number: 868686
Description not found
Will return API_VALIDATION_ERROR when creating loan disbursement
Leave description empty
Not enough balance
Will return INSUFFICIENT_BALANCE when creating loan disbursement
Try to create a loan disbursement greater than the balance available in your account
Invalid API key
Will return INVALID_API_KEY when creating loan disbursement
Try using random API key

Step 9: Create Fixed Virtual Accounts with type REPAYMENT for borrowers to pay into

Step 10: Pay into the Fixed Virtual Account with type REPAYMENT

Example testing payment request

POST https://api.instamoney.co/p2p-escrow-virtual-accounts/testing-payments
{
    "external_id": "${external_id}",
    "amount": "12000"
}

If you test in development mode, you can send testing payment request with JSON body

If you test in live mode, you can send real money to the VA number

Step 11: Create a Repayment to update the Lender and Borrower ledgers

Step 12: Create a Withdrawal from Escrow to RDL

Scenario Parameter Values
Successful withdrawal Any values other than stated in other scenarios below
Bank account does not exist
Withdrawal failed with failure INVALID_DESTINATION
bank_code: MANDIRI
account_holder_name: Rizky
account_number: 7654321
Switching network is experiencing downtime
Withdrawal failed with failure SWITCHING_NETWORK_ERROR
bank_code: MANDIRI
account_holder_name: Siti
account_number: 12121212
Bank networks have rejected the transaction for an unknown reason
Withdrawal failed with failure UNKNOWN_BANK_NETWORK_ERROR
bank_code: MANDIRI
account_holder_name: Andri
account_number: 987654321
Bank is undergoing unscheduled maintenance
Withdrawal failed with failure TEMPORARY_BANK_NETWORK_ERROR
bank_code: MANDIRI
account_holder_name: Yono
account_number: 321321321
Transaction has been rejected by the destination bank without a clear error reason
Withdrawal failed with failure REJECTED_BY_BANK
bank_code: MANDIRI
account_holder_name: Budi
account_number: 8787878
Transaction was rejected because of a fatal error
Withdrawal failed with failure TRANSFER_ERROR
bank_code: MANDIRI
account_holder_name: Adnin
account_number: 1351357
Transaction failed because of a known temporary issue
Withdrawal failed with failure TEMPORARY_TRANSFER_ERROR
bank_code: MANDIRI
account_holder_name: Sutiono
account_number: 868686
Description not found
Will return API_VALIDATION_ERROR when creating withdrawal
Leave description empty
Not enough balance
Will return INSUFFICIENT_BALANCE when creating withdrawal
Try to create a withdrawal greater than the balance available in your account
Invalid API key
Will return INVALID_API_KEY when creating withdrawal
Try using random API key

Step 13: Create a Withdrawal from RDL

To withdraw from RDL, use Create an RDL Disbursement

Every RDL disbursement in development mode will be completed, unless you set description as invalid destination test