Introduction
Instamoney’s mission is to build payments infrastructure that is easy, fast, secure, reliable and accessible from all around Indonesia. We provide simple APIs which you can use to send money to all banks in Indonesia quickly and securely.
Instamoney API is organized around REST. We use built-in HTTP features and HTTP verbs and we return all responses in JSON.
Remittance Overview
Use the Remittance API to transfer funds instantly to any bank in Indonesia at any time, including holidays and weekends. Due to restrictions from the banks, we’re unable to disburse when the bank channel are offline or when they fail.
The remittance flow is as follows:
-
Prefund your Instamoney account balance
-
Create a customer which represents the sender, and a customer which represents the recipient of the remittance. You’ll get an id for each
-
Create a remittance, attaching ids of the sender and recipient
-
We run this remittance through our risk-scoring system. If necessary, our compliance team will contact you for additional verification of information
-
We process the remittance and return a callback with the status of the remittance. You may also query the status of a remittance anytime via the Get Remittance API
Getting Started
Set Up Your Account
To use our Remittance APIs, register for an Instamoney account by contacting your account manager or our support team.
You can start testing our APIs immediately in development environment. When you are ready to process live transactions, contact your account manager to go live.
Retrieve Your API Key
We provide unique API keys for development and production environments. You can retrieve these from your Dashboard. Your API keys should be kept private, so do not share your secret API keys.
To successfully authenticate with Instamoney's API, you must append a colon and Base 64 encode the API key. All API requests should be made over HTTPS instead of HTTP (all calls made over plain HTTP will fail).
Set your callback URL
Before trying out our API, please set your callback URL via the Dashboard. Put your callback url in the field and click Test to verify the url. Once your url is verified, you can click Save to proceed.
Start testing!
You may test our APIs by sending requests in the development environment--You will automatically get IDR 1,000,000,000 in your development account balance for testing. Requests made in the development environment will not hit the banking networks and will not cost you anything.
Postman Collection
The easiest way to get started using our API is to use our Postman Collection. Postman is a free client application that enables you to make calls to APIs easily. To make integrating with our APIs easier, we've created a Postman Collection of our endpoints so that you can test our APIs more easily.
The following is an outline of actions to get started with Postman.
-
Install Postman.
-
Download our Postman collection.
-
Open Postman and Import the Instamoney API Postman Collection.
-
Set up the collection’s Authorization header.
a. Under the Authorization tab of each folder, the default authorization type is set to “Inherit auth from parent”. The “Inherit auth from parent” setting indicates that every request in the folder by default uses the authorization type from the parent.
b. Edit the Instamoney API collection.
c. Under “Authorization”, paste your secret API key into the Username. Use your Development Key to test in the development environment, and your Live Key to send live transactions.
d. Click Update.
e. This authorization key will be automatically used for each request in the collection.
-
Try getting your balance.
a. Click on the Balances folder and click Get Balances.
b. Hit the blue Send button.
c. In the response area, you should get your latest cash balance.
-
If you can query your balance successfully, you’re all set up! Feel free to explore our other APIs by selecting it in the collection and launching it.
Errors
Your Instamoney integration might have to deal with errors at some point when making API requests to Instamoney. These errors fall into a few major categories:
- Content errors occur because the content in the API request was invalid in some way. They return an HTTP response with a
4xx
error code. For example, the API servers might return a401
if an invalid API key was provided, or a400
if a required parameter was missing - Network errors occur as a result of intermittent communication problems between client and server. They return low-level errors, like socket or timeout exceptions. For example, a client might time out while trying to read from Instamoney's servers, or an API response might never be received because a connection terminates prematurely. Note that a network errors wouldn't necessarily have otherwise been a successful request --- it can also be another type of error that's been cloaked by an intermittent problem
- Server errors occur because of a problem on Instamoney's servers. Server errors return an HTTP response with a
5xx
error code. Instamoney works to make these errors as rare as posslble, but integrations should be able to handle them when they do arise
The right approach and idempotency semantics to use for handling errors depend on the type of error being handled.
HTTP Status Code
Instamoney uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx
range indicate success. Codes in the 4xx
range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, etc). Codes in the 5xx
range indicate an error with Instamoney's servers (these are rare).
Status Code | Description |
---|---|
200 - OK | Everything worked as expected |
400 - Bad Request | The request was unacceptable, often due to missing a required parameter |
401 - Unauthorized | No valid API key provided |
403 - Forbidden | The API key doesn't have permissions to perform the request |
404 - Not Found | The requested resources doesn't exist |
500 - Server Errors | Something went wrong on Instamoney's end (These are rare). |
Error Code
Below are some of most common errors across all our endpoints. Specific errors are located under each endpoint.
Error Code | Description |
---|---|
API_VALIDATION_ERROR | Invalid request errors arise when your request has invalid parameters |
INVALID_API_KEY | No valid API key provided |
REQUEST_FORBIDDEN |
The API key doesn't have permissions to perform the request |
SERVER_ERROR | API errors cover any other type of problem (e.g. a temporary problem with Instamoney's servers), and are extremely uncommon. Client should treat the result of 5xx errors as indeterminate. If this was a response to a request to send money, please check the status of the resource before retrying to ensure request will not be processed twice. Contact us for more information |
Error Handling
Content errors
Content errros are the result of the contents of an API request being invalid and return a 4xx
error code. Integrations should correct the original request and try again. Depending of the type of user error, it may be possible to handle the problem programmatically.
For a POST
operation using an idempotency key, as long as an API method began execution, Instamoney's API servers will cache the results of the request regardless of what they were. A request that returns a 400
will send back the same 400
if followed by a new request with the same idempotency key. A fresh idempotency key should be generated when modifying the original request to get a successful result. The safest strategy where 4xx
errors are concerned is to always generate a new idempotency key.
Network errors
Network errors are the result of connectivity problems between client and server and tend to manifest as low-level errors like socket or timeout exceptions.
This class of errors is where the value of idempotency keys and request retries is most obvious. When intermittent problems occur, clients are usually left in a state where they don't know whether or not the server received the request. To get a definitive answer, they should retry such requests with the same idempotency keys and the same parameters until they're able to receive a result from the server. Sending the same idempotency with different parameters will produce an error indicating that the new request didn't match the original.
Server errors
Server errors are the result of a server-side problem and return a 5xx
error code. These errors are the most difficult to handle, so we try to ensure that they happen as infrequently as possible.
As with the errors, retrying them with the same idempotency key will usually produce the same result. The request can be retried with a new idempotency key, but we'd advice against it because it's possible for the original one to have produced side effects.
The result of a 500
request should be treated as indeterminate. The exact nature of any retroactive changes in the system depend heavily on the type of request. For example, if creating a disbursement returns a 500
error but we detect that the information has gone out to a payment network, we'll try to roll it forward and send callback after it has been completed. If not, we'll try to roll it back. However, ideal results under these circumstances are not guaranteed, and requests resulting in a 500
error may proeduce user-visible side effects.
Integration that want to maximize robustness must configure callback handlers that are capable of receiving events that have never been seen in an API response.
Balances
Prefunding your Balance
Your balance refers to stored value in your Instamoney account which can be sent out in remittances or withdrawn. Before you do any remittances, you will first have to add to your account balance ("prefund"). You can do this by transferring funds to Instamoney's bank accounts. You can see Instamoney's bank account details in your Dashboard. After you have transferred the funds, please save the proof of transfer.
If prefunding from i) a BCA account to Instamoney’s BCA account, or ii) a Mandiri account to Instamoney’s Mandiri account, the balance should be detected and updated in your dashboard in 15 minutes. If prefunding from other banks, please contact our support team with the proof of transfer to complete the prefund.
Get Balance
Retrieves your account balance. There are two balances: CASH
refers to funds available for you to remit or withdraw. HOLDING
refers to funds which are in transit.
GET https://api.instamoney.co/balance?account_type={account_type}
Get Balance Request
Example Get Balance Request
curl https://api.instamoney.co/balance -X GET \
-u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==:
Parameter | Description |
---|---|
account_type optional default: CASH |
string The selected account type (CASH or HOLDING ). |
Get Balance Response
Example Get Balance Response
{
"balance": 1241231
}
Parameter | Description |
---|---|
balance | The balance remaining in your cash account |
Customers
Customers are your end-customers, which include the sender and recipient of a remittance. You can perform recurring remittances with the same customers.
Use the following Customers API to manage your customers with Instamoney. Your customers’ personal data is retained to comply with regulatory requirements for fund transfer services in Indonesia, and also allows Instamoney to fulfill Know-Your-Client obligations.
Create Customer
Creates a new customer
Endpoint: Create Customer
POST https://api.instamoney.co/customers
Create Customer Request
Example Create Customer Request
curl https://api.instamoney.co/customers -X POST \
-H 'Content-Type: application/json' \
-u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
--data '
{
"external_id": "r-1234",
"customer_type": "INDIVIDUAL",
"given_name": "Ichwano",
"surname": "Sembo",
"address": {
"country_code": "ID",
"province": "DKI Jakarta",
"city": "Jakarta Selatan",
"line_1": "Jl. Senayan 1 No.15"
},
"date_of_birth": "11-01-1990",
"identification": {
"ktp_number": "0987654321320987",
"npwp_number": "098765432132098"
},
"account_details": {
"account_code": "BNI",
"account_number": "123456780",
"account_holder_name": "Ichwano"
},
"email": "ichwano@email.com",
"mobile_number": "+628111555777",
"phone_number": "+622199990000"
}
'
Parameter | Description |
---|---|
external_idrequired |
string Your unique id for this customer
|
customer_typerequired |
string Legal entity. Valid values: INDIVIDUAL or BUSINESS |
given_nameconditionally required |
string Given name(s). Required if customer_type is INDIVIDUAL . Only allowed if customer_type is INDIVIDUAL |
surnameoptional |
string Surname or family name, if applicable. Only allowed if customer_type is INDIVIDUAL |
business_nameconditionally required |
string Required if customer_type is BUSINESS . Only allowed if customer_type is BUSINESS |
addressoptional |
object Customer's address |
address.country_coderequired |
string Customer’s country. 2-letter ISO 3166-2 country code. Refer to code standard here. If customer_type is BUSINESS , the country in which the corporate entity is registered. If customer_type is INDIVIDUAL , a country in which the customer holds nationality |
address.stateoptional |
string Customer’s state |
address.provinceoptional |
string Customer’s province |
address.cityoptional |
string Customer’s city |
address.suburboptional |
string Customer’s suburb |
address.postal_codeoptional |
string Customer’s postal code |
address.line_1optional |
string First line of customer’s address. Typically used for building name and / or apartment number |
address.line_2optional |
string Second line of customer’s address. Typically used for street name and building number |
date_of_birthoptional |
string Date of Birth. Only allowed if customer_type is INDIVIDUAL . ISO 8601 format YYYY-MM-DD |
date_of_registrationoptional |
string Date of Registration. Only allowed if customer_type is BUSINESS . ISO 8601 format YYYY-MM-DD |
identificationoptional |
object A legal document that verifies the identity of the customer
|
identification.ktp_numberoptional |
string Kartu Tanda Penduduk (national identity card number) of the customer.Only allowed if customer_type is INDIVIDUAL
|
identification.npwp_numberoptional |
string Nomor Pokok Wajib Pajak (tax number) of the customerOnly allowed if customer_type is INDIVIDUAL
|
identification.drivers_licenseoptional |
string Surat Izin Mengemudi (driver’s licence) number of the customerOnly allowed if customer_type is INDIVIDUAL
|
identification.passport_numberoptional |
string Passport number of the customer.Only allowed if customer_type is INDIVIDUAL If provided, should provide passport_country . In the case of multiple passports, please choose the passport of the country closest to Indonesia |
identification.passport_countryconditionally required |
string Passport country of the customer. Only allowed if customer_type is INDIVIDUAL . 2-letter ISO 3166-2 country code. Refer to code standard here. Required ifpassport_number is provided. |
identification.business_tax_idoptional |
string Tax identification number of the business in its country of registration.Examples: - Nomor Pokok Wajib Pajak for indonesian businesses - Business Registration number for Hong Kong businesses - Unique Entity Number for Singaporean businesses Only allowed if customer_type is BUSINESS . If provided, should provide business_tax_id_country . |
identification.business_tax_id_countryconditionally required |
string Country for tax identification number of the business.Only allowed if customer_type is BUSINESS . 2-letter ISO 3166-2 country code. Refer to code standard here. Required if business_tax_id is provided |
account_detailsoptional |
object Customer’s bank account details |
account_details.account_codeoptional |
string The code of the account, can be bank codes (BCA, MANDIRI, etc.) or ewallet codes (GOPAY, OVO, etc.). Only Indonesian banks and ewallets supported currently. See Account Codes |
account_details.account_numberoptional |
string Destination bank account number. If disbursing to an e-wallet, phone number registered with the e-wallet account.
|
account_details.account_holder_nameoptional |
string Name of account holder per the bank's or e-wallet's records
|
emailoptional |
string Customer’s email address. Recommended if you want to notify the customer of the transaction statusShould include the top-level domain name Example: abc@email.com |
mobile_numberoptional |
string Customer’s mobile number with international prefix. Recommended if you want to notify the customer of the transaction statusExample: +62812XXXXXX |
phone_numberoptional |
string Customer’s land line or alternate phone number with international prefixExample: +6221XXXXXXXX |
Create Customer Response
We return a customer object if the call succeeded.
Example Create Customer Response
{
"id": "5c1774e76966b43a5b8198fb",
"external_id": "r-1234",
"customer_type": "INDIVIDUAL",
"given_name": "Ichwano",
"surname": "Sembo",
"address": {
"country_code": "ID",
"province": "DKI Jakarta",
"city": "Jakarta Selatan",
"line_1": "Jl. Senayan 1 No.15"
},
"date_of_birth": "11-01-1990",
"identification": {
"ktp_number": "0987654321320987",
"npwp_number": "098765432132098"
},
"account_details": {
"account_code": "BNI",
"account_number": "123456780",
"account_holder_name": "Ichwano"
},
"email": "ichwano@email.com",
"mobile_number": "+628111555777",
"phone_number": "+622199990000",
"created": "2018-12-12T13:50:12.000Z",
"updated": "2018-12-12T13:50:12.000Z"
}
Create Customer Errors
Error Code | Description |
---|---|
API_VALIDATION_ERROR400 |
Inputs are failing validation. The errors field contains details about which fields are violating validation |
INVALID_JSON_FORMAT400 |
The request body is not a valid JSON format |
ACCOUNT_CODE_NOT_SUPPORTED_ERROR400 |
The code of the account is currently not supported |
ACCOUNT_NUMBER_ERROR400 |
Where account_code is “BCA”, account_number input needs to be 10 digits. Please check the account number length before retrying. |
DUPLICATE_CUSTOMER_ERROR400 |
The external_id entered has been used before. Please enter a unique external_id and try again |
ACCOUNT_BLACKLISTED_ERROR400 |
We return this error if the account in question has been blacklisted |
SERVER_ERROR500 |
Server is unable to process the request. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
BAD_GATEWAY502 |
Server receives an error or invalid response from another server. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
GATEWAY_TIMEOUT504 |
Server's gateway didn't receive a timely response from another server and experienced timeout. This means your request might or might not have been processed. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
Update Customer
Updates an existing customer
Endpoint: Update Customer
PUT https://api.instamoney.co/customers/:id
Update Customer Request
Example Update Customer Request
curl https://api.instamoney.co/customers/5c1774e76966b43a5b8198fb -X PUT \
-H 'Content-Type: application/json' \
-u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
--data '{
{
"given_name": "Ahmad",
"surname": "Shahab",
"phone_number": "+622199990000"
}
}'
Parameter | Description |
---|---|
external_idoptional |
string Your unique id for this customer
|
given_nameoptional |
string Given name(s). Required if customer_type is INDIVIDUAL . Only allowed if customer_type is INDIVIDUAL |
surnameoptional |
string Surname or family name, if applicable. Only allowed if customer_type is INDIVIDUAL |
business_nameoptional |
string Required if customer_type is BUSINESS . Only allowed if customer_type is BUSINESS |
addressoptional |
object Customer's address |
address.country_codeoptional |
string Customer’s country. 2-letter ISO 3166-2 country code. Refer to code standard here. If customer_type is BUSINESS , the country in which the corporate entity is registered. If customer_type is INDIVIDUAL , a country in which the customer holds nationality |
address.stateoptional |
string Customer’s state |
address.provinceoptional |
string Customer’s province |
address.cityoptional |
string Customer’s city |
address.suburboptional |
string Customer’s suburb |
address.postal_codeoptional |
string Customer’s postal code |
address.line_1optional |
string First line of customer’s address. Typically used for building name and / or apartment number |
address.line_2optional |
string Second line of customer’s address. Typically used for street name and building number |
date_of_birthoptional |
string Date of Birth. Only allowed if customer_type is INDIVIDUAL . ISO 8601 format YYYY-MM-DD |
date_of_registrationoptional |
string Date of Registration. Only allowed if customer_type is BUSINESS . ISO 8601 format YYYY-MM-DD |
identificationoptional |
object A legal document that verifies the identity of the customer
|
identification.ktp_numberoptional |
string Kartu Tanda Penduduk (national identity card number) of the customer.Only allowed if customer_type is INDIVIDUAL
|
identification.npwp_numberoptional |
string Nomor Pokok Wajib Pajak (tax number) of the customerOnly allowed if customer_type is INDIVIDUAL
|
identification.drivers_licenseoptional |
string Surat Izin Mengemudi (driver’s licence) number of the customerOnly allowed if customer_type is INDIVIDUAL
|
identification.passport_numberoptional |
string Passport number of the customer.Only allowed if customer_type is INDIVIDUAL If provided, should provide passport_country . In the case of multiple passports, please choose the passport of the country closest to Indonesia |
identification.passport_countryconditionally required |
string Passport country of the customer. Only allowed if customer_type is INDIVIDUAL . 2-letter ISO 3166-2 country code. Refer to code standard here. Required ifpassport_number is provided. |
identification.business_tax_idoptional |
string Tax identification number of the business in its country of registration.Examples: - Nomor Pokok Wajib Pajak for indonesian businesses - Business Registration number for Hong Kong businesses - Unique Entity Number for Singaporean businesses Only allowed if customer_type is BUSINESS . If provided, should provide business_tax_id_country . |
identification.business_tax_id_countryconditionally required |
string Country for tax identification number of the business.Only allowed if customer_type is BUSINESS . 2-letter ISO 3166-2 country code. Refer to code standard here. Required ifbusiness_tax_id is provided |
account_detailsoptional |
object Customer’s bank account details |
account_details.account_codeoptional |
string The code of the account, can be bank codes (BCA, MANDIRI, etc.) or ewallet codes (GOPAY, OVO, etc.). Only Indonesian banks and ewallets supported currently. See Account Codes |
account_details.account_numberoptional |
string Destination bank account number. If disbursing to an e-wallet, phone number registered with the e-wallet account.
|
account_details.account_holder_nameoptional |
string Name of account holder per the bank's or e-wallet's records
|
emailoptional |
string Customer’s email address. Recommended if you want to notify the customer of the transaction statusShould include the top-level domain name Example: abc@email.com |
mobile_numberoptional |
string Customer’s mobile number with international prefix. Recommended if you want to notify the customer of the transaction statusExample: +62812XXXXXX |
phone_numberoptional |
string Customer’s land line or alternate phone number with international prefixExample: +6221XXXXXXXX |
Update Customer Response
We return the updated customer object if the call succeeded.
Example Update Customer Response
{
"id": "5c1774e76966b43a5b8198fb",
"external_id": "r-1234",
"customer_type": "INDIVIDUAL",
"given_name": "Ahmad",
"surname": "Shahab",
"address": {
"country_code": "ID",
"province": "DKI Jakarta",
"city": "Jakarta Selatan",
"line_1": "Jl. Senayan 1 No.15"
},
"date_of_birth": "11-01-1990",
"identification": {
"ktp_number": "0987654321320987",
"npwp_number": "098765432132098"
},
"account_details": {
"account_code": "BNI",
"account_number": "123456780",
"account_holder_name": "Ichwano"
},
"email": "ichwano@email.com",
"mobile_number": "+628111555777",
"phone_number": "+622199990000",
"created": "2018-12-12T13:50:12.000Z",
"updated": "2018-12-12T13:50:12.000Z"
}
Update Customer Errors
Error Code | Description |
---|---|
API_VALIDATION_ERROR400 |
Inputs are failing validation. The errors field contains details about which fields are violating validation |
INVALID_JSON_FORMAT400 |
The request body is not a valid JSON format |
ACCOUNT_CODE_NOT_SUPPORTED_ERROR400 |
The code of the account is currently not supported |
ACCOUNT_NUMBER_ERROR400 |
Where account_code is “BCA”, account_number input needs to be 10 digits. Please check the account number length before retrying. |
CUSTOMER_NOT_FOUND_ERROR400 |
Could not find customer. |
DUPLICATE_CUSTOMER_ERROR400 |
The external_id entered has been used before. Please enter a unique external_id and try again |
ACCOUNT_BLACKLISTED_ERROR400 |
We return this error if the account in question has been blacklisted |
SERVER_ERROR500 |
Server is unable to process the request. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
BAD_GATEWAY502 |
Server receives an error or invalid response from another server. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
GATEWAY_TIMEOUT504 |
Server's gateway didn't receive a timely response from another server and experienced timeout. This means your request might or might not have been processed. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
Get Customer with external_id
Returns an array with a single object which contains the customer corresponding to the unique external_id. Returns an empty array if there is no customer corresponding to the external_id.
Endpoint: Get Customer with external_id
GET https://api.instamoney.co/customers?external_id={external_id}
Get Customer Request
Example Get Customer with external_id
curl https://api.instamoney.co/customers?external_id=72655 -X GET \
-u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==:
Query Parameter | Description |
---|---|
external_idoptional |
string Unique ID you provided in the Create Customer requestThe external_id must match the external_id used at customer creation precisely |
Example Get Customer Response
[{
"id": "5c1774e76966b43a5b8198fb",
"external_id": "r-1234",
"customer_type": "INDIVIDUAL",
"given_name": "Ichwano",
"surname": "Sembo",
"address": {
"country_code": "ID",
"province": "DKI Jakarta",
"city": "Jakarta Selatan",
"line_1": "Jl. Senayan 1 No.15"
},
"date_of_birth": "11-01-1990",
"identification": {
"ktp_number": "0987654321320987",
"npwp_number": "098765432132098"
},
"account_details": {
"account_code": "BNI",
"account_number": "123456780",
"account_holder_name": "Ichwano"
},
"email": "ichwano@email.com",
"mobile_number": "+628111555777",
"phone_number": "+622199990000",
"created": "2018-12-12T13:50:12.000Z",
"updated": "2018-12-12T13:50:12.000Z"
}]
Domestic Remittance
Our Domestic Remittance APIs allow you to send remittances from your Instamoney Account on behalf of a sender to your designated recipient. Only IDR-IDR transfers supported currently.
Create Remittance
Sends a new remittance from your Instamoney Account to a recipient. You’ll need to have created a customer representing the sender and a customer representing the recipient first.
Your Instamoney account balance must be able to cover the payout amount and the transaction fees, or you’ll receive an “Insufficient Balance” error.
Endpoint: Create Remittance
POST https://api.instamoney.co/remittances
Create Remittance Request
Example Create Remittance Request
curl https://api.instamoney.co/remittances -X POST \
-u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==: \
-d external_id='demo_1475459775872' \
-d amount=17000
-d purpose_code='FAMILY'
-d source_of_funds='PERSONAL_SAVINGS'
-d description='uang jajan'
-d sender_customer_id='5c1774e76966b43a5b8198fb'
-d recipient_customer_id='5b51e6ba0071ec521008e21d'
Parameter | Description |
---|---|
external_idrequired |
string A unique ID for your remittance. We validate this to protect against accidental duplicate remittances
|
amountrequired |
number Transfer amount
|
descriptionrequired |
string Description to send with the remittance. The recipient may see this e.g., in their bank statement (if supported) or in email receipts we send on your behalf.
|
sender_customer_idrequired |
string The id of the sender customer (as returned by Instamoney’s Create Customer endpoint)The following fields are required in the sender customer object: given_name OR business_name , customer_type , country_code |
recipient_customer_idrequired |
string The id of the recipient customer (as returned by Instamoney’s Create Customer endpoint)The following fields are required in the recipient customer object: given_name ORbusiness_name , customer_type , country_code , account_code , account_number , account_holder_name |
source_of_fundsoptional |
string Source of funds. Refer to our list of Source of Funds Codes
|
purpose_codeoptional |
string Purpose of the remittance. Refer to our list of Purpose Codes
|
Create Remittance Response
Example Create Remittance Response
{
"external_id": "72655",
"amount": 11000,
"purpose_code": "FAMILY",
"source_of_funds": "PERSONAL_SAVINGS",
"description": "uang jajan",
"sender_customer_id" : "5c1774e76966b43a5b8198fb",
"recipient_customer_id": "5b51e6ba0071ec521008e21d",
"status": "PENDING_RISK_ASSESSMENT",
"created": "2018-12-20T17:00:00.000Z",
"updated": "2018-12-20T17:00:00.000Z",
"id": "5afbf743e28bc2055b3c06ed"
}
We return a response with additional fields described below if there were no initial errors with the remittance creation (request formatted incorrectly, invalid purpose code, insufficient funds, etc). The status of the remittance will be initially marked as PENDING_RISK_ASSESSMENT.
Parameter | Description |
---|---|
status |
string Status of the remittance. Default is PENDING_RISK_ASSESSMENT : Request is being processed and assessed in the risk scoring system. See Remittance Statuses |
created |
string An ISO timestamp that tracks when the remittance was created |
updated |
string An ISO timestamp that tracks when the remittance was last updated |
id |
string Unique remittance ID |
Create Remittance Errors
Error Code | Description |
---|---|
API_VALIDATION_ERROR400 |
Inputs are failing validation. The errors field contains details about which fields are violating validation. |
INVALID_JSON_FORMAT400 |
The request body is not a valid JSON format. |
DUPLICATE_REMITTANCE_ERROR400 |
External ID has been used before. Use a unique External ID and try again. |
RECIPIENT_AMOUNT_ERROR400 |
The transfer amount requested is lower than the prescribed minimum for the recipient bank. Amend the transfer amount before retrying. |
MAXIMUM_TRANSFER_LIMIT_ERROR400 |
The transfer amount requested is higher than the prescribed maximum for the recipient bank. Amend the transfer amount before retrying.* For clients that have enabled high value transfers this error will not appear
|
SENDER_CUSTOMER_VALIDATION_ERROR400 |
There are missing inputs for this customer which are required for the remittance. The errors field contains details about which fields are violating validation. |
RECIPIENT_CUSTOMER_VALIDATION_ERROR400 |
There are missing inputs for this customer which are required for the remittance. The errors field contains details about which fields are violating validation. |
SENDER_CUSTOMER_NOT_FOUND_ERROR400 |
Could not find customer. |
RECIPIENT_CUSTOMER_NOT_FOUND_ERROR400 |
Could not find customer. |
SERVER_ERROR500 |
Server is unable to process the request. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
BAD_GATEWAY502 |
Server receives an error or invalid response from another server. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
GATEWAY_TIMEOUT504 |
Server's gateway didn't receive a timely response from another server and experienced timeout. This means your request might or might not have been processed. You should treat this error as indeterminate. Given the request status is indeterminate, you can use Get Remittance by External ID API to check whether the remittance has already been created or not. If you receive an empty array, the remittance has not been created; please retry the remittance request in 1-2 hours. Otherwise, do not retry to prevent duplication |
Remittance Callbacks
We send a callback when there’s a change of status of your remittance to: Compliance Verification, Compliance Rejected, Failed, or Completed. You can set your callback URL in Instamoney Dashboard
Note that in the case where we don't get a successful response from your servers on the first try, we will retry 2 times more with a 30 second delay between each retry. After 3 failures, we get internal alerts that a callback has failed. Our team will then contact you to resolve the issue.
Remittance Callback
We return the content of your Create Remittance request and the following additional fields:
Key | Description |
---|---|
status |
string Status of the remittance. See Remittance Statuses |
failure_codeoptional |
string If the remittance failed, we include a failure code for more details on the failure. See Remittance Failure Codes |
created |
string An ISO timestamp that tracks when the remittance was created |
updated |
string An ISO timestamp that tracks when the remittance was last updated |
id |
string Unique remittance ID |
Example Remittance Callback
{
"external_id": "72655",
"amount": 11000,
"purpose_code": "FAMILY",
"source_of_funds": "PERSONAL_SAVINGS",
"description": "uang jajan",
"sender_customer_id" : "5c1774e76966b43a5b8198fb",
"recipient_customer_id": "5b51e6ba0071ec521008e21d",
"status": "FAILED",
"failure_code": "INVALID_DESTINATION",
"created": "2018-12-20T17:00:00.000Z",
"updated": "2018-12-20T17:10:00.000Z",
"id": "5afbf743e28bc2055b3c06ed"
}
Get Remittance with external_id
Returns an array with a single object which contains the remittance corresponding to the unique external_id. Returns an empty array if there is no remittance corresponding to the external_id.
Endpoint: Get Remittance with external_id
GET https://api.instamoney.co/remittances?external_id={external_id}
Get Remittance Request
Example Get Remittance Request
curl https://api.instamoney.co/remittances?external_id=72655 -X GET \
-u sk_test_OYCEfL5xgLL+l8ZvK7QaSGGVMN73oNEpk3yz+Rxn/2bS/LCgCQZ+gw==:
Query Parameter | Description |
---|---|
external_idrequired |
string Unique ID you provided in the Create Remittance requestThe external_id must match the external_id used at remittance creation precisely
|
Example Get Remittance Response
[{
"external_id": "72655",
"amount": 11000,
"purpose_code": "FAMILY",
"source_of_funds": "PERSONAL_SAVINGS",
"description": "uang jajan",
"sender_customer_id" : "5c1774e76966b43a5b8198fb",
"recipient_customer_id": "5b51e6ba0071ec521008e21d",
"status": "PENDING_RISK_ASSESSMENT",
"created": "2018-12-20T17:00:00.000Z",
"updated": "2018-12-20T17:00:00.000Z",
"id": "5afbf743e28bc2055b3c06ed"
}]
Remittance Statuses
Key | Description |
---|---|
PENDING_RISK_ASSESSMENT | Request is being processed and assessed in the risk scoring system |
COMPLIANCE_VERIFICATION | Request is considered medium or high risk, and is being reviewed by our compliance team. Our team will contact you via email for extra information for enhanced due diligence. |
COMPLIANCE_REJECTED | Request is rejected by compliance |
PROCESSING | Request has been approved and the remittance is queued to be transferred to the recipient |
COMPLETED | The sending bank has confirmed transmission of the remittance |
FAILED | Remittance could not be transferred to the recipient due to certain errors. See Remittances Failure Codes |
Remittance Failure Codes
Key | Description |
---|---|
INSUFFICIENT_BALANCE | The balance in your account is insufficient to make the remittance in the desired amount |
UNKNOWN_BANK_NETWORK_ERROR | The bank networks have returned an unknown error to us. We are unable to predict whether the remittance will succeed should you retry the same remittance request. |
TEMPORARY_BANK_NETWORK_ERROR | The bank networks are experiencing a temporary error. Please retry the remittance in 1-3 hours |
TEMPORARY_TRANSFER_ERROR | We’ve encountered a temporary issue while processing this remittance. Please retry the remittance in 1-2 hours |
SWITCHING_NETWORK_ERROR | At least one of the switching networks is encountering an issue. Please retry the remittance in 1-3 hours |
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 |
TRANSFER_ERROR | We’ve encountered a fatal error while processing this remittance. Certain API fields in your request may be invalid. Please contact our customer support team for more information |
Account Codes
Key | Description |
---|---|
ACEH | BPD Aceh |
ACEH_UUS | BPD Aceh UUS |
AGRIS | Bank Agris |
AGRONIAGA | Bank BRI Agroniaga |
AMAR | Bank Amar Indonesia (formerly Anglomas International Bank) |
ANDARA | Bank Andara |
ANGLOMAS | Anglomas International Bank |
ANZ | Bank ANZ Indonesia |
ARTA_NIAGA_KENCANA | Bank Arta Niaga Kencana |
ARTHA | Bank Artha Graha International |
ARTOS | Bank Artos Indonesia |
BALI | BPD Bali |
BAML | Bank of America Merill-Lynch |
BANGKOK | Bangkok Bank |
BANTEN | BPD Banten (formerly Bank Pundi Indonesia) |
BCA | Bank Central Asia (BCA) |
BCA_DIGITAL | Bank Central Asia Digital (BluBCA) |
BCA_SYR | Bank Central Asia (BCA) Syariah |
BENGKULU | BPD Bengkulu |
BISNIS_INTERNASIONAL | Bank Bisnis Internasional |
BJB | Bank BJB |
BJB_SYR | Bank BJB Syariah |
BNI | Bank Negara Indonesia (BNI) |
BNP_PARIBAS | Bank BNP Paribas |
BOC | Bank of China (BOC) |
BRI | Bank Rakyat Indonesia (BRI) |
BSI | Bank Syariah Indonesia (BSI) |
BTN | Bank Tabungan Negara (BTN) |
BTN_UUS | Bank Tabungan Negara (BTN) UUS |
BTPN_SYARIAH | BTPN Syariah (formerly Bank Sahabat Purba Danarta and Bank Tabungan Pensiunan Nasional UUS) |
BUKOPIN | Bank Bukopin |
BUKOPIN_SYR | Bank Syariah Bukopin |
BUMI_ARTA | Bank Bumi Arta |
CAPITAL | Bank Capital Indonesia |
CCB | China Construction Bank Indonesia (formerly Bank Antar Daerah and Bank Windu Kentjana Int) |
CENTRATAMA | Centratama Nasional Bank |
CHINATRUST | Bank Chinatrust Indonesia |
CIMB | Bank CIMB Niaga |
CIMB_UUS | Bank CIMB Niaga UUS |
CITIBANK | Citibank |
COMMONWEALTH | Bank Commonwealth |
DAERAH_ISTIMEWA | BPD Daerah Istimewa Yogyakarta (DIY) |
DAERAH_ISTIMEWA_UUS | BPD Daerah Istimewa Yogyakarta (DIY) UUS |
DANAMON | Bank Danamon |
DANAMON_UUS | Bank Danamon UUS |
DBS | Bank DBS Indonesia |
DEUTSCHE | Deutsche Bank |
DINAR_INDONESIA | Bank Dinar Indonesia |
DKI | Bank DKI |
DKI_UUS | Bank DKI UUS |
EXIMBANK | Indonesia Eximbank (formerly Bank Ekspor Indonesia) |
FAMA | Bank Fama International |
GANESHA | Bank Ganesha |
GOPAY | GoPay |
HANA | Bank Hana |
HARDA_INTERNASIONAL | Bank Harda Internasional |
HIMPUNAN_SAUDARA | Bank Himpunan Saudara 1906 |
HSBC | Hongkong and Shanghai Bank Corporation (HSBC) (formerly Bank Ekonomi Raharja) |
HSBC_UUS | Hongkong and Shanghai Bank Corporation (HSBC) UUS |
ICBC | Bank ICBC Indonesia |
INA_PERDANA | Bank Ina Perdania |
INDEX_SELINDO | Bank Index Selindo |
INDIA | Bank of India Indonesia |
JAMBI | BPD Jambi |
JAMBI_UUS | BPD Jambi UUS |
JASA_JAKARTA | Bank Jasa Jakarta |
JAWA_TENGAH | BPD Jawa Tengah |
JAWA_TENGAH_UUS | BPD Jawa Tengah UUS |
JAWA_TIMUR | BPD Jawa Timur |
JAWA_TIMUR_UUS | BPD Jawa Timur UUS |
JPMORGAN | JP Morgan Chase Bank |
JTRUST | Bank JTrust Indonesia (formerly Bank Mutiara) |
KALIMANTAN_BARAT | BPD Kalimantan Barat |
KALIMANTAN_BARAT_UUS | BPD Kalimantan Barat UUS |
KALIMANTAN_SELATAN | BPD Kalimantan Selatan |
KALIMANTAN_SELATAN_UUS | BPD Kalimantan Selatan UUS |
KALIMANTAN_TENGAH | BPD Kalimantan Tengah |
KALIMANTAN_TIMUR | BPD Kalimantan Timur |
KALIMANTAN_TIMUR_UUS | BPD Kalimantan Timur UUS |
KESEJAHTERAAN_EKONOMI | Bank Kesejahteraan Ekonomi |
LAMPUNG | BPD Lampung |
LINKAJA | LinkAja |
MALUKU | BPD Maluku |
MANDIRI | Bank Mandiri |
MANDIRI_TASPEN | Mandiri Taspen Pos (formerly Bank Sinar Harapan Bali) |
MASPION | Bank Maspion Indonesia |
MAYAPADA | Bank Mayapada International |
MAYBANK | Bank Maybank (formerly BII) |
MAYBANK_SYR | Bank Maybank Syariah Indonesia |
MAYORA | Bank Mayora |
MEGA | Bank Mega |
MEGA_SYR | Bank Syariah Mega |
MESTIKA_DHARMA | Bank Mestika Dharma |
MITRA_NIAGA | Bank Mitra Niaga |
MITSUI | Bank Sumitomo Mitsui Indonesia |
MIZUHO | Bank Mizuho Indonesia |
MNC_INTERNASIONAL | Bank MNC Internasional |
MUAMALAT | Bank Muamalat Indonesia |
MULTI_ARTA_SENTOSA | Bank Multi Arta Sentosa |
NATIONALNOBU | Bank Nationalnobu |
NUSA_TENGGARA_BARAT | BPD Nusa Tenggara Barat |
NUSA_TENGGARA_BARAT_UUS | BPD Nusa Tenggara Barat UUS |
NUSA_TENGGARA_TIMUR | BPD Nusa Tenggara Timur |
NUSANTARA_PARAHYANGAN | Bank Nusantara Parahyangan |
OCBC | Bank OCBC NISP |
OCBC_UUS | Bank OCBC NISP UUS |
OKE | Bank Oke Indonesia (formerly Bank Andara) |
OVO | OVO |
PANIN | Bank Panin |
PANIN_SYR | Bank Panin Syariah |
PAPUA | BPD Papua |
PERMATA | Bank Permata |
PERMATA_UUS | Bank Permata UUS |
PRIMA_MASTER | Prima Master Bank |
QNB_INDONESIA | Bank QNB Indonesia (formerly Bank QNB Kesawan) |
RABOBANK | Bank Rabobank International Indonesia |
RBS | Royal Bank of Scotland (RBS) |
RESONA | Bank Resona Perdania |
RIAU_DAN_KEPRI | BPD Riau Dan Kepri |
RIAU_DAN_KEPRI_UUS | BPD Riau Dan Kepri UUS |
ROYAL | Bank Royal Indonesia |
SAHABAT_SAMPOERNA | Bank Sahabat Sampoerna |
SBI_INDONESIA | Bank SBI Indonesia |
SHINHAN | Bank Shinhan Indonesia (formerly Bank Metro Express) |
SHOPEEPAY | Shopeepay |
SINARMAS | Sinarmas |
SINARMAS_UUS | Bank Sinarmas UUS |
STANDARD_CHARTERED | Standard Chartered Bank |
SULAWESI | BPD Sulawesi Tengah |
SULAWESI_TENGGARA | BPD Sulawesi Tenggara |
SULSELBAR | BPD Sulselbar |
SULSELBAR_UUS | BPD Sulselbar UUS |
SULUT | BPD Sulut |
SUMATERA_BARAT | BPD Sumatera Barat |
SUMATERA_BARAT_UUS | BPD Sumatera Barat UUS |
SUMSEL_DAN_BABEL | BPD Sumsel Dan Babel |
SUMSEL_DAN_BABEL_UUS | BPD Sumsel Dan Babel UUS |
SUMUT | BPD Sumut |
SUMUT_UUS | BPD Sumut UUS |
TABUNGAN_PENSIUNAN_NASIONAL | Bank Tabungan Pensiunan Nasional |
TOKYO | Bank of Tokyo Mitsubishi UFJ |
UOB | Bank UOB Indonesia |
VICTORIA_INTERNASIONAL | Bank Victoria Internasional |
VICTORIA_SYR | Bank Victoria Syariah |
WOORI | Bank Woori Saudara Indonesia (formerly Bank Himpunan Saudara and Bank Woori Indonesia) |
WOORI_SAUDARA | Bank Woori Saudara Indonesia 1906 (formerly Bank Himpunan Saudara and Bank Woori Indonesia) |
YUDHA_BHAKTI | Bank Yudha Bhakti |
Purpose Codes
Key | Description |
---|---|
SELF | Transfer to own account |
FAMILY | Family Maintenance |
EDUCATION | Education-related student expenses |
MEDICAL | Medical Treatment |
HOTEL | Hotel Accomodation |
TRAVEL | Travel |
UTILITIES | Utility Bills |
LOAN_REPAYMENT | Repayment of Loans |
TAX_PAYMENT | Tax Payment |
RESIDENCE_PURCHASE | Purchase of Residential Property |
RESIDENCE_RENT | Payment of Property Rental |
INSURANCE | Insurance |
MUTUAL_FUND | Mutual Fund Investment |
SHARES_INVESTMENT | Investment in Shares |
DONATIONS | Donations |
ADVERTISING | Advertising & Public relations-related expenses |
ROYALTY_FEES | Royalty fees, trademark fees, patent fees, and copyright fees |
BROKER_FEES | Fees for brokers, front end fee, commitment fee, guarantee fee and custodian fee |
ADVISORS | Fees for advisors, technical assistance, and academic purpose, including remuneration for specialists |
OFFICE | Representative office expenses |
CONSTRUCTION | Construction costs / expenses |
SHIPMENT | Transportation fees for goods |
EXPORT | For payment of exported goods |
DELIVERY | Delivery fees for goods |
TRADES | General Goods Trades - Offline trade |
SALARY | Salary |
REFUND | Refund |
LOAN | Loan |
Source of Funds
Key | Description |
---|---|
INVESTMENT | Bonds, fixed deposits, preference shares, business ownership/equity or property ownership |
PERSONAL_SAVINGS | Funds kept in an account in a bank or a similar organization |
BUSINESS_REVENUE | Income from a business or a company |
LEGACY | Inherited money from a will |
BUSINESS_ARRANGEMENT | Any understanding, procedure, course of dealing, or arrangement between a creditor and a seller |
LOAN | A sum of money that is borrowed |
SALARY | A fixed regular payment made by an employer |
OTHER | Other |
Testing Remittances
In this section, you can find instructions on how to simulate various Remittance results. If you are not able to perform these simulations successfully, or have any other questions, please feel free to contact your account manager.
Scenario | Try these values |
---|---|
Successful remittance Will complete remittance and send a callback to your callback URL with status: “COMPLETED” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Monica Flange, account_number: 111111} Then, create a remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Successful SKN remittance Will complete remittance and send a callback to your callback URL with status: “COMPLETED” |
First, create customers representing the sender and recipient. Then, create a remittance using the sender and recipient customer ids, and the following values: {amount: 50000000} |
Successful SKN disbursement which was later found to have been refunded This scenario may happen for disbursements >50 million IDR due to reasons including name mismatch. Will first send callback with status: "COMPLETED" to your callback URL 2 minutes later, will send a second callback to your callback URL with status: “FAILED" |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: BRI, account_holder_name: Manuel Johnson, account_number: 148148} Then, create a remittance using the sender and recipient customer ids, and the following values: {amount: 50000000} |
Remittance has been assessed to be medium or high risk and requires compliance verification. Remittance is eventually approved by compliance and succeeds Will send a callback to your callback URL with status: “COMPLIANCE_VERIFICATION” 2 minutes later, will send a second callback to your callback URL with status: “COMPLETED” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Perla Semele, account_number: 808080} Then create a Remittance using the sender and recipient customer ids |
Remittance has been assessed to be medium or high risk and requires compliance verification. Remittance is eventually rejected by compliance Will send a callback to your callback URL with status: “COMPLIANCE_VERIFICATION” 2 minutes later, will send a second callback to your callback URL with status: “COMPLIANCE_REJECTED” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Isabelle Stickney, account_number: 909090} Then create a Remittance using the sender and recipient customer ids |
Bank account does not exist Will return error type: “INVALID_DESTINATION” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Rizky Abdul, account_number: 7654321} Then create a Remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Switching network is experiencing downtime Will return error type: "SWITCHING_NETWORK_ERROR" |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Siti Abdul, account_number: 12121212} Then create a Remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Bank networks have rejected the transaction for an unknown reason Will return error type: “UNKNOWN_BANK_NETWORK_ERROR” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Andri Senti, account_number: 987654321} Then create a Remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Bank is undergoing unscheduled maintenance Will return error type: “TEMPORARY_BANK_NETWORK_ERROR” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Yono Kustono, account_number: 321321321} Then create a Remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Transaction has been rejected by the destination bank without a clear error reason Will return error type: “REJECTED_BY_BANK” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Budi Berkah, account_number: 8787878} Then create a Remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Transaction was rejected because of a fatal error Will return error type: “TRANSFER_ERROR ” |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Adnin Dita, account_number: 1351357} Then create a Remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Transaction failed because of a known temporary issue Will return error for TEMPORARY_TRANSFER_ERROR |
First, create customers representing the sender and recipient. Use the following values for the recipient customer:{channel_code: MANDIRI, account_holder_name: Sutiono Kusro, account_number: 868686} Then create a Remittance using the sender and recipient customer ids, and the following values: {amount: 80000} |
Description not found Will return error for API_VALIDATION_ERROR |
Try to simulate sending a remittance with the “description” parameter empty |
Not enough balance Will return error for INSUFFICIENT_BALANCE |
Try to simulate sending a remittance greater than the balance available in your account |
Invalid API Key Will return error for INVALID_API_KEY |
Try using a random API key |
Backward Compatibility
We consider the following changes to be backward compatible:
- Adding new API resources
- Adding new optional request parameters to existing API methods
- Adding new properties to existing API responses
- Changing the order of properties in existing API responses
- Changing the length or format of any object IDs
- Adding new error codes
- Adding new webhook event types
- Adding new properties to webhook payloads