> This is Payabli documentation. For a complete page index, fetch https://docs.payabli.com/llms.txt — append .md to any page URL for lightweight markdown. For section-level indexes, query parameters, and other AI-optimized access methods, see https://docs.payabli.com/ai-agents.md

# Manage AXIUM devices

> Learn how to manage AXIUM devices with the Payabli API

Use the Payabli API to register, list, and monitor AXIUM devices — Ingenico semi-integrated terminals that capture card data at the terminal.

## Add a device

Register an AXIUM terminal to a paypoint by generating a one-time activation code, then entering it on the device. The terminal binds to the paypoint the first time an operator enters a valid code.

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

For complete details, see the [API reference](/developers/api-reference/device/generate-device-activation-code) for this endpoint.

This example generates an activation code for the `8cfec329267` paypoint.

### Request

POST [https://api-sandbox.payabli.com/api/Device/challenge/\{entry}](https://api-sandbox.payabli.com/api/Device/challenge/\{entry})

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

```typescript
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient();
    await client.device.challenge("8cfec329267");
}
main();

```

```python
from payabli import payabli

client = payabli()

client.device.challenge(
    entry="8cfec329267",
)

```

```java
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient
            .builder()
            .build();

        client.device().challenge("8cfec329267");
    }
}
```

```csharp
using PayabliApi;
using System.Threading.Tasks;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient();

        await client.Device.ChallengeAsync(
            "8cfec329267"
        );
    }

}

```

```go
package example

import (
    context "context"

    client "github.com/payabli/sdk-go/client"
)

func do() {
    client := client.NewClient()
    client.Device.Challenge(
        context.TODO(),
        "8cfec329267",
    )
}

```

```php
<?php

namespace Example;

use Payabli\PayabliClient;

$client = new PayabliClient();
$client->device->challenge(
    '8cfec329267',
);

```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Device/challenge/8cfec329267")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Device/challenge/8cfec329267")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

The response returns a 6-digit `code` and its `expiresAt` timestamp. A code expires 5 minutes after it's issued.

### Response (200)

```json
{
  "responseText": "Success",
  "responseData": {
    "code": "748801",
    "expiresAt": "2026-08-13T19:58:27.5860203Z"
  },
  "responseCode": 1,
  "pageIdentifier": "",
  "roomId": 0,
  "isSuccess": true
}
```

An operator enters the code on the terminal, along with a device name, and the terminal registers itself to the paypoint. A paypoint can have several codes active at once — for example, when registering a batch of devices — and each code binds to whichever device enters it first.

After the terminal is registered, [list the paypoint's devices](#list-devices-for-a-paypoint) to find it by its device name (`friendlyName`) and copy its `deviceId`. You use the `deviceId` to target the terminal when you run transactions.

For a guided walkthrough from hardware setup through a first card-present sale, see the [AXIUM devices quickstart](/guides/pay-in-developer-devices-axium-quickstart).

## List devices for a paypoint

Send a GET request to `/api/Query/devices/{entry}` to retrieve the devices registered to a paypoint. The response includes both cloud and AXIUM hardware — see [Devices overview](/guides/pay-in-devices-overview) for how to tell them apart.

This example lists devices for the `8cfec329267` paypoint.

### Request

GET [https://api-sandbox.payabli.com/api/Query/devices/\{entry}](https://api-sandbox.payabli.com/api/Query/devices/\{entry})

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

```typescript
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient();
    await client.query.listDevices("8cfec329267", {
        fromRecord: 0,
        limitRecord: 20,
        sortBy: "desc(createdAt)",
    });
}
main();

```

```python
from payabli import payabli

client = payabli()

client.query.list_devices(
    entry="8cfec329267",
    from_record=0,
    limit_record=20,
    sort_by="desc(createdAt)",
)

```

```java
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;
import io.github.payabli.api.resources.query.requests.ListDevicesRequest;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient
            .builder()
            .build();

        client.query().listDevices(
            "8cfec329267",
            ListDevicesRequest
                .builder()
                .fromRecord(0)
                .limitRecord(20)
                .sortBy("desc(createdAt)")
                .build()
        );
    }
}
```

```csharp
using PayabliApi;
using System.Threading.Tasks;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient();

        await client.Query.ListDevicesAsync(
            entry: "8cfec329267",
            request: new ListDevicesRequest {
                FromRecord = 0,
                LimitRecord = 20,
                SortBy = "desc(createdAt)"
            }
        );
    }

}

```

```go
package example

import (
    context "context"

    payabli "github.com/payabli/sdk-go"
    client "github.com/payabli/sdk-go/client"
)

func do() {
    client := client.NewClient()
    request := &payabli.ListDevicesRequest{
        FromRecord: payabli.Int(
            0,
        ),
        LimitRecord: payabli.Int(
            20,
        ),
        SortBy: payabli.String(
            "desc(createdAt)",
        ),
    }
    client.Query.ListDevices(
        context.TODO(),
        "8cfec329267",
        request,
    )
}

```

```php
<?php

namespace Example;

use Payabli\PayabliClient;
use Payabli\Query\Requests\ListDevicesRequest;

$client = new PayabliClient();
$client->query->listDevices(
    '8cfec329267',
    new ListDevicesRequest([
        'fromRecord' => 0,
        'limitRecord' => 20,
        'sortBy' => 'desc(createdAt)',
    ]),
);

```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Query/devices/8cfec329267?fromRecord=0&limitRecord=20&sortBy=desc%28createdAt%29")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Query/devices/8cfec329267?fromRecord=0&limitRecord=20&sortBy=desc%28createdAt%29")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

The response returns matching devices in `Records` and aggregate totals in `Summary`. Use `Summary.totalRecords` and `Summary.totalPages` with the `fromRecord` and `limitRecord` query parameters to page through results.

### Response (200)

```json
{
  "Summary": {
    "pageIdentifier": null,
    "pageSize": 20,
    "totalAmount": 0,
    "totalNetAmount": 0,
    "totalPages": 2,
    "totalRecords": 28
  },
  "Records": [
    {
      "deviceId": "499585-389fj484-3jcj8hj3",
      "idCloud": 142,
      "description": "Front Counter Terminal",
      "serialNumber": "SN-90210-XR",
      "friendlyName": "Front Counter",
      "make": null,
      "model": null,
      "deviceType": 1,
      "deviceStatus": 1,
      "deviceOs": null,
      "macAddress": "1A2B3C4D5E6F",
      "lastHealthCheck": "2026-04-09T14:49:42Z",
      "registrationCode": "REG-A1B2C3D4",
      "activationAttempts": 0,
      "activationCodeExpiry": "2026-04-09T14:49:42Z",
      "createdAt": "2026-04-09T01:14:37Z",
      "updatedAt": "2026-04-09T14:49:42Z",
      "paypointId": 3040,
      "paypointDba": "Gruzya Adventure Outfitters",
      "paypointLegal": "Gruzya Adventure Outfitters, LLC",
      "paypointEntry": "8cfec329267",
      "paypointLogo": "https://payabli-public-objects.s3.amazonaws.com/pe3040.png",
      "externalPaypointId": "GRUZYA-01",
      "parentOrgId": 100,
      "parentOrgName": "Mountain View Services",
      "transactionCount": 342,
      "volumeProcessed": 28650.75
    }
  ]
}
```

Filter and sort results with query parameters — for example, `status(eq)=1` for active devices only. The full list of filterable fields is on the [List devices by paypoint](/developers/api-reference/get-list-of-devices-for-a-paypoint) API reference; for operator syntax and pagination, see the [Filters and conditions reference](/guides/pay-ops-reporting-overview#filters-and-conditions-reference).

## List devices for an organization

Send a GET request to `/api/Query/devices/org/{orgId}` to retrieve the devices registered anywhere in an organization, across all its paypoints. This is the same `DeviceQueryRecord` shape as the paypoint-level list, with `paypointId`, `paypointDba`, and `paypointEntry` on each record to identify which paypoint a device belongs to.

This example lists devices for the organization with ID `123`.

### Request

GET [https://api-sandbox.payabli.com/api/Query/devices/org/\{orgId}](https://api-sandbox.payabli.com/api/Query/devices/org/\{orgId})

```curl
curl -G https://api-sandbox.payabli.com/api/Query/devices/org/123 \
     -H "Authorization: Bearer <token>" \
     -d fromRecord=0 \
     -d limitRecord=20 \
     -d sortBy=desc(createdAt)
```

```typescript
import { PayabliClient } from "@payabli/sdk-node";

async function main() {
    const client = new PayabliClient();
    await client.query.listDevicesOrg(123, {
        fromRecord: 0,
        limitRecord: 20,
        sortBy: "desc(createdAt)",
    });
}
main();

```

```python
from payabli import payabli

client = payabli()

client.query.list_devices_org(
    org_id=123,
    from_record=0,
    limit_record=20,
    sort_by="desc(createdAt)",
)

```

```java
package com.example.usage;

import io.github.payabli.api.PayabliApiClient;
import io.github.payabli.api.resources.query.requests.ListDevicesOrgRequest;

public class Example {
    public static void main(String[] args) {
        PayabliApiClient client = PayabliApiClient
            .builder()
            .build();

        client.query().listDevicesOrg(
            123,
            ListDevicesOrgRequest
                .builder()
                .fromRecord(0)
                .limitRecord(20)
                .sortBy("desc(createdAt)")
                .build()
        );
    }
}
```

```csharp
using PayabliApi;
using System.Threading.Tasks;

public partial class Examples
{
    public async Task Example() {
        var client = new PayabliApiClient();

        await client.Query.ListDevicesOrgAsync(
            orgId: 123,
            request: new ListDevicesOrgRequest {
                FromRecord = 0,
                LimitRecord = 20,
                SortBy = "desc(createdAt)"
            }
        );
    }

}

```

```go
package example

import (
    context "context"

    payabli "github.com/payabli/sdk-go"
    client "github.com/payabli/sdk-go/client"
)

func do() {
    client := client.NewClient()
    request := &payabli.ListDevicesOrgRequest{
        FromRecord: payabli.Int(
            0,
        ),
        LimitRecord: payabli.Int(
            20,
        ),
        SortBy: payabli.String(
            "desc(createdAt)",
        ),
    }
    client.Query.ListDevicesOrg(
        context.TODO(),
        123,
        request,
    )
}

```

```php
<?php

namespace Example;

use Payabli\PayabliClient;
use Payabli\Query\Requests\ListDevicesOrgRequest;

$client = new PayabliClient();
$client->query->listDevicesOrg(
    123,
    new ListDevicesOrgRequest([
        'fromRecord' => 0,
        'limitRecord' => 20,
        'sortBy' => 'desc(createdAt)',
    ]),
);

```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Query/devices/org/123?fromRecord=0&limitRecord=20&sortBy=desc%28createdAt%29")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Query/devices/org/123?fromRecord=0&limitRecord=20&sortBy=desc%28createdAt%29")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

The response returns matching devices in `Records` and aggregate totals in `Summary`, with the same pagination fields as the paypoint-level list.

### Response (200)

```json
{
  "Summary": {
    "pageIdentifier": null,
    "pageSize": 20,
    "totalAmount": 0,
    "totalNetAmount": 0,
    "totalPages": 2,
    "totalRecords": 28
  },
  "Records": [
    {
      "deviceId": "499585-389fj484-3jcj8hj3",
      "idCloud": 142,
      "description": "Front Counter Terminal",
      "serialNumber": "SN-90210-XR",
      "friendlyName": "Front Counter",
      "make": null,
      "model": null,
      "deviceType": 1,
      "deviceStatus": 1,
      "deviceOs": null,
      "macAddress": "1A2B3C4D5E6F",
      "lastHealthCheck": "2026-04-09T14:49:42Z",
      "registrationCode": "REG-A1B2C3D4",
      "activationAttempts": 0,
      "activationCodeExpiry": "2026-04-09T14:49:42Z",
      "createdAt": "2026-04-09T01:14:37Z",
      "updatedAt": "2026-04-09T14:49:42Z",
      "paypointId": 3040,
      "paypointDba": "Gruzya Adventure Outfitters",
      "paypointLegal": "Gruzya Adventure Outfitters, LLC",
      "paypointEntry": "8cfec329267",
      "paypointLogo": "https://payabli-public-objects.s3.amazonaws.com/pe3040.png",
      "externalPaypointId": "GRUZYA-01",
      "parentOrgId": 100,
      "parentOrgName": "Mountain View Services",
      "transactionCount": 342,
      "volumeProcessed": 28650.75
    }
  ]
}
```

Filter and sort the same way as the paypoint-level list — for example, `paypointEntry(eq)=8cfec329267` to scope results to one paypoint within the org. The full list of filterable fields is on the [List devices by organization](/developers/api-reference/get-list-of-devices-for-an-organization) API reference.

## Related resources

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

#### Related topics

* **[Devices overview](/guides/pay-in-devices-overview)** - Learn how to accept card-present payments with Payabli's cloud and AXIUM devices
* **[AXIUM devices API quickstart](/guides/pay-in-developer-devices-axium-quickstart)** - Activate an AXIUM terminal and make your first card-present transaction with the Payabli API
* **[Generate device activation code](/developers/api-reference/device/generate-device-activation-code)** - Generate a 6-digit activation code to register an AXIUM device.
* **[List devices by paypoint](/developers/api-reference/get-list-of-devices-for-a-paypoint)** - Retrieve the devices registered to a paypoint.
* **[List devices by organization](/developers/api-reference/get-list-of-devices-for-an-organization)** - Retrieve the devices registered across an organization.