AXIUM devices API quickstart

Activate an AXIUM terminal and make your first card-present transaction with the Payabli API

View as MarkdownOpen in Claude
Applies to:Developers

This quickstart takes an Ingenico AXIUM terminal from unregistered to its first card-present sale. First you set up and activate the terminal, then you charge a card with the Payabli API. The terminal captures and encrypts card data at the point of sale, and your app orchestrates the payment through the API.

Before you begin

You need:

  • An OAuth2 Bearer token with the device_registry scope to generate the activation code. Registration only accepts OAuth2 — see OAuth authentication to set one up.
  • A physical AXIUM terminal to register and present cards to. Contact Payabli to order your devices.
  • The device’s admin password, which Payabli provides. You need it to connect the terminal to Wi-Fi.
  • A paypoint enabled for semi-integrated devices, and API credentials that allow you to make transactions.
  • A webhook subscription for the ApprovedPayment and DeclinedPayment events, if you want Payabli to notify you when a sale completes instead of polling for it. Payabli doesn’t send webhook events until you subscribe to them. See Set up and receive events for instructions.
Semi-integrated AXIUM device processing requires configuration by the Payabli team. Contact us to get started.

Activate the terminal

Activating an AXIUM terminal registers it to a paypoint so it can accept payments.

1

Set up the terminal

  1. Power on the device.
  2. Connect it to a Wi-Fi network. You may be prompted for the device’s admin password.
  3. Open the Payabli app. It prompts for a device name, then a 6-digit activation code.

The device ships with a printed user guide for the hardware setup. If you need another copy, download the guide for your model from Ingenico user guides.

2

Generate an activation code

Send a POST request to the Generate device activation code endpoint (/api/Device/challenge/{entry}), where {entry} is the entrypoint of the paypoint the device registers to. Authenticate with an OAuth2 Bearer token that has the device_registry scope.

POST
/api/Device/challenge/:entry
1curl -X POST https://api-sandbox.payabli.com/api/Device/challenge/8cfec329267 \
2 -H "Authorization: Bearer <token>"

The response returns a 6-digit code and its expiresAt timestamp.

Response
1{
2 "responseText": "Success",
3 "responseData": {
4 "code": "748801",
5 "expiresAt": "2026-08-13T19:58:27.5860203Z"
6 },
7 "responseCode": 1,
8 "pageIdentifier": "",
9 "roomId": 0,
10 "isSuccess": true
11}

Enter the device name and the code in the app, and the terminal registers itself to the paypoint. The code expires 5 minutes after it’s issued, so generate it when the app reaches the activation screen. A paypoint can have more than one code active at once, so you can activate a batch of terminals in one pass. Each code binds to whichever device enters it first.

3

Get the device ID

Each transaction targets the terminal by its deviceId. List the devices registered to the paypoint to find the one you just activated:

GET
/api/Query/devices/:entry
1curl -G https://api-sandbox.payabli.com/api/Query/devices/8cfec329267 \
2 -H "Authorization: Bearer <token>" \
3 -d fromRecord=0 \
4 -d limitRecord=20 \
5 -d sortBy=desc(createdAt)

The response returns the paypoint’s devices in Records. Find the terminal by the device name you entered, shown as friendlyName, and copy its deviceId.

Response
1{
2 "Summary": {
3 "pageIdentifier": null,
4 "pageSize": 20,
5 "totalAmount": 0,
6 "totalNetAmount": 0,
7 "totalPages": 2,
8 "totalRecords": 28
9 },
10 "Records": [
11 {
12 "deviceId": "499585-389fj484-3jcj8hj3",
13 "idCloud": 142,
14 "description": "Front Counter Terminal",
15 "serialNumber": "SN-90210-XR",
16 "friendlyName": "Front Counter",
17 "make": null,
18 "model": null,
19 "deviceType": 1,
20 "deviceStatus": 1,
21 "deviceOs": null,
22 "macAddress": "1A2B3C4D5E6F",
23 "lastHealthCheck": "2026-04-09T14:49:42Z",
24 "registrationCode": "REG-A1B2C3D4",
25 "activationAttempts": 0,
26 "activationCodeExpiry": "2026-04-09T14:49:42Z",
27 "createdAt": "2026-04-09T01:14:37Z",
28 "updatedAt": "2026-04-09T14:49:42Z",
29 "paypointId": 3040,
30 "paypointDba": "Gruzya Adventure Outfitters",
31 "paypointLegal": "Gruzya Adventure Outfitters, LLC",
32 "paypointEntry": "8cfec329267",
33 "paypointLogo": "https://payabli-public-objects.s3.amazonaws.com/pe3040.png",
34 "externalPaypointId": "GRUZYA-01",
35 "parentOrgId": 100,
36 "parentOrgName": "Mountain View Services",
37 "transactionCount": 342,
38 "volumeProcessed": 28650.75
39 }
40 ]
41}

See Manage AXIUM devices for filtering and monitoring options.

With the terminal registered and its deviceId copied, you’re ready to charge a card.

Make your first transaction

Run a card-present sale by sending a POST request to the Make a transaction endpoint (/api/v2/MoneyIn/getpaid). Set paymentMethod.method to device and paymentMethod.device to the deviceId you copied.

POST
/api/v2/MoneyIn/getpaid
1curl -X POST https://api-sandbox.payabli.com/api/v2/MoneyIn/getpaid \
2 -H "Authorization: Bearer <token>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "paymentDetails": {
6 "totalAmount": 100,
7 "serviceFee": 0
8 },
9 "paymentMethod": {
10 "device": "499585-389fj484-3jcj8hj3",
11 "method": "device",
12 "saveIfSuccess": true
13 },
14 "customerData": {
15 "customerId": 4440
16 },
17 "entryPoint": "8cfec329267",
18 "ipaddress": "255.255.255.255"
19}'

To tokenize and save the card while you charge it, set paymentMethod.saveIfSuccess to true. After the sale succeeds, the card’s methodReferenceId appears in the transaction details as StoredId, ready to reuse for future charges. See payment method tokenization for more.

A device sale is two-phase. The request returns Initiated (result code A0001), not Approved, because the terminal hasn’t read a card yet. The terminal prompts the cardholder to present their card, and the fields that describe the card and authorization stay null until they do.

Response
1{
2 "code": "A0001",
3 "reason": "Initiated",
4 "explanation": "Transaction initiated",
5 "action": "No action required",
6 "data": {
7 "parentOrgName": "Riverside Pet Supply",
8 "paypointDbaname": "Riverside Pet Store",
9 "paypointLegalname": "Riverside Pet Store",
10 "paypointEntryname": "495147f647",
11 "paymentTransId": "3040-96dfa9a7c4ed4f82a3dd4a4a12ad28ae",
12 "connectorName": "FV",
13 "externalProcessorInformation": "",
14 "gatewayTransId": null,
15 "orderId": "",
16 "method": "device",
17 "batchNumber": "",
18 "batchAmount": 0,
19 "payorId": 4440,
20 "paymentData": {
21 "maskedAccount": null,
22 "accountType": null,
23 "accountExp": null,
24 "holderName": "",
25 "storedId": null,
26 "initiator": null,
27 "storedMethodUsageType": null,
28 "sequence": null,
29 "orderDescription": null,
30 "accountId": null,
31 "signatureData": null,
32 "binData": null,
33 "paymentDetails": {
34 "totalAmount": 100,
35 "serviceFee": 0,
36 "checkNumber": null,
37 "checkUniqueId": "",
38 "currency": "USD",
39 "orderDescription": null,
40 "orderId": null,
41 "orderIdAlternative": null,
42 "paymentDescription": "",
43 "groupNumber": null,
44 "source": null,
45 "payabliTransId": null,
46 "categories": [],
47 "splitFunding": [],
48 "checkImage": null,
49 "unbundled": null
50 }
51 },
52 "transStatus": 10,
53 "paypointId": 3040,
54 "totalAmount": 100,
55 "netAmount": 100,
56 "feeAmount": 0,
57 "settlementStatus": 0,
58 "operation": "Sale",
59 "responseData": {
60 "resultCode": "A0001",
61 "resultCodeText": "Initiated",
62 "response": null,
63 "responsetext": "Initiated",
64 "authcode": null,
65 "transactionid": null,
66 "avsresponse": null,
67 "avsresponse_text": null,
68 "cvvresponse": null,
69 "cvvresponse_text": null,
70 "orderid": null,
71 "response_code": "100",
72 "response_code_text": "Operation successful",
73 "customer_vault_id": null,
74 "emv_auth_response_data": null,
75 "type": null
76 },
77 "source": "api",
78 "scheduleReference": 0,
79 "orgId": 123,
80 "refundId": 0,
81 "returnedId": 0,
82 "chargebackId": 0,
83 "retrievalId": 0,
84 "invoiceData": {
85 "invoiceNumber": null,
86 "invoiceDate": null,
87 "invoiceDueDate": null,
88 "invoiceEndDate": null,
89 "invoiceStatus": null,
90 "invoiceType": null,
91 "frequency": null,
92 "paymentTerms": null,
93 "termsConditions": null,
94 "notes": null,
95 "tax": null,
96 "discount": null,
97 "invoiceAmount": null,
98 "freightAmount": null,
99 "dutyAmount": null,
100 "purchaseOrder": null,
101 "firstName": null,
102 "lastName": null,
103 "company": null,
104 "shippingAddress1": null,
105 "shippingAddress2": null,
106 "shippingCity": null,
107 "shippingState": null,
108 "shippingZip": null,
109 "shippingCountry": null,
110 "shippingEmail": null,
111 "shippingPhone": null,
112 "shippingFromZip": null,
113 "summaryCommodityCode": null,
114 "items": null,
115 "attachments": null,
116 "additionalData": null
117 },
118 "entrypageId": 0,
119 "externalPaypointID": "",
120 "isValidatedACH": false,
121 "transactionTime": "2025-12-01T09:50:03.559",
122 "customer": {
123 "identifiers": null,
124 "firstName": "John",
125 "lastName": "Cassian",
126 "companyName": null,
127 "billingAddress1": "728 Larkspur Lane",
128 "billingAddress2": "",
129 "billingCity": "Asheville",
130 "billingState": "NC",
131 "billingZip": "28801",
132 "billingCountry": "US",
133 "billingPhone": "+18285550147",
134 "billingEmail": "john.cassian@example.com",
135 "customerNumber": "C-90010",
136 "shippingAddress1": "728 Larkspur Lane",
137 "shippingAddress2": "",
138 "shippingCity": "Asheville",
139 "shippingState": "NC",
140 "shippingZip": "28801",
141 "shippingCountry": "US",
142 "customerId": 4440,
143 "customerStatus": 0,
144 "additionalData": null
145 },
146 "splitFundingInstructions": null,
147 "cfeeTransactions": [],
148 "transactionEvents": [
149 {
150 "transEvent": "Created",
151 "eventData": "0HNHD68HATSUC:00000001",
152 "eventTime": "2025-12-01T09:50:02.558651"
153 },
154 {
155 "transEvent": "Initiated",
156 "eventData": "0HNHD68HATSUC:00000001",
157 "eventTime": "2025-12-01T09:50:03.609111"
158 }
159 ],
160 "riskStatus": "PASSED",
161 "riskReason": "",
162 "riskAction": "",
163 "deviceId": "499585-389fj484-3jcj8hj3",
164 "achSecCode": "",
165 "achHolderType": "personal",
166 "ipAddress": "255.255.255.255",
167 "isSameDayACH": false,
168 "walletType": null,
169 "pendingFeeAmount": 0,
170 "riskFlagged": false,
171 "riskFlaggedOn": "2025-12-01T09:50:02.5474568",
172 "riskActionCode": 0,
173 "transAdditionalData": null
174 },
175 "token": null
176}

Initiated means the sale has started, not that it succeeded. Don’t treat A0001 as an approval — wait for the final result before you fulfill the order.

Get the final result

The cardholder presents their card and completes the sale on the terminal. Because that happens after the initial response, the final result reaches you separately. You have two ways to get it:

  • Listen for a webhook. Payabli sends an ApprovedPayment or DeclinedPayment event when the sale completes, so you don’t have to poll. Subscribe to these events first — see Before you begin.
  • Poll for transaction details. Call Get transaction details (/api/MoneyIn/details/{transId}) with the paymentTransId from the initial response, and repeat until the status resolves.

A completed sale returns resultCode A0000 and TransStatus 1 in the transaction details:

Response
1{
2 "splitCount": 0,
3 "TransactionTime": "2026-04-09T14:49:44Z",
4 "BatchAmount": 100,
5 "BatchNumber": "3040_device_20260401_1a2b3c4d",
6 "ConnectorName": "FV",
7 "Customer": {
8 "FirstName": "Elizabeta",
9 "LastName": "Marion",
10 "BillingEmail": "elizabeta.marion@email.com",
11 "CustomerNumber": "C-90010",
12 "customerId": 4440,
13 "customerStatus": 1
14 },
15 "DeviceId": "499585-389fj484-3jcj8hj3",
16 "FeeAmount": 0,
17 "GatewayTransId": "020080b14c2541444bc985621033c1b7ccda",
18 "Method": "device",
19 "NetAmount": 100,
20 "Operation": "Sale",
21 "OrderId": "",
22 "ParentOrgName": "Riverside Pet Supply",
23 "PaymentData": {
24 "AccountExp": "07/28",
25 "AccountType": "visa",
26 "HolderName": "",
27 "Initiator": null,
28 "MaskedAccount": "4xxxxxxxxxxx1111",
29 "paymentDetails": {
30 "totalAmount": 100,
31 "categories": [],
32 "currency": "USD",
33 "serviceFee": 0,
34 "splitFunding": []
35 },
36 "Sequence": null,
37 "StoredId": null,
38 "StoredMethodUsageType": null
39 },
40 "PaymentTransId": "3040-96dfa9a7c4ed4f82a3dd4a4a12ad28ae",
41 "PayorId": 4440,
42 "PaypointDbaname": "Riverside Pet Store",
43 "PaypointEntryname": "495147f647",
44 "PaypointId": 3040,
45 "PaypointLegalname": "Riverside Pet Store",
46 "PendingFeeAmount": 0,
47 "RefundId": 0,
48 "ResponseData": {
49 "authcode": "OK2576",
50 "emv_auth_response_data": null,
51 "response_code": "100",
52 "response_code_text": "Operation successful",
53 "responsetext": "Approved",
54 "resultCode": "A0000",
55 "resultCodeText": "Approved",
56 "transactionid": "020080b14c2541444bc985621033c1b7ccda"
57 },
58 "ReturnedId": 0,
59 "ScheduleReference": 0,
60 "SettlementStatus": 0,
61 "Source": "api",
62 "TotalAmount": 100,
63 "TransactionEvents": [
64 {
65 "TransEvent": "Created",
66 "EventTime": "2026-04-09T14:49:39Z"
67 },
68 {
69 "TransEvent": "Initiated",
70 "EventTime": "2026-04-09T14:49:39Z"
71 },
72 {
73 "TransEvent": "Approved",
74 "EventTime": "2026-04-09T14:49:44Z"
75 }
76 ],
77 "TransStatus": 1
78}

If your paypoints use the Payabli Portal, the AXIUM device also appears as a payment method in the Virtual Terminal. There, you can select it to charge a card in person. See Create a transaction in the Portal.

See these related resources to help you get the most out of Payabli.