OrderKuota Proxy API

Payment Gateway Proxy for OrderKuota QRIS

v1.0.0 REST API

Base URL

https://orkut.rizzskibidi.my.id

Response Format

All endpoints return JSON with consistent structure:

{
  "success": true,
  "data": { ... }
}

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Human readable message"
  }
}

Endpoints

POST /api/auth/otp

Request OTP for authentication

Request Body

{
  "username": "your_username",
  "password": "your_password"
}

Response

{
  "success": true,
  "data": {
    "results": {
      "otp_value": "u***@gmail.com"
    }
  }
}
POST /api/auth/token

Get authentication token using OTP

Request Body

{
  "username": "your_username",
  "otp": "123456"
}

Response

{
  "success": true,
  "data": {
    "results": {
      "token": "abc123:xyz789",
      "id": "12345",
      "name": "User Name",
      "balance": "100000"
    }
  }
}
POST /api/qris/generate

Generate dynamic QRIS from static QRIS with unique amount

Request Body

{
  "username": "your_username",
  "token": "abc123:xyz789",
  "amount": 50000,
  "qris_static": "00020101021126670016COM.NOBUBANK.WWW..."
}

Response

{
  "success": true,
  "data": {
    "transaction_id": "550e8400-e29b-41d4-a716-446655440000",
    "base_amount": 50000,
    "unique_suffix": 123,
    "final_amount": 50123,
    "qris_string": "00020101021226...",
    "expires_at": 1734567890
  }
}

Note: Converts static QRIS to dynamic QRIS. Amount will be added with unique suffix (1-999) to prevent collision. QRIS expires in 10 minutes.

POST /api/qris/check

Check payment status

Request Body

{
  "username": "your_username",
  "token": "abc123:xyz789",
  "transaction_id": "550e8400-e29b-41d4-a716-446655440000"
}

Response (Pending)

{
  "success": true,
  "data": {
    "status": "pending",
    "final_amount": 50123,
    "expires_in": 540
  }
}

Response (Paid)

{
  "success": true,
  "data": {
    "status": "paid",
    "final_amount": 50123,
    "paid_at": 1734567890
  }
}

Response (Expired)

{
  "success": true,
  "data": {
    "status": "expired"
  }
}
POST /api/account/balance

Check account balance

Request Body

{
  "username": "your_username",
  "token": "abc123:xyz789"
}

Response

{
  "success": true,
  "data": {
    "balance": 100000,
    "qris_balance": 50000
  }
}
POST /api/qris/image

Generate QR code image from QRIS string

Request Body

{
  "qris_string": "00020101021226...",
  "size": 300,
  "format": "png"
}

Response

{
  "success": true,
  "data": {
    "qr_image": "data:image/png;base64,iVBORw0KGgo...",
    "size": 300,
    "format": "png"
  }
}

Note: Size range: 100-1000px. Format: png or jpeg. Returns base64 data URL.

GET /api/health

Health check endpoint

Response

{
  "success": true,
  "data": {
    "status": "ok",
    "timestamp": 1734567890
  }
}

Example Usage

JavaScript / Node.js

const BASE_URL = 'https://orderkuota-proxy.vercel.app';

async function generatePayment(username, token, amount, qrisStatic) {
  const res = await fetch(`${BASE_URL}/api/qris/generate`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ username, token, amount, qris_static: qrisStatic })
  });
  return res.json();
}

async function checkPayment(username, token, transactionId) {
  const res = await fetch(`${BASE_URL}/api/qris/check`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ 
      username, 
      token, 
      transaction_id: transactionId 
    })
  });
  return res.json();
}

// Usage
const QRIS_STATIC = '00020101021126670016COM.NOBUBANK.WWW...';
const payment = await generatePayment('user', 'token', 50000, QRIS_STATIC);
console.log('Pay:', payment.data.final_amount);
console.log('QRIS:', payment.data.qris_string);

// After user pays, check status
const status = await checkPayment('user', 'token', payment.data.transaction_id);
if (status.data.status === 'paid') {
  console.log('Payment received!');
}

cURL

# Generate QRIS
curl -X POST https://orderkuota-proxy.vercel.app/api/qris/generate \
  -H "Content-Type: application/json" \
  -d '{"username":"user","token":"abc:xyz","amount":50000,"qris_static":"00020101021126670016COM.NOBUBANK.WWW..."}'

# Check Payment
curl -X POST https://orderkuota-proxy.vercel.app/api/qris/check \
  -H "Content-Type: application/json" \
  -d '{"username":"user","token":"abc:xyz","transaction_id":"uuid-here"}'

Error Codes

Code Description
MISSING_PARAMSRequired parameters missing
INVALID_AMOUNTAmount must be positive number
OTP_ERRORFailed to request OTP
TOKEN_ERRORFailed to get token
QRIS_ERRORFailed to generate QRIS
CHECK_ERRORFailed to check payment
BALANCE_ERRORFailed to get balance
IMAGE_ERRORFailed to generate QR image

Tools

Get Token & QRIS Static