Physical Terminals
Overview
Basys Physical Terminals provide a comprehensive solution for processing in-person, card-present transactions. This guide walks you through the essential steps to interact with Basys Physical Terminals using our REST APIs. Follow these steps to quickly get started with integrating this solution with your application.
Prerequisites
Before proceeding with this guide, ensure you have:
An active Basys production environment account
At least one test physical terminal configured to your production gateway
Access to IQPro+
An application created in IQPro+ and integration credentials (client ID and secret)
Although not required, we recommend using Postman to become familiar with our APIs
Read our Authorization page prior to this proceeding
If you need assistance with onboarding or setting up any prerequisites, please contact Basys Integration Support:
Phone: (800) 851-9460
Authentication
All API requests require OAuth 2.0 authentication using the client credentials flow.
Obtaining an Access Token
POST <https://account.basyspro.com/account.basyspro.com/B2C_1A_IQPROV2_INTEGRATOR/oauth2/v2.0/token>
Request Body Properties:
grant_type
: client_credentialsclient_id
: Your client IDclient_secret
: Your client secretscope
: https://account.basyspro.com/{tenant-id}/.default
Response:
{
"access_token": "eyJ0eXAi...",
"expires_in": 3600,
"token_type": "Bearer"
}
Next: Store this access token securely — you'll need it for all subsequent API calls — but it will expire after two hours so be prepared to retrieve a new access token as needed.
Core Integration Flow
1. Retrieve Gateway Information
First, get your merchant’s gateway ID which is required for terminal operations.
GET <https://api.basyspro.com/iqsaas/v1/api/gateway>
Authorization: Bearer {access_token}
Next: Store the gatewayId
, provided in the response for future requests. This represents the merchant/business.
2. List Available Terminals
Using the gatewayId,
retrieve all terminals associated with your gateway:
GET <https://api.basyspro.com/iqsaas/v1/api/gateway/{gatewayId}/terminal?offset=1&limit=100>
Authorization: Bearer {access_token}
This endpoint returns details about your terminals including:
Terminal ID
Serial number
Model
Current status
Next: Store the terminalId
provided in the response to specify which terminal to accept the payment on.
3. Initiate a Payment
To process a payment, create a payment intent by specifying the gatewayId
and terminalId
as URL parameters.
POST <https://api.basyspro.com/iqsaas/v1/api/gateway/{gatewayId}/terminal/{terminalId}/command/payment-intent>
Authorization: Bearer {access_token}
Body:
{
"transactionId": "{{$guid}}",
"tenderType": ["Unknown"],
"transactionType": "Sale",
"remit": {
"baseAmount": 0,
"taxAmount": 0,
"taxExempt": true,
"currencyCode": "USD",
"total": 0.25
}
}
Key fields:
transactionId
: Unique identifier for the transaction (can use a GUID)tenderType
: Payment method (“Unknown”, “Eft”, “EBTCash”, or “SnapFSA”)transactionType
: Transaction type ("Sale", “Authorize” or “Credit”)remit
: Payment details including:baseAmount
: Base transaction amount before taxtaxAmount
: Tax amounttaxExempt
: Boolean indicating if transaction is tax exemptcurrencyCode
: Three-letter currency code (e.g., "USD")total
: Total transaction amount
Payment Intent Response
You will receive an asynchronous response containing the transactionId
before the payment flow between the customer and device completes.
Next: use the transactionId
to retrieve the transaction status.
4. Retrieve the Transaction Status
After creating a payment intent, use the transactionId
to check its status and whether it was successful or not:
GET <https://api.basyspro.com/iqsaas/v1/api/gateway/{gatewayId}/terminal/{terminalId}/transaction/{transactionId}>
Authorization: Bearer {access_token}
It is our recommended strategy to leverage our transaction webhook functionality to listen for transaction activity. However, if you are unable to support an endpoint to consume webhooks you can implement a polling strategy mentioned in the Best Practices -> Transaction Timing section below.
5. Void or Reverse a Transaction
To void a transaction:
PUT <https://api.basyspro.com/iqsaas/v1/api/gateway/{gatewayId}/transaction/{transactionId}/void>
Authorization: Bearer {access_token}
This endpoint allows you to void (cancel) a transaction that has been successfully processed.
Note that voids can only be performed on transactions that haven't been settled, and settlement automatically occurs twenty five minutes after the transaction has been successfully processed.
If a transaction has already settled, then you will need to create a refund instead.
Best Practices
Error Handling
Always check HTTP status codes
Implement proper retry logic for network failures
Store transaction IDs for reconciliation
Security
Never expose your client credentials
Implement client-side encryption for sensitive data
Transaction Management
Generate unique guids for value of transactionId
Keep transaction logs for reconciliation
Transaction Timing
The payment intent endpoint returns a
transactionId
asynchronously. We recommend implementing a polling strategy with exponential backoff, starting at 2-second intervals, for up to 180 seconds (3 minutes) to ensure reliable capture of the transaction result. Most transactions complete significantly faster, but this maximum window accounts for edge cases and potential processing delays.Our system has a maximum total processing window of 169 seconds, which accounts for the following maximum timeout values across our processing chain:
Initial terminal communication: 10 seconds
Terminal inactivity timeout: 60 seconds
Tokenization processing: 59 seconds
Payment processing: 40 seconds
Support
For additional support:
Review our API Documentation
Contact support at support@basyspro.com
Next Steps
After implementing the basic integration:
Add support for additional transaction types that your merchants may require.
Make sure to handle errors and edge cases and capture logs within your implementation.
Test your implementation thoroughly.
Available Devices and Hardware Specifications:
PAX A920 and A920Pro:
Chip & PIN, NFC Contactless, and Magnetic Stripe readers
“PIN on glass” for PIN entry
4G LTE, WiFi, and Ethernet connectivity
5.5" touchscreen (A920Pro) or 5.0” touchscreen (A920)
Embedded high speed printer
PCI PTS 5.x SRED
Cortex A53 processor
5MP front + 8MP rear camera
5150mAh / 3.7V long-lasting battery
Support for additional PAX devices coming in 2025 — see iqpro.com for more details.