GraphQL API
Query the platform for supported custom integrations — so your own software can read the ledger.
- Typed queries
- Custom integrations
Connect an existing POS, ERP, or application to a PAX terminal, read the merchant's transactions, orders, employees, and work orders, and embed online ordering — all through the POS Velocity API.
POST/api/v2/ecr/ terminal/ paymentKeep the system your staff already use. Send an amount to the PAX terminal and receive a structured result with authorization status, masked-card details, and references for supported follow-up operations.
The integration is designed to keep raw card data within the configured terminal and payment flow rather than passing it to the partner POS.
# charge $48.20 on the merchant's PAX terminal
POST /api/v2/ecr/terminal/payment?serial=<terminal>
x-api-key: <your-api-key>
x-idempotency-key: <uuid>
{ "amount": 4820, "externalId": "order-1042" }
# -> the terminal runs the card, you get:
200 OK
{ "status": "completed",
"result": { "status": "approved", "code": "000000" },
"amount": { "approved": 4820 },
"card": { "brand": "VISA", "last4": "3492" },
"processor": { "authorizationCode": "8731" } }Four ways into the one platform POS Velocity Ltd. builds and runs — the same one behind the terminal and the back office.
Keep scrollingQuery the platform for supported custom integrations — so your own software can read the ledger.
Authenticate with one API key and work against request and response shapes documented in the live reference.
Send an amount; the terminal runs chip, tap and PIN and returns the result with the auth code, masked card, and host reference.
The whole reference as one OpenAPI 3.1 document, in JSON or YAML — for client generators and AI assistants. Assistants that speak MCP can also search it live at /api/docs/v2/mcp.
Every money command carries an idempotency key. If the connection drops mid-payment, send the same key and body again and you get the first attempt's stored answer — not a second charge.
A decline is still a 200 with the result inside. A terminal that cannot be reached answers 503 and leaves the key unused. Any command can also be fetched by its id.
# the connection dropped: same key, same body
POST /api/v2/ecr/terminal/payment?serial=<terminal>
x-idempotency-key: <the same uuid>
200 OK
{ "idempotent": true,
"status": "completed",
"result": { "status": "approved" } }
# or fetch the command by its id
GET /api/v2/ecr/requests/{id}Drop our storefront web component onto any site — menu, cart, and checkout, styled to the merchant's brand.
See online ordering →List and fetch transactions, orders, employees, terminals, and work orders — every payment comes back with the references you need to reconcile it.
List terminals, switch one into SEMI mode, resync it, ping it, print to it, and close its batch — from your own software.
One key per integration, created in Settings → Developers. Each key carries only the scopes you tick, an optional expiry date, and an on/off switch.
Payment links, maps, SMS, and email are built in; the REST, GraphQL, and ECR APIs connect everything else.
POS Velocity is our own platform — designed, built and operated by POS Velocity Ltd. in Toronto.
Since 2018 our team has worked inside payment processing and point-of-sale software, and saw the same thing at every counter: payments in one system, orders in another, staff on paper and reports in a spreadsheet — with the merchant left to stitch them together.
So we built the whole stack ourselves: the app on the terminal, the cloud behind it, the back office and the API. Payments, orders, staff, customers and reporting share one system, so the pieces fit because they were made to — not bolted together afterwards.
Every request and response shape in one reference — browse them, and try them straight from the page.
It lets your own POS, ERP, or app drive a PAX terminal. Send an amount, the terminal runs chip, tap, and PIN, and you get back a structured result — auth code, masked card, and the host reference for later voids or refunds.
The ECR flow is designed so raw card data is handled within the configured terminal and payment services rather than passed to the integrated POS application.
Every money command carries an idempotency key. Send the same key and body again and you get the first attempt's stored answer, not a second charge. You can also fetch any command by its id, and the merchant API lists and fetches the transactions with their references.
Yes. The storefront ships as a web component you can drop onto any site — menu, cart, and checkout styled to the merchant's brand.
You create an API key in the portal under Settings → Developers and send it in the x-api-key header. Each key carries its own scopes — for example reading transactions, taking a payment, or closing a batch — an optional expiry date, and an on/off switch.
Drive a terminal, embed a store, or read the ledger — bring your use case and we'll map it to the API on a quick technical call.