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:
- 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:
- 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.
- 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. - 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.
- 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_idrequired |
string Unique ID of the investor. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)_:,.- Example: ab,cd:ext-id.test_1 |
titlerequired |
title Titles to be shown before your name |
first_nameoptional |
string alphabet only First name |
middle_nameoptional |
string alphabet only Middle name |
last_namerequired |
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_numberrequired |
string Indonesian Tax ID. We encourage Investors to register their NPWP numbers so their RDLs can be more easily identifiable |
nationalityrequired |
string Country code according to ISO3166-1 alpha 2. But currently, only Indonesians (code: ID ) can apply for RDLs |
domicile_countryrequired |
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 |
religionrequired |
religion Religion code of the investor |
birth_placerequired |
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_daterequired |
YYYY-MM-DD Birth date |
genderrequired |
MALE or FEMALE |
marital_statusrequired |
marital status |
mother_maiden_namerequired |
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_coderequired |
job code |
educationrequired |
education |
id_numberrequired |
string KTP number only |
id_issuing_cityrequired |
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_dateoptional |
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_streetrequired |
string Domicile street address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: Ka'anjan/Kanjanan (12). |
address_rt_rw_perumrequired |
string RT/RW domicile address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: RT 06 / RW 07. |
address_kelurahanrequired |
string Kelurahan domicile address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: Bromonayu |
address_kecamatanrequired |
string Kecamatan domicile address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: Setiahati |
zip_coderequired |
string Zip code |
home_phone_numberoptional |
string Area code and home phone number. Follow this format: xxx-xxxxxx e.g. 021-874012 |
office_phone_numberoptional |
string Area code and office phone number. Follow this format: xxx-xxxxxx e.g. 021-874012 |
mobile_phone_numberrequired |
string Mobile phone number |
fax_numberoptional |
string Area code and fax number. Follow this format: xxx-xxxxxx e.g. 021-874012 |
branch_opening_location_coderequired |
branch opening location code This is the BNI branch which your Investor prefers to set up their RDL at |
monthly_income_rangerequired |
monthly income range Monthly income range |
emailrequired |
string Your valid email address |
account_typerequired |
account type Account type |
open_account_reasonrequired |
open account reason Reason for opening account |
source_of_fundrequired |
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_ERROR409 |
The external_id entered has been used before. Please enter a unique external_id and try again. |
DUPLICATE_ACCOUNT_NUMBER_ERROR409 |
The account_number entered has been used before. |
ACCOUNT_NOT_FOUND_ERROR404 |
RDL investor account is not exist. |
ACCOUNT_INACTIVE_ERROR400 |
RDL investor account is "tutup"/inactive. |
ACCOUNT_CURRENCY_ERROR400 |
RDL investor account currency is not supported. |
ACCOUNT_CUSTOMER_NAME_ERROR400 |
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_numberrequired |
string Account number of your existing RDL, fill this only if you want to register an existing RDL investor account |
external_idrequired |
string Unique ID of the investor. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)_:,.- Example: ab,cd:ext-id.test_1 |
titleoptional |
title Titles to be shown before your name |
first_nameoptional |
string alphabet only First name |
middle_nameoptional |
string alphabet only Middle name |
last_namerequired |
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_numberoptional |
string Indonesian Tax ID. We encourage Investors to register their NPWP numbers so their RDLs can be more easily identifiable |
nationalityoptional |
string Country code according to ISO3166-1 alpha 2. But currently, only Indonesians (code: ID ) can apply for RDLs |
domicile_countryoptional |
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 |
religionoptional |
religion Religion code of the investor |
birth_placeoptional |
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_dateoptional |
YYYY-MM-DD Birth date |
genderoptional |
MALE or FEMALE |
marital_statusoptional |
marital status |
mother_maiden_nameoptional |
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_codeoptional |
job code |
educationoptional |
education |
id_numberrequired |
string KTP number only |
id_issuing_cityrequired |
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_dateoptional |
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_streetoptional |
string Domicile street address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: Ka'anjan/Kanjanan (12). |
address_rt_rw_perumoptional |
string RT/RW domicile address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: RT 06 / RW 07. |
address_kelurahanoptional |
string Kelurahan domicile address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: Bromonayu |
address_kecamatanoptional |
string Kecamatan domicile address. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'- Example: Setiahati |
zip_codeoptional |
string Zip code |
home_phone_numberoptional |
string Area code and home phone number. Follow this format: xxx-xxxxxx e.g. 021-874012 |
office_phone_numberoptional |
string Area code and office phone number. Follow this format: xxx-xxxxxx e.g. 021-874012 |
mobile_phone_numberrequired |
string Mobile phone number |
fax_numberoptional |
string Area code and fax number. Follow this format: xxx-xxxxxx e.g. 021-874012 |
branch_opening_location_coderequired |
branch opening location code This is the BNI branch which your Investor prefers to set up their RDL at |
monthly_income_rangeoptional |
monthly income range Monthly income range |
emailrequired |
string Your valid email address |
account_typerequired |
account type Account type |
open_account_reasonoptional |
open account reason Reason for opening account |
source_of_fundrequired |
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_ERROR400 |
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_ERROR400 |
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
account_status
:ACTIVE
account_number
: Filled with the created RDL account numbercif_number
: Filled by bank's CIF number
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
account_status
:FAILED
failure_reason
: Filled with the RDL investor registration failure reason error code
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 progressACTIVE : the account is created and activeFAILED : Investor registration failed. see failure_reason field to check the reasons and how to fixINACTIVE : the account is no longer active |
cif_numberwill be assigned after the investor's RDL account activated by BNI |
string BNI ID for the Investor |
account_numberwill be assigned after the investor's RDL account activated by BNI |
string RDL bank account number |
failure_reasonwill 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_idrequired |
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_coderequired |
string Instamoney bank code |
destination_account_holder_namerequired |
string Name of the account holder, as per the bank’s records. Used for verification and error/customer support scenariosAccepted characters a-z,0-9,A-Z; Accepted symbols (space).,'/- Example: Fa'ni, S.T-09/2017 |
destination_account_numberrequired |
string Account number of the destination you wish to transfer funds to. Accepted characters 0-9 Example: 9883456789 |
descriptionrequired |
string Description of the fund transfer, set by you. Accepted characters a-z,0-9,A-Z; Accepted symbols (space)/():;.,'#_- Example: esc-wtdrw-123 |
amountrequired |
number Amount of funds you wish to transfer
|
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_ERROR400 |
The Investor’s RDL balance has insufficient funds for the specified transfer. |
ACCOUNT_CODE_NOT_SUPPORTED_ERROR400 |
The code of the destination account is currently not supported. |
DUPLICATE_EXTERNAL_ID_ERROR400 |
The external_id entered has been used before. Please enter a unique external_id and try again. |
INVESTOR_NOT_FOUND_ERROR400 |
The investor_id entered cannot be found. Please enter a correct ID. |
MINIMUM_TRANSFER_LIMIT_ERROR400 |
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_ERROR400 |
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_ERROR400 |
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_ERROR400 |
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: 9883456789number |
status | string RDL disbursement statusPENDING The disbursement is queued to be sentCOMPLETED The sending bank has confirmed transmission of the disbursementFAILED The 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
After clicking the "Activate P2P Escrow for testing" button, you can set your callback URLs by pressing "Save and Test Callback" button.
Tips: you can use a free web request bucket like https://webhook.site for testing when you don't have server yet
In RDL section
RDL Investor Account Activated Callback URLs
RDL Disbursement Callback URLs
RDL Payment Callback URLs
Obtain your development API key in https://dashboard.instamoney.co/security
Step 3: Create RDL Investor
API endpoint:
https://api.instamoney.co/rdl-investors
For RDL Investor creation, you can test with these scenarios
Scenario | Parameters | Callback |
---|---|---|
Activation success case | Valid fields entered, except for below cases | RDL Account Activated Callbackwithaccount_status :ACTIVE account_number and cif_number filled |
Failed due to invalid zip code | zip_code : 919191 |
RDL Account Activation Failed Callback withaccount_status :FAILED failure_reason : INVALID_ZIP_CODE_ERROR |
Failed due to NPWP not registered | npwp_number : 919191919191919 |
RDL Account Activation Failed Callback withaccount_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 withaccount_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 withaccount_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 withaccount_status :FAILED failure_reason : INVALID_MOTHER_MAIDEN_NAME_ERROR |
Failed due to invalid birth place | birth_place : Kota Invalid |
RDL Account Activation Failed Callback withaccount_status :FAILED failure_reason : INVALID_BIRTH_PLACE_ERROR |
Failed due to invalid address | address_street : Jalan Tidak Lengkap |
RDL Account Activation Failed Callback withaccount_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 withaccount_status :FAILED failure_reason : INVALID_ID_EXPIRY_DATE_ERROR |
- You can also test to see what kind of Error Codes you can receive when creating Investors.
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"
}
If you test in development mode, you can send testing payment request with JSON body
amount
of the payment simulation
If you test in live mode, you can send real money to the RDL investor's bank
account_number
Once payment detected, you will receive an RDL Payment Callback
Step 5: Create RDL Disbursement
API endpoint:
https://api.instamoney.co/rdl-investors/{investor_id}/disbursements
Send a Create RDL Disbursement request to this endpoint to test creating a disbursement
When a RDL Disbursement has been successfully created and disbursed out to the targetted account number, you will receive a callback with status
COMPLETED
When a RDL Disbursement has been successfully created but the disbursement to the end borrower fails, you will receive a callback with status
FAILED
. Afailure_code
will be provided in the callback that explains the error (more details here: https://instamoney.github.io/dashboard-docs/errors.html)See below for a list of success/failure scenarios and how to test them in development mode
Scenario | Parameter Values |
---|---|
Successful RDL Disbursement | Any description other than stated in other scenarios below that following request body constraint. |
Bank account does not existRDL 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
Activate escrow testing by clicking on "Activate P2P Escrow for testing" button in https://dashboard.instamoney.co/configuration-setting section P2P Escrow. or else, you will get
AUTHORIZATION_ERROR
After clicking the "Activate P2P Escrow for testing" button, you can set your callback URLs by pressing "Save and Test Callback" button.
Tips: you can use a free web request bucket like https://webhook.site for testing when you don't have server yet
In P2P Escrow section
Escrow Fixed Virtual Account Activated Callback URLs
Escrow Fixed Virtual Account Payment Callback URLs
Loan Disbursement Callback URLs
Escrow Withdrawal Callback URLs
Repayment Callback URLs
In RDL section
RDL Investor Account Activated Callback URLs
RDL Disbursement Callback URLs
RDL Payment Callback URLs
Obtain your development API key in https://dashboard.instamoney.co/security
- If you test using our postman collection, assign the API key into an environment variable called
api-key
- If you test using our postman collection, assign the API key into an environment variable called
Step 3: Create RDL Investor
API endpoint:
https://api.instamoney.co/rdl-investors
For RDL Investor creation, you can test with these scenarios
Scenario | Parameters | Callback |
---|---|---|
Activation success case | Valid fields entered, except for below cases | RDL Account Activated Callbackwithaccount_status :ACTIVE account_number and cif_number filled |
Failed due to invalid zip code | zip_code : 919191 |
RDL Account Activation Failed Callback withaccount_status :FAILED failure_reason : INVALID_ZIP_CODE_ERROR |
Failed due to NPWP not registered | npwp_number : 919191919191919 |
RDL Account Activation Failed Callback withaccount_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 withaccount_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 withaccount_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 withaccount_status :FAILED failure_reason : INVALID_MOTHER_MAIDEN_NAME_ERROR |
Failed due to invalid birth place | birth_place : Kota Invalid |
RDL Account Activation Failed Callback withaccount_status :FAILED failure_reason : INVALID_BIRTH_PLACE_ERROR |
Failed due to invalid address | address_street : Jalan Tidak Lengkap |
RDL Account Activation Failed Callback withaccount_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 withaccount_status :FAILED failure_reason : INVALID_ID_EXPIRY_DATE_ERROR |
You can also test to see what kind of Error Codes you can receive when creating Investors.
You need an
ACTIVE
investor to continue testing next steps
Step 4: Create Customers for your testing flow
API endpoint:
https://api.instamoney.co/p2p-customers
Send a Create Customer request to this endpoint to test creating customer objects for your borrowers and lenders. For testing, you need at least 1 lender and 1 borrower. If entered validly, a success response will be received
When creating lender, put RDL Investor's account details as the preferred bank account
You can also test to see what kind of Error Codes you can receive when creating Customers.
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"
}
If you test in development mode, you can send testing payment request with JSON body
amount
of the payment simulation
If you test in live mode, you can send real money to the RDL investor's bank
account_number
Once payment detected, you will receive an RDL Payment Callback
Step 6: Create Fixed Virtual Accounts with type LOAN for lenders to pay into
API endpoint:
https://api.instamoney.co/p2p-escrow-virtual-accounts
Send a Create Fixed Virtual Account request to this endpoint to create virtual accounts for your lenders to prefund their balance.
Set the
payment_type
toLOAN
to identify these virtual accounts as Loan virtual accounts - this is important to differentiate virtual accounts created for the purposes of lenders funding, from those created for borrowers making repaymentsCheck your Callback URL. If you have sent a valid request, you should receive a Fixed Virtual Account Activated callback with the status
ACTIVE
.
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:
P2P Fixed VA Payment Settling Callback, followed by
You can also test failed RDL disbursement into P2P Escrow VA by filling:
- set
description
asinvalid destination test
Step 8: Create Loan Disbursement
API endpoint:
https://api.instamoney.co/p2p-loan-disbursements
Send a Create Loan Disbursement request to this endpoint to test creating a loan
You can test creating a loan that is funded by 1 lender, or 2 lenders, by changing the fields under
lenders
in the Create Loan Disbursement requestWhen a Loan Disbursement is successfully created (but still in the process of sending out), you will receive a callback with status
DISBURSING
When a Loan Disbursement has been successfully created and disbursed out to the end borrower, you will receive a callback with status
COMPLETED
When a Loan Disbursement has been successfully created but the disbursement to the end borrower fails, you will receive a callback with status
FAILED
. Afailure_code
will be provided in the callback that explains the error (more details here: https://instamoney.github.io/dashboard-docs/errors.html)See below for a list of success/failure scenarios and how to test them in development mode
Scenario | Parameter Values |
---|---|
Successful loan disbursement | Any values other than stated in other scenarios below |
Bank account does not existLoan disbursement failed with failure INVALID_DESTINATION |
bank_code: MANDIRI account_holder_name: Rizky account_number: 7654321 |
Switching network is experiencing downtimeLoan 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 reasonLoan disbursement failed with failure UNKNOWN_BANK_NETWORK_ERROR |
bank_code: MANDIRI account_holder_name: Andri account_number: 987654321 |
Bank is undergoing unscheduled maintenanceLoan 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 reasonLoan disbursement failed with failure REJECTED_BY_BANK |
bank_code: MANDIRI account_holder_name: Budi account_number: 8787878 |
Transaction was rejected because of a fatal errorLoan disbursement failed with failure TRANSFER_ERROR |
bank_code: MANDIRI account_holder_name: Adnin account_number: 1351357 |
Transaction failed because of a known temporary issueLoan 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
API endpoint:
https://api.instamoney.co/p2p-escrow-virtual-accounts
Send a Create Fixed Virtual Account request to this endpoint to create a virtual account for your borrower to repay the loan
Set the
payment_type
torepayment
to identify this virtual account as a Repayment virtual accountAs this is a repayment Virtual Account, you’ll need to enter the
loan_id
of the Loan you created earlier to make payment for itCheck your Callback URL. If you have sent a valid request, you should receive a Fixed Virtual Account Activated callback with the status
ACTIVE
If you enter a
loan_id
that does not exist, you will receive aINVALID_LOAN_ID
error
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
external_id
of the fixed VAamount
of the payment simulation
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
API endpoint:
https://api.instamoney.co/p2p-repayments
Send a Create Repayment request to this endpoint
A successful Create Repayment request will return a response stating the updated ledger balances of the borrower and lender(s)
Step 12: Create a Withdrawal from Escrow to RDL
API endpoint:
https://api.instamoney.co/p2p-withdrawals
Send a Create Withdrawal request to this endpoint to test creating a Withdrawal. Use the RDL Investor's
account_number
withaccount_code
BNI to withdraw to an RDL Investor's bank accountWhen a Withdrawal is successfully created (but still in the process of sending out), you will receive a callback with status
DISBURSING
When a Withdrawal from Escrow to RDL has been successfully disbursed, you will receive these callbacks:
When a Withdrawal has been successfully created but the disbursement fails, you will receive a callback with status “FAILED”. A
failure_code
will be provided in the callback that explains the error (more details here: https://instamoney.github.io/dashboard-docs/errors.html)See below for a list of success/failure scenarios and how to test them in development mode
Scenario | Parameter Values |
---|---|
Successful withdrawal | Any values other than stated in other scenarios below |
Bank account does not existWithdrawal failed with failure INVALID_DESTINATION |
bank_code: MANDIRI account_holder_name: Rizky account_number: 7654321 |
Switching network is experiencing downtimeWithdrawal 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 reasonWithdrawal failed with failure UNKNOWN_BANK_NETWORK_ERROR |
bank_code: MANDIRI account_holder_name: Andri account_number: 987654321 |
Bank is undergoing unscheduled maintenanceWithdrawal 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 reasonWithdrawal failed with failure REJECTED_BY_BANK |
bank_code: MANDIRI account_holder_name: Budi account_number: 8787878 |
Transaction was rejected because of a fatal errorWithdrawal failed with failure TRANSFER_ERROR |
bank_code: MANDIRI account_holder_name: Adnin account_number: 1351357 |
Transaction failed because of a known temporary issueWithdrawal 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