POS Integration Guide
This guide walks POS terminal vendors through a complete integration with the RSA Platform POS API.
Prerequisites
- A
PosAppclient registered by the tenant admin (POST /admin/api/v1/clients) - Your
X-Api-Keystored securely in terminal configuration - Network access to the POS API at
https://api.yourchain.com/pos(orhttp://localhost:5003in dev)
Authentication
POS terminals authenticate via the X-Api-Key header. No token refresh required.
curl "http://localhost:5003/pos/api/v1/..." \
-H "X-Api-Key: rsa_live_your_key_here"
See API Keys for key creation and rotation.
SLA & Rate Limits
| Constraint | Value |
|---|---|
| Response time SLA | 200ms p95 |
| Rate limit | 500 requests/min (fixed window per API key) |
| Basket idempotency | On pos_transaction_id |
Design your POS client to fail-open for offer resolution. If the POS API is unreachable, allow the transaction to proceed without offers rather than blocking the checkout.
Integration Flow
Step 1: Member Lookup
When the member scans their card or enters their phone:
/pos/api/v1/members/lookup?phone=5551234567{
"memberId": "3fa85f64-...",
"firstName": "Jane",
"tier": "Gold"
}
Step 2: Resolve Applicable Offers
Send the basket UPCs to get applicable offers:
/pos/api/v1/offers/resolve{
"memberId": "3fa85f64-...",
"storeId": "store-uuid",
"upcs": ["021000600003", "041220576836"]
}
Response includes appliedOffers[] with discount amounts per UPC.
Step 3: Create Basket
/pos/api/v1/baskets{
"posTransactionId": "TXN-2026-001234",
"storeId": "store-uuid",
"memberId": "3fa85f64-...",
"items": [
{ "upc": "021000600003", "quantity": 2, "unitPrice": 3.99 }
],
"appliedOffers": [
{ "offerId": "offer-uuid", "discountAmount": 1.50 }
]
}
posTransactionId is your idempotency key. If the same ID is submitted again (e.g., network retry), the API returns 200 OK with the existing basket — not a duplicate. New baskets return 201 Created.
Step 4: Finalize Basket
After payment is captured:
/pos/api/v1/baskets/{id}/finalizeStep 5: Earn Loyalty Points
/pos/api/v1/loyalty/earn{
"memberId": "3fa85f64-...",
"basketId": "basket-uuid",
"referenceId": "TXN-2026-001234",
"points": 125,
"storeId": "store-uuid"
}
Voiding a Transaction
If the transaction is cancelled before finalization:
/pos/api/v1/baskets/{id}/voidSee Basket Lifecycle for the full state machine.
Feature Flags at POS
Check which features are enabled for your store at startup:
/pos/api/v1/stores/{storeId}/featuresUse the response to conditionally show digital receipt options, fuel offer panels, etc.