JustPay
API Docs
LiveTest
API Documentation
Integrate JustPay into your platform to accept QRIS payments instantly.
Base URL
Use this base URL for all API endpoints in Production:
https://api.sdmcompany.id/v1For Sandbox/Testing environment:
https://sandbox.api.sdmcompany.id/v1Authentication
Authenticate your API requests by including your secret API Key in the Authorization header.
Authorization: Bearer YOUR_API_KEYYou can generate and manage your API keys in the API Settings menu. Keep your secret keys secure and never share them publicly.
API Endpoints
POST
/qris/generateGenerate a new dynamic QRIS code for payment.
Request Body
{
"amount": 50000,
"notes": "Order-123", // Optional
"expires_in": 900 // Optional (seconds)
}Response
200 OK
{
"status": "success",
"data": {
"qris_id": "req-a1b2c3d4",
"qris_string": "00020101021226590014...",
"amount": 50000,
"status": "PENDING",
"expired_at": "2026-05-24T15:00:00Z"
}
}Code Examples
cURL
curl -X POST https://api.sdmcompany.id/v1/qris/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 50000,
"notes": "Order-123"
}'Node.js (fetch)
const response = await fetch('https://api.sdmcompany.id/v1/qris/generate', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ amount: 50000, notes: 'Order-123' })
});
const data = await response.json();Webhook Integration
Webhooks allow you to receive real-time notifications when a payment is detected in your Grab Merchant account. Configure your endpoint URL in the Settings page.
Important: The
net_amount automatically subtracts the 0.7% MDR fee charged by Grab. Use this value for your accounting to avoid discrepancies. Webhook Payload (POST)
{
"event": "payment_received",
"data": {
"transaction_id": "tx-a1b2c3d4-1682345678",
"qris_id": "req-a1b2c3d4",
"amount": 50000,
"net_amount": 49650,
"paid_at": "2026-05-23T10:45:00.000Z"
}
}