Main endpoint for processing purchases. POS routes use HMAC authentication, not bearer tokens.
fee_amount reflects the effective fee resolved for the transaction. If your fee configuration charges the subscriber or the processor for POS payments, that configured value is returned here instead of always being 0.00.
Request
API key ID assigned to the POS integration
RFC3339 timestamp used in the HMAC signature (example: 2026-03-10T12:00:00Z)
Hex-encoded HMAC-SHA256 of METHOD + "\n" + PATH + "\n" + TIMESTAMP + "\n" + BODY
Body Parameters
Card serial number read from NFC
Registered merchant identifier
Merchant display name shown on receipts; defaults to merchant_id when omitted
Payment amount (e.g., 500.00)
currency
string
default: "SLE"
required
Currency code
Merchant’s unique transaction reference
Processor account ID that receives the funds
Response
Whether payment was approved
Approval code for the successful payment
Formatted transaction amount
Formatted remaining card balance
Formatted effective fee charged for the transaction based on the active POS fee configuration
Examples
BODY = '{"card_serial":"OLIV0001","merchant_id":"MERCH_XYZ","merchant_name":"Supermart Ltd","terminal_id":"TERM_001","amount":"1500.00","currency":"SLE","pin":"1234","transaction_ref":"ORDER-998877","processor_id":"proc-uuid-123"}'
TIMESTAMP = '2026-03-10T12:00:00Z'
SIGNATURE = $( printf 'POST\n/api/v1/pos/payment\n%s\n%s' " $TIMESTAMP " " $BODY " | openssl dgst -sha256 -hmac " $OLIVE_HMAC_SECRET " -hex | sed 's/^.* //' )
curl -X POST "https://demo.api.vultlocal.com/api/v1/pos/payment" \
-H "X-API-Key-ID: $OLIVE_API_KEY_ID " \
-H "X-Timestamp: $TIMESTAMP " \
-H "X-Signature: $SIGNATURE " \
-H "Content-Type: application/json" \
-d " $BODY "
200 Approved
400 Declined
400 Invalid PIN
{
"success" : true ,
"message" : "Payment successful" ,
"transaction_id" : "txn_pos_12345" ,
"approval_code" : "882211" ,
"amount" : "1,500.00 SLE" ,
"remaining_balance" : "48,500.00 SLE" ,
"fee_amount" : "15.00 SLE"
}
Errors
Status Code Description 400 Validation or business error Invalid payload, declined transaction, or bad PIN 401 HMAC auth error Missing/invalid X-API-Key-ID, X-Timestamp, or X-Signature 500 Internal error Server or downstream processor failure
Bearer authentication header of the form Bearer <token> , where <token> is your auth token.
Accepts decimal format like "150.00" or "150"
Supports any alphanumeric: CARD0001, 48290173K, etc.
Processor account that receives the funds
Display name for receipts
The response is of type object .