POS Remote Request
The POS Remote Request suite of APIs allows you to remotely invoke a payment on a POS terminal and requery for the status of the transaction.
Environment base URL:
Base URL: https://api-d.squadco.com/softpos/
Authorization keys are to be passed via Headers as a Bearer token.
Example: Authorization: Bearer sandbox_sk_94f2b798466408ef4d19e848ee1a4d1a3e93f104046f.
Create Payment Request
This endpoint enables you to send a payment request to a POS terminal. The terminal receives the request and processes the card payment.
This endpoint allows you send a payment to a POS terminal.
Parameters
Header
Authorization*
String
API keys (Secret Key) that authorize your transactions and gotten from your squad dashboard
Body
terminal_id*
String
The ID of the POS terminal to invoke
amount*
Number
Amount to charge (in kobo). Must be greater than 0
account_type*
String
Account type: default, savings, current, or credit
Sample POS Remote Request
{
"terminal_id": "2035AB01",
"amount": 350000,
"account_type": "default"
}
Responses
{
"status": 200,
"success": true,
"message": "Payment request created",
"data": {
"request_ref": "prq_01HV8M3K5R7XM6QEGG1YAEVF"
}
}
{
"status": "400",
"message": "Validation error (missing fields, invalid amount)",
"data": {}
}
{
"status": "401",
"message": "Invalid or missing token",
"data": {}
}
Requery Payment Status
This endpoint allows you to requery the terminal using the request reference to confirm if payment is completed or not.
This endpoint allows you requery the status of a request
Parameters
Header
Authorization*
String
API keys (Secret Key) that authorize your transactions and gotten from your squad dashboard
Body
request_ref*
String
The reference returned from the create endpoint
Sample Request
GET https://api-d.squadco.com/softpos/pos/remote-request/prq_01HV8M3K5R7XM6QEGG1YAEVF
Responses
{
"status": 200,
"success": true,
"message": "Success",
"data": {
"status": "success",
"id": 12345,
"merchant_request_ref": "prq_01HV8M3K5R7XM6QEGG1YAEVF",
"merchant_id": "MER_001",
"terminal_id": "2035AB01",
"amount": 350000,
"currency": "NGN",
"payment_method": "card",
"transaction_type": "Purchase",
"payment_info": {
"card_pan": "506100******1234",
"card_exp": "2512",
"card_type": "visa",
"cardholder_name": "JOHN DOE"
},
"transaction_reference": "TXN_REF_001",
"virtual_account_number": null,
"rrn": "123456789012",
"stan": "019283",
"aid": "A0000000041010",
"response_code": "00",
"response_message": "Approved",
"processor": null,
"meta": "{}",
"pc_code": "PC001",
"created_at": "2026-02-20T09:15:48.901Z"
}
}
{
"status": 200,
"success": true,
"message": "Success",
"data": {
"status": "pending"
}
}
{
"status": 200,
"success": true,
"message": "Success",
"data": {
"status": "failed",
"id": 12345,
"merchant_request_ref": "prq_01HV8M3K5R7XM6QEGG1YAEVF",
"merchant_id": "MER_001",
"terminal_id": "2035AB01",
"amount": 350000,
"currency": "NGN",
"payment_method": "card",
"transaction_type": "Purchase",
"payment_info": {
"card_pan": "506100******1234",
"card_exp": "2512",
"card_type": "visa",
"cardholder_name": "JOHN DOE"
},
"transaction_reference": "TXN_REF_002",
"virtual_account_number": null,
"rrn": "123456789013",
"stan": "019284",
"aid": "A0000000041010",
"response_code": "51",
"response_message": "Insufficient funds",
"processor": null,
"meta": "{}",
"pc_code": "PC001",
"created_at": "2026-02-20T09:15:48.901Z"
}
}
{
"status": 404,
"success": false,
"message": "Request not found or expired",
"data": {}
}
{
"status": "401",
"message": "Invalid or missing token",
"data": {}
}
Response — Expired / Not Found (404) Returned when the request_ref does not exist or has expired. Payment requests are stored with a 5-minute Time To Live (TTL). Once the TTL expires, the record is automatically deleted, as such the system returns a 404 response. Which can mean:
i.The request_ref was never valid
ii.The request expired because the POS terminal did not complete the payment within 5 minutes
The request_ref expires after 5 minutes.
If the terminal does not process the payment within that window, requery will return 404.
Call the requery endpoint every 2-3 seconds until you get a final status (success or failed) or a 404.
When status is pending, only status is returned. When success or failed, the full transaction fields are flattened into the response.