instamoney docs

Fixed Virtual Accounts


Fixed virtual accounts allow you to create unique 'fixed' virtual account numbers for all your users. This is particularly useful for users who need to send funds on a frequent basis, such as users with recurring subscriptions, as they can send funds to the same account number and still be unique identified by Instamoney.

If you choose to have virtual accounts assigned to a user, then a specific user will be given a lasting virtual account dedicated for your company. For example, Bob will always retain a BCA virtual account 02938-1234-567890 and it will always show Bob’s name when he tries to pay that virtual account. You have full control over the name that appears on the account when your users transfer money in.

Virtual account numbers are 15-digit account numbers that are generated from a defined range (ex. 02938-1001-111111). Instamoney supports virtual accounts for Mandiri, BRI, and BNI. We offer new customers 999,999 virtual account numbers to start. If you need more, please contact us!

Your customers can pay virtual accounts via ATM, mobile banking, and internet banking. Instamoney sends a callback each time this fixed virtual account is paid, so that your systems can be alerted automatically.

Try it now

Try out the Instamoney API in seconds below. Create your first fixed virtual account and see how you can easily get paid.


Buat fixed virtual accounts (Create fixed virtual account)

Kami akan memulai dengan membuat fixed virtual account di BCA untuk Rika Sutanto.

Mari mulai dengan menjalankan permintaan curl di terminal Anda.

We will start by creating a fixed virtual account at BCA for Rika Sutanto.

Let’s start by running the curl request in your terminal.

 curl -X POST \
      -u NIiHfL5xh+amlMdrKLZOTDSWYNGgodl6mXCy+Rxn/2TQ8LWnDgV1gQ==: \
      -d external_id=demo-1531960397057 \
      -d bank_code=BCA \
      -d name='Rika Sutanto' 

Implementing fixed virtual accounts

Follow the steps below to implement our API.

Go to Dashboard -> Settings -> Configurations -> Fixed Virtual Account, Click on Activate Button that available for every Banks. After you click it, you will get Fixed Virtual Account Ranges.

You’ll need to POST this request. It will create a fixed virtual account which your users can fund anytime. Learn more about the parameters in our API reference docs.

  • Curl
  • PHP
curl -X POST \
      -u NIiHfL5xh+amlMdrKLZOTDSWYNGgodl6mXCy+Rxn/2TQ8LWnDgV1gQ==: \
      -d external_id=demo_virtual_account_1475459775872 \
      -d bank_code=BCA \
      -d name='Rika Sutanto'

We have prefilled the above example with a sample API key. If you're logged in, you'll see your specific test key. Only you can see this key.

Our fixed virtual account API will then return a response. We explain the response below

Response: 200

     "name":"Rika Sutanto",

Our unique ID for the fixed virtual account


Your user ID


An ID of your choice we append to all transactions. Often your unique ID like a phone number, email or transaction ID.


The merchant code will be the prefix for the virtual account number, e.g 01234 your_number


This is the complete virtual account number (including the prefix). This works just like a bank account and is what a user will need to enter in their internet banking /ATM to send funds.


Bank code for the relevant bank, e.g. BCA

When a payment is detected, we initiate a callback to notify you of an inbound payment. You’ll need to provide us a callback URL. Below we’ve included an example of what a callback client may look like from your side.

  • PHP
     if ($_SERVER["REQUEST_METHOD"] === "POST") {
     $data = file_get_contents("php://input");
     print_r("\n\$data contains the payment data \n\n");
     print_r("\n\nUpdate your database with the payment information \n\n");
     } else {
     print_r("Cannot ".$_SERVER["REQUEST_METHOD"]." ".$_SERVER["SCRIPT_NAME"]);

Verifying the callback virtual account

To verify if the callback you received is coming from us, you can GET this request.

  • Curl
curl{payment_id} -X GET \
      -u NIiHfL5xh+amlMdrKLZOTDSWYNGgodl6mXCy+Rxn/2TQ8LWnDgV1gQ==: \

You can get your payment_id from the callback sent by Instamoney. Instamoney will then return a response below.

Response: 200

     "id": "598d91b1191029596846047f",
     "payment_id": "1502450097080",
     "callback_virtual_account_id": "598d5f71bf64853820c49a18",
     "external_id": "demo-1502437214715",
     "merchant_code": "77517",
     "account_number": "1000016980",
     "bank_code": "BCA",
     "amount": 5000,
     "transaction_timestamp": "2017-08-11T11:14:57.080Z"

ID of the callback virtual account payment


Our internal system’s payment ID


ID of the callback virtual account payment that was paid


External ID on the callback virtual account payment


5-digit merchant prefix to the full virtual account number


Account number of the virtual account


Bank code of the virtual account number


Amount that was paid to this virtual account payment


Date time that the callback virtual account was paid

Congrats! That’s it - you’re now set to use fixed virtual accounts with Instamoney.

Next Steps

  • Ready to do some testing? Our testing pages walks through some testing so you can test your implementation


Still have more questions? We're always happy to help however we can. Shoot us an email or chat to us in live chat.