Choosing a Payment Type: UEN vs Mobile vs VPA

When to use UEN, mobile number, or VPA when generating a Singapore PayNow QR code, with a complete request example for each.

Every request to /api/v1/generate needs a payment_type. It selects which PayNow proxy the QR code resolves to and which other fields are required. There are three options: uen, mobile, and vpa.

UEN — for businesses and entities

Use uen when collecting payments to a registered Singapore business. It requires both uen (max 25 characters) and merchant_name (max 25 characters). This is the most common choice for storefronts and invoicing.

curl -X POST https://developers.sgpaynowqr.com/api/v1/generate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sgpn_your_api_key_here" \
  -d '{
    "payment_type": "uen",
    "uen": "201234567A",
    "merchant_name": "My Company",
    "amount": 25.00,
    "reference": "INV001"
  }'

Mobile — for individuals

Use mobile to pay a person registered to PayNow by phone number. It requires mobile_number in the format (+65)?[89]XXXXXXX — an optional +65 prefix followed by an 8-digit number starting with 8 or 9.

curl -X POST https://developers.sgpaynowqr.com/api/v1/generate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sgpn_your_api_key_here" \
  -d '{
    "payment_type": "mobile",
    "mobile_number": "+6591234567",
    "amount": 10.50
  }'

VPA — for bank-specific proxies

Use vpa when you have a Virtual Payment Address that targets a specific bank (for example a mobile number suffixed with a bank code). It requires the vpa field.

curl -X POST https://developers.sgpaynowqr.com/api/v1/generate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: sgpn_your_api_key_here" \
  -d '{
    "payment_type": "vpa",
    "vpa": "+6591234567#OCBC",
    "amount": 5.00,
    "reference": "DONATION"
  }'

Common optional fields

Regardless of payment type, you can add reference (alphanumeric, max 25 chars), expiry (1h/2h/6h/12h/24h/none, default 24h), qr_color, qr_size (200/300/400), and include_image. See the full API reference for every parameter and its constraints, or read Handling Errors and Rate Limits next.