instamoney docs

Retail Outlets


Retail Outlets enable you to accept payments from an offline physical location (minimarket or supermarket). User will receive a unique payment code upon checkout and inform the code to the store clerk/cashier. Finally, the user can then pay the amount using cash (no bank accounts needed), or any other physical payment methods present at the counter. This may include credit cards, debit cards, e-money, electronic cash, ewallet (Go-Pay or OVO), and many more.

Instamoney currently supports retail outlet payments made in Alfamart stores nationwide. Going forward, we will add more retail outlet chain.

In order to pay the checkout, your user will use a Payment Code. This Payment codes are comprised of a customizable static prefix (configurable in your Settings) and a randomly generated string (dynamic). To illustrate, if your prefix has been set as “AMAZON”, payment codes generated for your users will typically look like “AMAZON1289421”, “AMAZON537091”, and so on.

Funds received from users will then automatically hit your In Transit account upon detection, and will finally settle to your Active Account several days later. Default settlement days is set at 5 working days upon detection.

Please take note of the following :

You must choose a prefix before using retail outlet as incoming payment method

Prefixes must be between 3-6 characters long

ONLY alphanumeric characters are allowed - special characters will not be accepted

Not case sensitive – all letters will be converted to UPPERCASE only

You can only set your prefix ONCE, so please think hard before saving it! Your prefix cannot be changed once it has been saved.

Implementing retail outlets

  1. Activate your Retail Outlet ranges

    Find the settings under Settings > Configuration > Retail Outlets

  2. Set up your Retail Outlet Prefix

    Find the settings under Settings > Configuration > Retail Outlets. The chosen Prefix will not be able to be edited. Please make sure that the prefix fits your criteria and needs.

  3. Please follow the CURL request below using the POST command. This will create a fixed Payment Code in which will be created as soon as the request hits our server. Read more about the parameters in the reference documentation

    curl -X POST \
         -u O46JfOtygef9kMNsK+ZPGT+ZZ9b3ooF4w3Dn+R1k+2fT/7GlCAN3jg==: \
         -d external_id=demo_fixed_payment_code_123 \
         -d retail_outlet_name=ALFAMART \
         -d name=Rika Susanto \
         -d expected_amount=10000 

    As you can see, we have went ahead and pre-filled the request with a valid sample API Key for security. Upon signing up for an account later, you will see your specific API key. Only you can open this API Key, so keep it safe!

  4. Once your request hits our server, our server will then return a response. Below is the response example of a successful request. You can refer the errors section to learn more about how we notify you about errors in requests.

        "owner_id": "5b614aa8e79f9214007244d4",
        "external_id": "123",
        "retail_outlet_name": "ALFAMART",
        "prefix": "TEST",
        "name": "Rika Sutanto",
        "payment_code": "TEST123456",
        "type": "USER",
        "expected_amount": 10000,
        "is_single_use": true,
        "expiration_date": "2049-07-31T17:00:00.000Z",
        "id": "5b61881e6cc2770f00117f73"

    You can read full parameter list in API reference

  5. Next, once a payment is detected by Instamoney, we will send callbacks for that accepted payment(s), notifying you of an incoming payment made to a specific Payment Code. Again, this is where you need to set up the callback URL to receive our callbacks.

    Please find the example of the callback content below.

    curl --include \
        --request POST \
        --header "Content-Type: application/json" \
        --header "X-CALLBACK-TOKEN: eG5kX2RldmVsb3BtZW50X1A0cURmT3NzME9DcGw4UnRLclJPSGphUVlOQ2s5ZE41bFNmaytSMWw5V2JlK3JTaUN3WjNqdz09Og==" \
        --data-binary "{
        fixed_payment_code_payment_id: \"5b61ffc470f7f3470165e7b3\",
        owner_id: \"5b614aa8e79f9214007244d4\",
        fixed_payment_code_id: \"5b61f49e6cc2770f00117f82\",
        external_id: \"123\",
        payment_code: \"TEST123456\",
        prefix: \"TEST\",
        retail_outlet_name: 'ALFAMART',
        amount: 20000,
        name: 'Rika Susanto',
        transaction_timestamp: \"2018-07-31T08:15:03.080Z\",
        updated: \"2016-10-10T08:15:03.404Z\",
        created: \"2016-10-10T08:15:03.404Z\"
    }" \


The ability of customers to make payment at any Alfamart convenience store is limited by the

  1. opening hours
  2. cash availability
  3. connectivity and availability of the payment system of each Alfamart convenience store

Payment Limitation

You can only pay in the range of IDR 10,000 to IDR 5,000,000

Learn More

Read more about testing and troubleshooting via our testing pages


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