E-Wallet Integration Guidelines - Indonesia
This document specifies the protocols operated between Airpay PLATFORM and the content provider or merchant system.
This document is intended for merchants who want to integrate Indonesian eWallet payments through a Single API provided by Airpay, using payment gateway. This integration allows you to accept payments from multiple Indonesian digital wallets using a standardized and efficient process.
This integration is a solution that simplifies the process of integrating multiple eWallets into a single unified API. With this approach, merchants or partners only need to integrate with one standardized endpoint, without having to deal with technical differences of each individual eWallet provider.
This is the supported e-wallets can used in Indonesia
| No. | E-Wallet | Status | Available Payment Method | Description |
|---|---|---|---|---|
| 1 | DANA | Available | QR / Invoice | QR: QR Code Invoice: Redirect to dashboard and will show all the provided payments from payment gateway |
| 2 | AstraPay | Available | Invoice | |
| 3 | OVO | Available | Invoice | |
| 4 | ShopeePay | Available | Invoice | |
| 5 | LinkAja | Available | Invoice |
Detail info:
QR is one of the payment methods provided by the payment gateway we use in Indonesia, . This method will generate a dynamic QR code that can be scanned by customers using supported eWallet applications. The customer will complete the payment by scanning the QR using their preferred eWallet app.
Invoice is one of the payment methods that is provided by the payment gateway we used in indonesia named . This payment method will redirect customer to dashboard to choose all the payment gateways have provided.
Dashboard sample:

E-Wallet Provider Integration Methods:
DANA E-Wallet Integration:
OVO, SHOPEEPAY, LINKAJA, ASTRAPAY, E-Wallet Integration:
Transaction Processing: When customers subscribe to merchant services, they can choose their preferred Indonesian e-wallet (DANA/OVO/SHOPEEPAY/ ASTRAPAT/LINKAJA) and payment method. All transactions are processed through AIRPAY's aggregation service, which handles the integration complexity and provides unified settlement to the merchant system.
This architecture provides redundancy, multiple payment options, and centralized transaction management for comprehensive e-wallet integration capabilities.
This API will using to merchant who want to integration to ewallet in Indonesia using payment gateway
Sample request:
https://xxx.xxxxxx.xxxx/api/v1/ext/ID/DANA/games/ewallet/request
Sample header:
apikey: 2611263d-2406-489c-9042-abcsd76f9b
Error Response List:
| Error Code | Error Message |
|---|---|
| 400 | Bad request |
| 500 | Internal system error |
| 900 | Invalid signature |
| 901 | Invalid token |
| 902 | Token expired |
| 903 | Invalid channel |
| 904 | Invalid telco |
| 905 | Invalid service id |
| 906 | Invalid msisdn |
| 907 | Invalid OTP |
| 9071 | Invalid OTP key, not found or expired |
| 9072 | Invalid OTP value or not found |
| 908 | Channel not active |
| 909 | Telco not active |
| 910 | Service id not active |
| 911 | Duplicate trxid |
| 912 | Invalid Source or source may not register to this service |
| country required | string <= 50 characters Country Name |
| channel required | string <= 50 characters Channel type Ex. (Dana, astrapay, ovo, shopeepay, linkaja) |
| service_ewallet required | string <= 50 characters Service name |
| apikey required | string <= 50 characters Api Key |
| name required | string <= 50 characters User name |
| email required | string <= 50 characters User email |
| msisdn required | string <= 50 characters User msisdn |
| amount required | string <= 50 characters Service amount |
| description required | string <= 50 characters Description text |
| currency required | string <= 50 characters Currency type (Ex: IDR, USD etc) |
| payment_method required | string <= 50 characters Payment method (Ex: QR, INVOICE - uppercase only). The description can be read in chapter 2 |
| card_number required | string <= 50 characters Card number |
| card_name required | string <= 50 characters Card name |
| cvc required | string <= 50 characters CVC number |
| expired_date required | string <= 50 characters Expired date |
| order_number required | string <= 50 characters Order number |
| address1 | string <= 50 characters User address 1 |
| address2 | string <= 50 characters User address 2 |
| postcode | string <= 50 characters Post Code |
| trxid | string <= 50 characters Transaction ID |
| clickid required | string <= 50 characters Click ID |
| pubid required | string <= 50 characters Publisher ID |
{- "name": "John Doe",
- "email": "john.doe@example.com",
- "msisdn": "628123456789",
- "amount": "10000",
- "description": "Payment for service",
- "currency": "IDR",
- "payment_method": "QR",
- "card_number": "1234567890123456",
- "card_name": "John Doe",
- "cvc": "123",
- "expired_date": "12/25",
- "order_number": "ORD123456789",
- "address1": "Jl. Sudirman No. 1",
- "address2": "Jakarta Pusat",
- "postcode": "10110",
- "trxid": "TRX123456789",
- "clickid": "CLICK123456",
- "pubid": "PUB123456"
}{- "code": 200,
- "message": "success",
- "data": {
- "trxid": "LINKIT25061750660948",
- "trx_date": "2025-06-23 06:42:27 UTC",
}
}Postback URL: Reply URL at CP Server (If Applicable) for Receiving postback
Example. 1 ) http://partner.com/callback
Note: Each merchant must provide only one postback URL. The furnished URLs should be intended for production purposes.
We expected the merchant to send a response “OK” when we successfully hit your postback
Sample:
Hit:https://domain/callback?trx_id=LINKIT25112222229&trx_date=2025-10-27T15:04:11+07:00&status=1&status_desc=Success, Response: OK, Status: 200 OK, Status Code: 200
Whenever users initiate an Postback request from their mobile phone, the Messaging Platform will forward the request to the content provider's URL using GET method.
Sample:
https://domain/callback?trx_id=LINKIT25112222229&trx_date=2025-10-27T15:04:11+07:00&status=1&status_desc=Success, Response: OK, Status: 200 OK, Status Code: 200
Status code list:
| Error Code | Description |
|---|---|
| 0 | FAILED |
| 1 | SUCCESS |
| 2 | UNKNOWN REASON |
| trxid required | string <= 150 characters Transaction ID from LINKIT360 |
| trx_date required | string <= 150 characters Transaction Date format YYYY-MM-DDTHH:MM:SS±HH:MM |
| status required | string <= 50 characters Status response |
| status_desc required | string <= 50 characters Status description |