Skip to main content

POS / Terminal Integration

Aurora provides a semi-integrated POS solution where your point-of-sale system sends transaction requests to the Aurora API, which routes them to a physical terminal for card processing. The terminal handles all card interaction (tap, insert, swipe) and communicates the result back through the API.

How It Works

  1. Your POS system creates a transaction via the API, specifying the terminal and amount.
  2. Aurora sends the transaction to the terminal via push notification.
  3. The terminal prompts the customer to present their card.
  4. The terminal processes the payment and reports the result.
  5. Your POS system retrieves the result by polling the API.

Base URL

Sandbox Environment:

https://api.uat.arise.risewithaurora.com/pos-api/v1

Production Environment:

https://api.arise.risewithaurora.com/pos-api/v1

Terminals

Before processing transactions, you need to know which terminals are available.

List Terminals

GET /pos-api/v1/terminals

Returns a paginated list of terminals assigned to your merchant account.

ParameterTypeDescription
pageintPage number.
pageSizeintItems per page.
searchstringSearch by terminal name or serial number.
serialNumberstringFilter by serial number.

Each terminal in the response includes:

FieldDescription
idTerminal unique identifier. Use this when creating transactions.
serialNumberThe terminal's hardware serial number.
terminalManufacturerManufacturer name (e.g. Sunmi, Verifone).
terminalModelModel name (e.g. P2, P3H, Victa Mobile).
terminalModeNameOperating mode (Standalone or SemiIntegrated).
connectionStatusCurrent connection state (Online or Offline).

Get Terminal Status

GET /pos-api/v1/terminals/{terminalId}/status

Returns detailed real-time status for a specific terminal, including connectivity, battery level, and printer status.

FieldDescription
terminalPosStatusActive (ready to accept transactions) or Busy (currently processing).
connectionStatusOnline or Offline.
connectionTypeWiFi, Mobile, or Ethernet.
batteryLevelBattery percentage (0–100).
printerStatusNormal, NotNormal, or NotSupported.
availabilityStatusReady or Busy.
tip

Check that a terminal is Online and Active before sending a transaction to avoid a TerminalOffline status.

Creating a Transaction

Start a POS Transaction

POST /pos-api/v1/pos-transactions
FieldTypeRequiredDescription
terminalIdstring (UUID)YesThe terminal that will process the transaction.
transactionTypeIdintYesTransaction type (see table below).
amountdecimalConditionalAmount in dollars. Required for Sale, Authorization, Capture, Refund, and Tip Adjustment.
posDeviceIdstringYesYour POS system's device identifier (max 36 characters).
referenceIdstringNoYour external reference ID for this transaction (max 36 characters).
targetTransactionIdstring (UUID)ConditionalThe original transaction ID. Required for Void, Capture, and Refund.
customerIdstring (UUID)NoAssociate the transaction with a stored customer.
readingMethodIdintNo1 = Card read (tap/insert/swipe, default), 2 = Manual entry (keyed).
waitForAcceptanceByTerminalboolNotrue = long poll until terminal accepts; false = return immediately (default).

Transaction Types

IDTypeDescription
1AuthorizationPlace a hold on funds without capturing. Requires amount.
2SaleAuthorize and capture in one step. Requires amount.
3CaptureCapture a previous authorization. Requires amount and targetTransactionId.
4VoidCancel a transaction before settlement. Requires targetTransactionId.
5RefundReturn funds from a settled transaction. Requires amount and targetTransactionId.
8Tip AdjustmentAdjust the tip on an existing transaction. Requires amount and targetTransactionId.

Example — Sale transaction:

curl -X POST 'https://api.uat.arise.risewithaurora.com/pos-api/v1/pos-transactions' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"terminalId": "d4e5f6a7-b8c9-0123-4567-89abcdef0123",
"transactionTypeId": 2,
"amount": 25.99,
"posDeviceId": "POS-REGISTER-01",
"referenceId": "ORDER-4521",
"waitForAcceptanceByTerminal": false
}'

Response:

{
"posTransactionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"statusId": 1,
"status": "TerminalConnecting"
}

Get POS Transaction

GET /pos-api/v1/pos-transactions/{posTransactionId}
ParameterTypeDescription
posTransactionIdstring (UUID)Path parameter. The POS transaction ID returned from the create call.
waitForTransactionProcessingboolQuery parameter. Set to true for long polling — the response holds until the transaction completes or times out.

When the transaction completes (isCompleted: true), the response includes full transaction details in the transaction object:

{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"posTransactionStatusId": 6,
"posTransactionStatus": "Completed",
"isCompleted": true,
"amount": 25.99,
"transaction": {
"transactionId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"amount": 25.99,
"transactionStatus": "Captured",
"authCode": "A12345"
}
}

Polling for Results

After creating a transaction, poll the GET endpoint to track its progress.

Polling Strategies

Polling when creating a transaction:

  • Short polling: Set waitForAcceptanceByTerminal: false when creating the POS transaction. Your POS controls the polling interval to retrieve the transaction status.
  • Long polling: Set waitForAcceptanceByTerminal: true when creating the POS transaction. The response holds until the transaction is accepted by the terminal device or times out, reducing the number of API calls.

Polling to get the transaction results:

  • Short polling: Poll GET with waitForTransactionProcessing: false when you want to check the transaction status at your own interval.
  • Long polling: Poll GET with waitForTransactionProcessing: true to hold the request until the transaction reaches a final status, reducing the number of API calls.

Transaction Status Lifecycle

IDStatusFinal?Description
1TerminalConnectingNoTransaction sent to the terminal. Waiting for the terminal to accept.
2TransactionProcessingNoTerminal accepted the transaction and is processing the card.
10TransactionSentToProcessorNoCard data submitted to the payment processor.
6CompletedYesTransaction processed successfully.
3DeclinedByProcessorYesThe payment processor declined the transaction.
4CancelByPosYesYour POS system cancelled the transaction.
5CancelByTerminalYesThe transaction was cancelled at the terminal (e.g. customer pressed cancel).
9TerminalOfflineYesThe terminal could not be reached.
7ErrorYesA system error occurred during processing.
8InconsistencyYesA data mismatch occurred between the POS and terminal.

Check the isCompleted field to determine if the transaction has reached a final status.

Cancelling a Transaction

You can cancel a transaction that hasn't completed yet.

POST /pos-api/v1/pos-transactions/{posTransactionId}/cancel

Returns the updated transaction status. Cancellation is only possible while the transaction is in a non-final state (e.g. TerminalConnecting or TransactionProcessing).

Listing Transactions

GET /pos-api/v1/pos-transactions

Returns a paginated list of POS transactions. Supports filtering by terminal.

ParameterTypeDescription
pageintPage number.
pageSizeintItems per page.
terminalIdstring (UUID)Filter transactions by terminal.
ascboolSort order. true = ascending, false = descending.
orderBystringField name to sort by.

Printing a Receipt

Trigger a receipt reprint on a terminal for a completed transaction.

POST /pos-api/v1/pos-transactions/{posTransactionId}/print
{
"terminalId": "d4e5f6a7-b8c9-0123-4567-89abcdef0123"
}

Returns 200 OK with no body. The specified terminal will print the receipt.

Error Responses

All endpoints return standard HTTP error codes:

Status CodeDescription
400 Bad RequestInvalid request — check that required fields are present and correctly formatted.
401 UnauthorizedMissing or invalid access token.
403 ForbiddenYour account does not have the required POS permission.
404 Not FoundThe specified transaction or terminal was not found.
500 Internal Server ErrorAn unexpected error occurred. Contact support if the issue persists.