NAV undefined
undefined
bash java

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:

  1. Prefund your Instamoney account balance

  2. Create a customer which represents the sender, and a customer which represents the recipient of the remittance. You’ll get an id for each

  3. Create a remittance, attaching ids of the sender and recipient

  4. We run this remittance through our risk-scoring system. If necessary, our compliance team will contact you for additional verification of information

  5. 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.

  1. Install Postman.

  2. Download our Postman collection.

  3. Open Postman and Import the Instamoney API Postman Collection.

  4. 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.

  5. 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.

  6. 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:

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_ERROR
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_id
required
string Your unique id for this customer

Characters Special and alphanumeric
Maximum length 100 maximum characters
customer_type
required
string Legal entity. Valid values: INDIVIDUAL or BUSINESS
given_name
conditionally required
string Given name(s). Required if customer_type is INDIVIDUAL. Only allowed if customer_type is INDIVIDUAL
surname
optional
string Surname or family name, if applicable. Only allowed if customer_type is INDIVIDUAL
business_name
conditionally required
string Required if customer_type is BUSINESS. Only allowed if customer_type is BUSINESS
address
optional
object Customer's address
address.country_code
required
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.state
optional
string Customer’s state
address.province
optional
string Customer’s province
address.city
optional
string Customer’s city
address.suburb
optional
string Customer’s suburb
address.postal_code
optional
string Customer’s postal code
address.line_1
optional
string First line of customer’s address. Typically used for building name and / or apartment number
address.line_2
optional
string Second line of customer’s address. Typically used for street name and building number
date_of_birth
optional
string Date of Birth. Only allowed if customer_type is INDIVIDUAL. ISO 8601 format YYYY-MM-DD
date_of_registration
optional
string Date of Registration. Only allowed if customer_type is BUSINESS. ISO 8601 format YYYY-MM-DD
identification
optional
object A legal document that verifies the identity of the customer
identification.ktp_number
optional
string Kartu Tanda Penduduk (national identity card number) of the customer.
Only allowed if customer_type is INDIVIDUAL
Characters 16 characters
identification.npwp_number
optional
string Nomor Pokok Wajib Pajak (tax number) of the customer
Only allowed if customer_type is INDIVIDUAL
Characters 15 characters
identification.drivers_license
optional
string Surat Izin Mengemudi (driver’s licence) number of the customer
Only allowed if customer_type is INDIVIDUAL
Characters 14 characters
identification.passport_number
optional
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_country
conditionally 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_numberis provided.
identification.business_tax_id
optional
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_country
conditionally 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_details
optional
object Customer’s bank account details
account_details.account_code
optional
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_number
optional
string Destination bank account number. If disbursing to an e-wallet, phone number registered with the e-wallet account.

Characters Numeric and hyphens
BCA required length 10 characters
Other banks maximum length No maximum characters
Other banks minimum length 1 character
E-wallets Phone number registered with the e-wallet (Example: 0812XXXXXX)

*** We support remittances to virtual accounts of major banks (BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, and NOBU Bank).
*** We support remittances to major e-wallets (GoPay, OVO, and Mandiri e-cash).

account_details.account_holder_name
optional
string Name of account holder per the bank's or e-wallet's records
Characters Special and alphanumeric
Maximum length No maximum characters
Minimum length 1 character
email
optional
string Customer’s email address. Recommended if you want to notify the customer of the transaction status
Should include the top-level domain name
Example: abc@email.com
mobile_number
optional
string Customer’s mobile number with international prefix. Recommended if you want to notify the customer of the transaction status
Example: +62812XXXXXX
phone_number
optional
string Customer’s land line or alternate phone number with international prefix
Example: +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_ERROR
400
Inputs are failing validation. The errors field contains details about which fields are violating validation
INVALID_JSON_FORMAT
400
The request body is not a valid JSON format
ACCOUNT_CODE_NOT_SUPPORTED_ERROR
400
The code of the account is currently not supported
ACCOUNT_NUMBER_ERROR
400
Where account_code is “BCA”, account_number input needs to be 10 digits. Please check the account number length before retrying.
DUPLICATE_CUSTOMER_ERROR
400
The external_id entered has been used before. Please enter a unique external_id and try again
ACCOUNT_BLACKLISTED_ERROR
400
We return this error if the account in question has been blacklisted
SERVER_ERROR
500
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_GATEWAY
502
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_TIMEOUT
504
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_id
optional
string Your unique id for this customer

Characters Special and alphanumeric
Maximum length 100 maximum characters
given_name
optional
string Given name(s). Required if customer_type is INDIVIDUAL. Only allowed if customer_type is INDIVIDUAL
surname
optional
string Surname or family name, if applicable. Only allowed if customer_type is INDIVIDUAL
business_name
optional
string Required if customer_type is BUSINESS. Only allowed if customer_type is BUSINESS
address
optional
object Customer's address
address.country_code
optional
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.state
optional
string Customer’s state
address.province
optional
string Customer’s province
address.city
optional
string Customer’s city
address.suburb
optional
string Customer’s suburb
address.postal_code
optional
string Customer’s postal code
address.line_1
optional
string First line of customer’s address. Typically used for building name and / or apartment number
address.line_2
optional
string Second line of customer’s address. Typically used for street name and building number
date_of_birth
optional
string Date of Birth. Only allowed if customer_type is INDIVIDUAL. ISO 8601 format YYYY-MM-DD
date_of_registration
optional
string Date of Registration. Only allowed if customer_type is BUSINESS. ISO 8601 format YYYY-MM-DD
identification
optional
object A legal document that verifies the identity of the customer
identification.ktp_number
optional
string Kartu Tanda Penduduk (national identity card number) of the customer.
Only allowed if customer_type is INDIVIDUAL
Characters 16 characters
identification.npwp_number
optional
string Nomor Pokok Wajib Pajak (tax number) of the customer
Only allowed if customer_type is INDIVIDUAL
Characters 15 characters
identification.drivers_license
optional
string Surat Izin Mengemudi (driver’s licence) number of the customer
Only allowed if customer_type is INDIVIDUAL
Characters 14 characters
identification.passport_number
optional
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_country
conditionally 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_numberis provided.
identification.business_tax_id
optional
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_country
conditionally 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_idis provided
account_details
optional
object Customer’s bank account details
account_details.account_code
optional
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_number
optional
string Destination bank account number. If disbursing to an e-wallet, phone number registered with the e-wallet account.

Characters Numeric and hyphens
BCA required length 10 characters
Other banks maximum length No maximum characters
Other banks minimum length 1 character
E-wallets Phone number registered with the e-wallet (Example: 0812XXXXXX)

*** We support remittances to virtual accounts of major banks (BRI, BNI, Mandiri, CIMB Niaga, Permata, BTN, and NOBU Bank).
*** We support remittances to major e-wallets (GoPay, OVO, and Mandiri e-cash).

account_details.account_holder_name
optional
string Name of account holder per the bank's or e-wallet's records
Characters Special and alphanumeric
Maximum length No maximum characters
Minimum length 1 character
email
optional
string Customer’s email address. Recommended if you want to notify the customer of the transaction status
Should include the top-level domain name
Example: abc@email.com
mobile_number
optional
string Customer’s mobile number with international prefix. Recommended if you want to notify the customer of the transaction status
Example: +62812XXXXXX
phone_number
optional
string Customer’s land line or alternate phone number with international prefix
Example: +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_ERROR
400
Inputs are failing validation. The errors field contains details about which fields are violating validation
INVALID_JSON_FORMAT
400
The request body is not a valid JSON format
ACCOUNT_CODE_NOT_SUPPORTED_ERROR
400
The code of the account is currently not supported
ACCOUNT_NUMBER_ERROR
400
Where account_code is “BCA”, account_number input needs to be 10 digits. Please check the account number length before retrying.
CUSTOMER_NOT_FOUND_ERROR
400
Could not find customer.
DUPLICATE_CUSTOMER_ERROR
400
The external_id entered has been used before. Please enter a unique external_id and try again
ACCOUNT_BLACKLISTED_ERROR
400
We return this error if the account in question has been blacklisted
SERVER_ERROR
500
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_GATEWAY
502
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_TIMEOUT
504
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_id
optional
string Unique ID you provided in the Create Customer request
The 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_id
required
string A unique ID for your remittance. We validate this to protect against accidental duplicate remittances

Characters Special and alphanumeric
Maximum length 100 characters
amount
required
number Transfer amount

Characters Numerical integers, no decimals
Maximum limit (BCA, Mandiri, BRI, BNI, BNI Syariah, CIMB, CIMB_UUS, PERMATA) No Limit**
Minimum limit (BCA, Mandiri, BRI, BNI, BNI Syariah, CIMB, CIMB_UUS, PERMATA) No Limit
Maximum Limit (Other banks) Rp.50.000.000***
Minimum Limit (Other banks) Rp. 10.000

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

*** Disbursements above Rp 50.000.000 to banks other than BCA, Mandiri, BNI, BNI Syariah, BRI, Permata will be processed between 8am-2pm (UTC+07:00) on bank working days. The disbursement can be expected to arrive by the next business day. (Processing times vary by financial institution and is subject to change.)

description
required
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.

Maximum length 512 characters
sender_customer_id
required
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_id
required
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_funds
optional
string Source of funds. Refer to our list of Source of Funds Codes
purpose_code
optional
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_ERROR
400
Inputs are failing validation. The errors field contains details about which fields are violating validation.
INVALID_JSON_FORMAT
400
The request body is not a valid JSON format.
DUPLICATE_REMITTANCE_ERROR
400
External ID has been used before. Use a unique External ID and try again.
RECIPIENT_AMOUNT_ERROR
400
The transfer amount requested is lower than the prescribed minimum for the recipient bank. Amend the transfer amount before retrying.
MAXIMUM_TRANSFER_LIMIT_ERROR
400
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_ERROR
400
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_ERROR
400
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_ERROR
400
Could not find customer.
RECIPIENT_CUSTOMER_NOT_FOUND_ERROR
400
Could not find customer.
SERVER_ERROR
500
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_GATEWAY
502
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_TIMEOUT
504
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_code
optional

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_id
required
string Unique ID you provided in the Create Remittance request
The 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: