API Documentation

Panduan lengkap untuk mengintegrasikan Sewa Pay payment gateway.

Base URL

https://sewapay.id

Authentication

Semua request API memerlukan header berikut:

  • X-PG-API-Key — API key Anda (format: pg_...)
  • X-PG-Signature — HMAC-SHA256 signature
  • X-PG-Timestamp — Unix timestamp (seconds)

Signature dibuat dengan HMAC-SHA256 dari timestamp.body menggunakan secret key:

Untuk GET request, sign dengan body kosong: signature = HMAC("timestamp.")

Node.js - Generate Signature
const crypto = require('crypto');
const timestamp = Math.floor(Date.now() / 1000);
const body = JSON.stringify({ amount: 50000, method: "QRIS", reference: "ORDER-001" });
const signature = crypto.createHmac('sha256', SECRET_KEY).update(`${timestamp}.${body}`).digest('hex');

Create Payment

POST/api/v1/payments/create

Buat pembayaran baru via QRIS atau Binance Pay.

Request Body (QRIS)
{
  "amount": 50000,
  "method": "QRIS",
  "reference": "ORDER-001",
  "description": "Capcut Premium 7 Hari"
}

* description bersifat opsional.

Response (QRIS)
{
  "id": "tx_abc123...",
  "status": "PENDING",
  "amount": 50000,
  "fee": 200,
  "total_payment": 50200,
  "method": "QRIS",
  "reference": "ORDER-001",
  "description": "Capcut Premium 7 Hari",
  "payment_data": {
    "qr_string": "00020101..."
  },
  "expires_at": "2026-08-20T22:00:00.000Z"
}
Request Body (Binance)
{
  "amount": 50000,
  "method": "BINANCE",
  "reference": "ORDER-001",
  "description": "Capcut Premium 7 Hari"
}
Response (Binance)
{
  "id": "tx_abc123...",
  "status": "PENDING",
  "amount": 50000,
  "fee": 0,
  "total_payment": 50000,
  "method": "BINANCE",
  "reference": "ORDER-001",
  "description": "Capcut Premium 7 Hari",
  "payment_data": {
    "pay_id": "187548062",
    "usdt_amount": 2.8345,
    "rate": 17812
  },
  "expires_at": "2026-08-20T22:00:00.000Z"
}

Check Payment Status

GET/api/v1/payments/status?id=tx_abc123

Cek status pembayaran berdasarkan ID atau reference.

Headers: X-PG-API-Key + X-PG-Timestamp (no signature required for GET)

Query: ?id=tx_abc123 atau ?reference=ORDER-001

Response
{
  "id": "tx_abc123...",
  "reference": "ORDER-001",
  "amount": 50000,
  "method": "QRIS",
  "status": "COMPLETED",
  "description": "Capcut Premium 7 Hari",
  "fee": 200,
  "net_amount": 50000,
  "payment_data": { "qr_string": "..." },
  "expires_at": "...",
  "completed_at": "...",
  "created_at": "..."
}

Cancel Payment

POST/api/v1/payments/cancel

Batalkan pembayaran yang masih PENDING.

Request Body
{
  "id": "tx_abc123"
}

Verify Binance Payment

POST/api/v1/payments/verify-binance

Verifikasi manual pembayaran Binance Pay.

Request Body
{
  "id": "tx_abc123",
  "binance_order_id": "447972557986332672"
}

Payment Methods

GET/api/v1/payments/methods

List metode pembayaran yang tersedia.

Response
{
  "methods": ["QRIS"],
  "binance": { "enabled": true, "payId": "187548062" }
}

Webhook

Sewa Pay mengirim POST request ke webhook URL Anda saat pembayaran selesai. Set webhook URL di halaman Pengaturan.

Headers:

  • X-PG-Signature — HMAC-SHA256 signature (format sama dengan API)
  • X-PG-Timestamp — Unix timestamp

Events: payment.completed, payment.failed, payment.cancelled

Webhook Payload
{
  "event": "payment.completed",
  "data": {
    "id": "tx_abc123",
    "reference": "ORDER-001",
    "amount": 50000,
    "method": "QRIS",
    "status": "COMPLETED",
    "completed_at": "2026-08-20T21:05:30.000Z"
  }
}

Status Values

StatusDeskripsi
PENDINGMenunggu pembayaran
COMPLETEDPembayaran berhasil
FAILEDPembayaran gagal
CANCELLEDPembayaran dibatalkan

Rate Limits

EndpointLimit
Create Payment100 requests/minute
Check Status200 requests/minute

Code Example

Node.js - Full Example
const crypto = require('crypto');
const axios = require('axios');

const API_KEY = 'pg_your_api_key';
const SECRET_KEY = 'sk_your_secret_key';
const BASE_URL = 'https://sewapay.id';

async function createPayment(amount, method, reference) {
  const timestamp = Math.floor(Date.now() / 1000);
  const body = JSON.stringify({ amount, method, reference });
  const signature = crypto.createHmac('sha256', SECRET_KEY)
    .update(`${timestamp}.${body}`)
    .digest('hex');

  const res = await axios.post(`${BASE_URL}/api/v1/payments/create`, body, {
    headers: {
      'Content-Type': 'application/json',
      'X-PG-API-Key': API_KEY,
      'X-PG-Signature': signature,
      'X-PG-Timestamp': String(timestamp),
    },
  });
  return res.data;
}

Butuh bantuan integrasi?

Daftar & Mulai Integrasi