Text Link
Create Payment Routing
Text Link
Payment Routing Callback
Text Link
Check Payment Routing Status
Text Link
Simulate Staging Callback
Text Link
List of Payment Routing Status
Text Link
Payment Routing Response Codes

Create Payment Routing

Create a new payment routing transaction for QRIS

Endpoint:

[Production] POST https://partner.rem.id/api/payment-routing/create-transaction

[Staging] POST https://api-demo.rem.id/api/payment-routing/create-transaction

Request

Parameter Type Required Description
partner_user_id String FALSE Unique identifier for the partner user
partner_trx_id String FALSE Unique partner transaction ID. Will automatically be generated if left empty.
need_frontend String TRUE boolean
Whether frontend integration is needed
sender_email String FALSE Email address of the sender
receive_amount Integer TRUE integer
Amount to be received
list_enable_payment_method String TRUE Payment method to enable
list_enable_sof Numeric TRUE Source of funds to enable
trx_expiration_time Boolean FALSE Transaction expiration time (optional)

Response

Parameter Type Object Description
trx_id string   Internal transaction ID
partner_trx_id string   Partner transaction ID
receive_amount integer   Integer Amount to be received
trx_expiration_time string   Transaction expiration time
payment_info object   Payment information including QRIS URL
    qris_url URL for QRIS image
payment_method string   Payment method used

List of Allowed Payment Methods and SOF

Below listed the current possible values for both list_enable_payment_method and list_enable_sof

  • Payment method: QRIS
  • SOF: QRIS

The table below lists the valid expiration times for transactions based on the payment method and source of funds.

Payment Method SOF Default Expiration Time Expiration Time
QRIS QRIS 30 minutes
Limited to 1 minute - 1 hour after the request is sent. The QRIS validity period is dynamic within the aforementioned limit.
{
  "partner_user_id": "e8df1d97-56c2-4fcf-9aa6-0b42d688ba7b",
  "partner_trx_id": "f33d4b60-0297-4810-b7c9-7e6c067a739c",
  "need_frontend": true,
  "sender_email": "sender@example.com",
  "receive_amount": 16000,
  "list_enable_payment_method": "QRIS",
  "list_enable_sof": "QRIS",
  "trx_expiration_time": ""
}
Request Samples
200
{
  "status": {
    "code": "000",
    "message": "Success"
  },
  "trx_id": "8a26e1dc-b4be-4378-a56f-4aa9ce00606f",
  "partner_trx_id": "ec87db58-779d-487f-9ca7-ba9ab39ffa38",
  "receive_amount": 1000,
  "trx_expiration_time": "2025-08-02 09:15:57",
  "payment_info": {
    "qris_url": "https://checkout.rem.id/api/qris/image/8666047d-d653-461d-8429-adb07a4uhi1"
  },
  "payment_method": "QRIS"
}
500
{
  "status": {
    "code": "500",
    "message": "Internal server error"
  }
}
Response Samples

Payment Routing Callback

Once user successfully do the payment, our system will make a callback via HTTP POST request to your system

Callback for Delayed Settlement (Non-Real Time Settlement)

If your settlement is non-real time, for every transaction whose payment method is settled H+>0 from the time of transaction, you will receive two callbacks with details as follows:

1st Callback -> To be sent after your customer successfully executes the transaction. For example, if your customer executes the transaction on 11 May 2021 at 14:00:00, that is also when we send the 1st Callback to you. In the 1st callback, the settlement status is set to WAITING (because it is not yet settled to your Account Statement balance)

2nd Callback -> To be sent after the settlement status is changed from WAITING into SUCCESS. For example, if the settlement status is changed into SUCCESS on 12 May 2021 at 15:00:00, that is also when we send the 2nd Callback to you. In the 2nd callback, the settlement status is SUCCESS

Callback Parameters

Parameter Type Object Description
trx_id String   payment routing transaction id
partner_trx_id String   Partner transaction ID
received_amount String   Amount to be received.
payment_status String   Acceptance transaction status
trx_expiration_time String   Transaction expiration time
need_frontend Boolean   boolean
Partner need UI or not, if true, we will route to payment link, otherwise will be routed to payment aggregator.
payment_received_time String   Indicates the time when payment routing is marked as COMPLETE (this parameter will only be sent once status of the payment routing is set to ‘COMPLETE’).
settlement_time String   The timestamp (in UTC+7) indicating when the fund will be settled to partner’s account statement (this parameter will only be sent once status of the payment routing is set to ‘COMPLETE’).
settlement_status String   The status of the settlement (this parameter will only be sent once status of the payment routing is set to ‘COMPLETE’).
settlement_type String   Indicate if a transaction will be settled in realtime/non-realtime. (this parameter will only be sent once status of the payment routing is set to ‘COMPLETE’).
payment_method String   The payment method used by user to complete a payment. Conditional, only exist if request need_frontend is FALSE.
sender_bank String   The bank code used by a payer to do payment. Conditional, only exist if request need_frontend is FALSE. For QRIS Payment Method, it refers to the QRIS vendor integrated with our system.
payment_info Object   Payment info Object
  String qris_url The URL of QR image; conditional, only exist if request need_frontend is FALSE and payment_method is QRIS. This returned URL can be accessed as long as the QRIS transaction still valid.
  String payment_reference_number Identifier of a payment attempt when the end user successfully completes the payment. The reference number is also stated in the end user’s receipt/proof of transaction. Note that if a QRIS transaction is paid using OVO, the payment reference number is only the first 12 characters from the given transaction code.
  String payment_checkout_url generated url for payment link; conditional, only exist if request need_frontend is TRUE
{
  "trx_id": "avadav8989-vasfds-afdasdasdfw",
  "partner_trx_id": "myid-11",
  "receive_amount": 10000,
  "payment_status": "COMPLETE",
  "payment_received_time": "2025-07-01 20:12:30",
  "trx_expiration_time": "2025-07-01 20:15:00",
  "settlement_time": "2025-07-02 15:00:00",
  "settlement_type": "NON_REALTIME",
  "settlement_status": "WAITING",
  "need_frontend": true,
  "payment_method": "QRIS",
  "sender_bank": "some bank name",
  "payment_info": {
    "payment_checkout_url": "https://pay.rem.id/lalilulelo"
  }
}
Request Samples
Response Samples

Check Payment Routing Status

Check the status of a payment routing transaction

Endpoint:

[Production] POST https://partner.rem.id/api/payment-routing/check-status

[Staging] POST https://api-demo.rem.id/api/payment-routing/check-status

⚠️NOTE!

All requests made must contain "partner_trx_id" or "payment_reference_number", but not both at the same time, otherwise will return an error.

Request

Parameter Type Required Description
partner_trx_id String FALSE Partner transaction ID to check status for
send_callback Boolean FALSE Whether to send callback notification
payment_reference_number String FALSE Unique reference ID for QRIS transactions. The reference number is stated in the end user’s receipt/proof of transaction. Note that if a QRIS transaction is paid using OVO, the payment reference number is only the first 12 characters from the given transaction code

Response

Parameter Type Object Description
trx_id String   Internal transaction ID
partner_user_id String   Partner user ID that you defined in the request parameter
payment_reference_number String   Identifier of a payment attempt when the end user successfully completes the payment. The reference number is also stated in the end user’s receipt/proof of transaction. Note that if a QRIS transaction is paid using OVO, the payment reference number is only the first 12 characters from the given transaction code.
payment_received_time String   Indicates the time when payment routing is marked as COMPLETE (this parameter will only be sent once status of the payment routing is set to ‘COMPLETE’).
settlement_time String   The timestamp (in UTC+7) indicating when the fund will be settled to partner’s account statement (this parameter will only be sent once status of the payment routing is set to ‘COMPLETE’).
partner_trx_id String   Partner transaction ID
request_amount Integer   Original requested amount
received_amount Integer   Amount actually received
payment_status String   Current payment status
trx_expiration_time String   Transaction expiration time
need_frontend Boolean   Whether frontend integration is needed
payment_info Object   Payment information including QRIS URL
    qris_url QRIS payment URL
    payment_checkout_url generated url for payment link; conditional, only exist if request need_frontend is TRUE
payment_method String   Payment method used
sender_bank String   Sender's bank information
{
  "partner_trx_id": "YOUR-PARTNER-TRX-ID",
  "send_callback": false
}
Request Samples
200
{
  "status": {
    "code": "000",
    "message": "Success"
  },
  "trx_id": "0cecf477-117a-4135-b6a1-ekjhj224a987",
  "partner_trx_id": "YOUR-PARTNER-TRX-ID",
  "request_amount": 15000,
  "received_amount": 0,
  "payment_status": "EXPIRED",
  "trx_expiration_time": "2025-07-31 11:24:33",
  "need_frontend": false,
  "payment_info": {
    "qris_url": "https://checkout.rem.id/api/qris/image/e8f04319-ea5e-4e78-899d-75f1f6kjhi"
  },
  "payment_routing": [],
  "payment_method": "QRIS",
  "sender_bank": "dana",
  "use_linked_account": false
}
500
{
  "status": {
    "code": "500",
    "message": "Internal server error"
  }
}
Response Samples

Simulate Staging Callback

Simulate payment on staging environment, currently only available for QRIS transaction

Endpoint:

[Staging] POST https://api-demo.rem.id/api/payment-routing/simulate-callback

Request

Parameter

Type

Required

Description

payment_routing_id

String

TRUE

Id given in creation response as trx_id

Response

Parameter

Type

Object

Description

error

Object

 

Details why the request is failed, will be empty if simulation is successfull

 

 

Code

 
 

 

Message

 

success

Boolean

 

if true, attempt to simulate is successfull

{
  "payment_routing_id": "aeaedae8-7e92-4c14-b923-b944667190902"
}
Request Samples
200
{
  "error": null,
  "success": true
}
500
{
  "status": {
    "code": "500",
    "message": "Internal server error"
  }
}
Response Samples

List of Payment Routing Status

List of all possible payment routing status:

  • CREATED: For Payment Link, Payment Link has been created.
  • WAITING_PAYMENT: For Payment Link, user already choose a payment method in payment link but has not done the payment yet.
  • COMPLETE: Money has been successfully received by recipients.
  • EXPIRED: Payment Link has been expired
Request Samples
Response Samples

Payment Routing Response Codes

Below is the list of response codes for Payment Routing:

Response Code State Description
0 Final
Response success without error
400 Final
Request is rejected (Amount is not valid)
400 Final
Request is rejected (Amount is empty)
400 Final
Request is rejected (Invalid list payment method)
400 Final
Request is rejected (Invalid list source of fund)
400 Final
Request is rejected (Format expiration is yyyy-MM-dd HH:mm:ss and must be between 1 minute and 1 hour)
400 Final
Request is rejected (Invalid config product disburse or acceptance)
402 Final
Request is rejected (QR is currently under maintenance)
429 Final
Request Rejected (Too Many Request to specific endpoint)
203 Final
Request is rejected (Duplicate Partner Tx Id)
204 Final
Request is Rejected (Partner Trx ID not found on deactivation request)
254 Final
Request is Rejected (User credential not found, blocked, or invalid on deactivation request)
300 Non Final
Request is rejected (Deactivation request failed)
901 Non Final General Error
Request Samples
Response Samples