Skip to main content

Atome QR

Accept offline QR code payments from Atome users by displaying a scannable QR code that customers authorize through their Atome app.

Overviewโ€‹

Atome QR is an offline QR-based payment method that allows customers to pay using their Atome Buy Now Pay Later account. Unlike the standard Atome redirect flow, customers scan a merchant-generated QR code and authorize payment directly in their Atome app.

Key Features:

  • โœ… Offline authorization - Customer scans QR and pays in app
  • โœ… Buy Now Pay Later - 3 interest-free installments
  • โœ… No redirect needed - QR code displayed on merchant side
  • โœ… 3 markets - Thailand, Singapore, Malaysia
  • โœ… Instant approval - Real-time credit decision in app
Enablement Required

Contact support@omise.co to enable Atome QR for your merchant account.

Supported Regionsโ€‹

RegionCurrencyMin AmountMax AmountAPI Version
ThailandTHBเธฟ20.00เธฟ50,000.002017-11-02
SingaporeSGD$1.50$3,000.002017-11-02
MalaysiaMYRRM10.00RM5,000.002017-11-02

How It Worksโ€‹

Payment Flow:

  1. Merchant creates Atome QR source
  2. QR code displayed at checkout or POS
  3. Customer opens Atome app and scans QR
  4. Atome performs instant credit check
  5. Customer reviews 3-installment plan
  6. Customer confirms first payment
  7. Merchant receives webhook confirmation

Typical completion time: 30 seconds - 2 minutes

Implementationโ€‹

Step 1: Create Sourceโ€‹

curl https://api.omise.co/sources \
-u $OMISE_PUBLIC_KEY: \
-d "amount=50000" \
-d "currency=SGD" \
-d "type=atome_qr"

Step 2: Create Chargeโ€‹

curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=50000" \
-d "currency=SGD" \
-d "source=src_test_xxx"

Combined Requestโ€‹

Create source and charge in one request:

curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=50000" \
-d "currency=SGD" \
-d "source[type]=atome_qr"

Step 3: Display QR Codeโ€‹

// Display QR code on your checkout page or POS
const qrCodeUrl = charge.source.scannable_code.image.download_uri;

// In your HTML
document.getElementById('qr-code').src = qrCodeUrl;

Step 4: Handle Webhookโ€‹

app.post('/webhooks/omise', (req, res) => {
const event = req.body;

if (event.key === 'charge.complete') {
const charge = event.data;

if (charge.status === 'successful') {
// Payment successful - fulfill order
fulfillOrder(charge.metadata.order_id);
} else if (charge.status === 'failed') {
// Handle failure
handleFailedPayment(charge);
}
}

res.status(200).send('OK');
});

QR Code Expirationโ€‹

The default QR code expiration is 12 hours. You can customize this between 30 seconds and 12 hours using the expires_at parameter:

curl https://api.omise.co/charges \
-u $OMISE_SECRET_KEY: \
-d "amount=50000" \
-d "currency=SGD" \
-d "source=src_test_xxx" \
-d "expires_at=2024-12-31T23:59:59Z"

Charge Status Valuesโ€‹

StatusDescription
pendingQR code displayed, awaiting customer scan
successfulPayment completed
failedPayment declined or processing error
expiredQR code validity period ended

Failure Codesโ€‹

CodeDescription
payment_expiredQR code validity period ended
payment_rejectedAtome declined the transaction
failed_processingGeneral authorization failure

Refundsโ€‹

Atome QR charges can be partially or fully refunded within 60 days of the transaction date.

// Full or partial refund
const refund = await omise.charges.refund('chrg_test_xxx', {
amount: 25000 // Partial refund of SGD 250.00
});

Best Practicesโ€‹

  1. Show installment breakdown - Display 3-payment schedule before QR
  2. Set appropriate expiry - Match QR validity to checkout session
  3. Clear instructions - Guide customers to open Atome app first
  4. Webhook handling - Always verify via webhook, not just polling
  5. Display eligibility - Show Atome eligibility requirements

FAQโ€‹

What is Atome QR?

Atome QR is an offline QR-based Buy Now Pay Later payment method. Unlike the standard Atome redirect flow, customers scan a QR code displayed by the merchant and authorize the payment directly in their Atome app. The purchase is split into 3 interest-free monthly installments.

What's the difference between Atome and Atome QR?

Atome (redirect): Customer is redirected to Atome's website/app to complete payment. Better for online checkout flows.

Atome QR: Merchant displays a QR code that the customer scans with their Atome app. Better for in-store POS or when you want to keep customers on your page.

Both split the payment into 3 interest-free installments.

How long is the QR code valid?

By default, Atome QR codes are valid for 12 hours. You can customize this between 30 seconds and 12 hours using the expires_at parameter when creating the charge.

What happens if the customer fails the credit check?

If Atome declines the customer's application (insufficient credit, account issues, etc.), the charge will fail with a payment_rejected failure code. You should offer alternative payment methods in this case.

Can I refund Atome QR payments?

Yes, both full and partial refunds are supported within 60 days of the original transaction. Atome handles refunding the customer's installments accordingly.

What are the transaction limits?

Limits vary by region:

  • Thailand: เธฟ20 - เธฟ50,000 THB
  • Singapore: $1.50 - $3,000 SGD
  • Malaysia: RM10 - RM5,000 MYR

Individual customer limits may be lower based on their Atome credit limit.