---
updatedAt: 2026-04-13T11:54:04.000Z
agentTools:
  projectIndex: https://developers.bluefin.com/decryptx/llms.txt
---

# List all Devices

This endpoint returns a list of Devices. This endpoint can be returned. Some Devices will only appear for certain types of Users if they are in a particular state. For example, when a KIF user makes this API call, a Device will be included in the response list if its deviceState is set to *'Unassigned'*, *'Assigned'*, or *'Injected'*. Once it is received by the merchant and its deviceState is set to *'Stored'* or *'Activating'*, the Device will no longer appear on the GET all devices response for the KIF user.

The list of Devices can be filtered by the Partner, Client, KIF, and the Device's state. Use the *'skip'* and *'take'* parameters to implement pagination.

# OpenAPI definition

```json
{
  "openapi": "3.0.1",
  "info": {
    "title": "Decryptx External Api",
    "description": "# Overview\nThe purpose of the Decryptx management APIs are to provide Decryptx\nPartners and Key Injection Facilities (KIFs) a way to integrate their services\nto the Decryptx Platform. These APIs allow them to integrate P2PE Manager functionality into\ntheir own services, therefore providing their merchants an alternative to\nthe P2PE Manager for common tasks.\n\n### Deleting Resource\nWith the Management APIs, as with the P2PE Manager, once a resource has been utilized it cannot be deleted. For example, if a user has logged into the system even once they cannot be deleted. Instead of deleting resources that have been deleted, they shhould be set to inactive.\n\n### Transactions endpoints\nThe transaction endpoints are included in the Management APIs for Partners that have their own (Domain 5) P2PE compliant decryption environment and who wish to use our platform to manage their partners, merchants and devices. Our transactions endpoints allow Partners journal their decryption activity into the P2PE Manager, allowing the Partner to utilize the device management and chain-of-custody functionality of the P2PE Manager. Even when decryptions occur outside of the Decryptx system, the Partner's Client can still benefit from the P2PE Manager's device management, chain of custody, and historical decryption activity logs functionality.\n\n# Authentication\nAll calls to our Management APIs support basic and HMAC authentication. For instruction of how to implement HMAC please refer to the guide on our developer portal (https://developers.bluefin.com/p2pe-manager/apiguides/hmac).\n\nBasic authentication is a simple authentication scheme built into the HTTP protocol, the client sends HTTP requests with an Authorization header that contains the word *'Basic'*, followed by a space and a base64-encoded string username:password. For example, for the username and password, user and password, the authentication header is as follows:\n~~~\n//Authorization: Basic base64(user:pasword)\n~~~\nOutput:\n~~~\nAuthorization: Basic dXNlcjpwYXNzd29yZA==\n~~~\nThe Management accept the same usernames and passwords from the P2PEManager; importantly, access to respourse are limited based on the user role. A KIF user can access number of API endpoints that the Patner user cannot and vice versa. On the other hand, there are a number of APIs that are common to both types of Users.\n\n\n### Partner User Access\nThe following table outlines the REST operations that a Partner user can access. Client level users are not allowed to integrate with theses APIs, instead these APIs are designed so that the Client's Partner would integrate functionality to their service. That design decision has resulted in the Partners having increased access to P2PE resources on the APIs when compared to the P2PEManager GUI. For example, a Partner can alter a device's state with the Management APIs, whereas they cannot on the P2PE Manager GUI.\n\n| EndPoint             | GET (all) | POST | GET (Single) | PATCH | DELETE |\n|----------------------|:---------:|:----:|:------------:|:-----:|:------:|\n| /api/v1/users        |     ✔     |   ✔  |       ✔      |   ✔   |   ✔*   |\n| /api/v1/partners     |     ✔     |   ✔  |       ✔      |   ✔   |        |\n| /api/v1/clients      |     ✔     |   ✔  |       ✔      |   ✔   |        |\n| /api/v1/decryption   |           |   ✔  |              |       |        |\n| /api/v1/devices      |     ✔     |   ✔  |       ✔      |   ✔   |   ✔*   |\n| /api/v1/deviceBuilds |     ✔     |      |       ✔      |       |        |\n| /api/v1/deviceTypes  |     ✔     |      |       ✔      |       |        |\n| /api/v1/deviceStates |     ✔     |      |              |       |        |\n| /api/v1/devices/{serial}/{type}/custody  |     ✔     |   ✔   |       ✔      |       |        |\n| /api/v1/locations    |     ✔     |   ✔  |       ✔      |   ✔   |   ✔*   |\n| /api/v1/shipments    |           |      |              |       |        |\n| /api/v1/attestations |     ✔     |   ✔  |       ✔      |       |        |\n| /api/v1/transactions |     ✔     |   ✔  |       ✔      |   ✔   |        |\n| /api/v1/kifs         |     ✔     |      |              |       |        |\n| /api/v1/injectkeys   |           |      |              |       |        |\n| /api/v1/virtualDevices/{partner}   |           |   ✔   |       ✔       |       |    ✔    |\n* A resource that has been used one or more times cannot be deleted.\n\n\n### KIF User Access\nThe following table outlines the subset of Management APIs that a KIF user can access. Within this subset, some resources will only appear if they are in a particular state. For example, a Device will appear in the GET all endpoint if its deviceState is set to Unassigned, Assigned, or Injected. Once it is received by the merchant and set to *'stored'* or *'activating'* it will no longer appear on the GET all devices response for the originating KIF.\n\n\n| Endpoint             | GET (all) | POST | GET (Single) | PATCH | DELETE |\n|----------------------|:---------:|:----:|:------------:|:-----:|:------:|\n| /api/v1/users        |     ✔     |   ✔  |       ✔      |   ✔   |   ✔*   |\n| /api/v1/partners     |     ✔     |      |       ✔      |       |        |\n| /api/v1/clients      |     ✔     |      |       ✔      |       |        |\n| /api/v1/decryption   |           |   ✔  |              |       |        |\n| /api/v1/devices      |     ✔     |   ✔  |       ✔      |       |        |\n| /api/v1/deviceBuilds |     ✔     |      |       ✔      |       |        |\n| /api/v1/deviceTypes  |     ✔     |      |       ✔      |       |        |\n| /api/v1/deviceStates |     ✔     |      |              |       |        |\n| /api/v1/devices/{serial}/{type}/custody  |           |       |              |       |        |\n| /api/v1/locations    |     ✔     |   ✔  |       ✔      |   ✔   |   ✔*   |\n| /api/v1/shipments    |     ✔     |   ✔  |       ✔      |   ✔   |        |\n| /api/v1/attestations |           |      |              |       |        |\n| /api/v1/transactions |           |      |              |       |        |\n| /api/v1/kifs         |     ✔     |      |              |       |        |\n| /api/v1/injectkeys   |     ✔     |      |       ✔      |       |        |\n| /api/v1/virtualDevices/{partner}   |           |       |               |       |         |\n* A resource that has been used one or more times it cannot be deleted.\n",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://apis.p2pemanager.com/api/v1"
    },
    {
      "url": "http://apis.p2pemanager.com/api/v1"
    }
  ],
  "security": [
    {
      "basic": []
    }
  ],
  "tags": [
    {
      "name": "Devices",
      "description": "Devices are P2PE enabled Payment terminals and card readers. Typically, Devices are added by the KIF user. Once they have injected them with a key, they are shipped to the Client."
    }
  ],
  "paths": {
    "/devices": {
      "get": {
        "tags": [
          "Devices"
        ],
        "summary": "List all Devices",
        "description": "This endpoint returns a list of Devices. This endpoint can be returned. Some Devices will only appear for certain types of Users if they are in a particular state. For example, when a KIF user makes this API call, a Device will be included in the response list if its deviceState is set to *'Unassigned'*, *'Assigned'*, or *'Injected'*. Once it is received by the merchant and its deviceState is set to *'Stored'* or *'Activating'*, the Device will no longer appear on the GET all devices response for the KIF user.\n\nThe list of Devices can be filtered by the Partner, Client, KIF, and the Device's state. Use the *'skip'* and *'take'* parameters to implement pagination.",
        "operationId": "list-devices",
        "parameters": [
          {
            "name": "partner",
            "in": "query",
            "description": "Filter the list by Partner. The parameter value can be either a Partner ID or Name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "client",
            "in": "query",
            "description": "Filter the list by Client. The parameter value can be either a Client ID or Name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kif",
            "in": "query",
            "description": "Filter the list by KIF. The parameter value can be either a KIF ID or Name.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serialNumber",
            "in": "query",
            "description": "Filter the list by a comma separated list of serial numbers.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceState",
            "in": "query",
            "description": "Filter the list by Device State.",
            "schema": {
              "type": "string",
              "enum": [
                "new",
                "injected",
                "inTransit",
                "damaged",
                "retired",
                "destroyed",
                "tampered",
                "malfunctioning",
                "lost",
                "stored",
                "quarantined",
                "doa",
                "inRepair",
                "tamperedP2PE",
                "activating",
                "activated",
                "assigned",
                "unassigned",
                "rma"
              ]
            }
          },
          {
            "name": "take",
            "in": "query",
            "description": "The number of entries to include in the list.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "The number of results to skip before listing entries.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "sorting.field",
            "in": "query",
            "description": "The field to order the Device list.",
            "schema": {
              "type": "string",
              "default": "serialnumber",
              "enum": [
                "id",
                "version",
                "created",
                "modified",
                "serialnumber",
                "alternatekey",
                "name",
                "devicetype",
                "devicestate",
                "location.id",
                "location.name",
                "activationdate",
                "partner.id",
                "partner.name",
                "client.id",
                "client.name",
                "kif.id",
                "kif.name"
              ]
            }
          },
          {
            "name": "sorting.direction",
            "in": "query",
            "description": "The direction to sort the Device list.",
            "schema": {
              "type": "string",
              "default": "asc",
              "enum": [
                "asc",
                "desc"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Device list",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceList"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorized"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorForbidden"
                }
              }
            }
          },
          "409": {
            "description": "Invalid data",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidation"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServer"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "PartnerReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced Partner's ID.",
            "example": "6580"
          },
          "name": {
            "type": "string",
            "description": "The referenced Partner's name.",
            "example": "ASM Software"
          }
        },
        "description": "Reference to the associated Partner. When used for POST and PATCH API calls, the reference can contain either the ID or Name. With GET API calls, both properties are populated."
      },
      "ClientReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced Client's ID.",
            "example": "4684"
          },
          "name": {
            "type": "string",
            "description": "The referenced Client's name.",
            "example": "The Tired Window"
          }
        },
        "description": "Reference to the associated Client resource. When used for POST and PATCH API calls, the reference can contain either the ID or Name. With GET API calls, both properties are populated."
      },
      "KifReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced KIF's ID.",
            "example": "4"
          },
          "name": {
            "type": "string",
            "description": "The referenced KIF's name.",
            "example": "Kriptithe Technologies"
          }
        },
        "description": "Reference to the associated KIF resource. When used for POST and PATCH API calls, the reference can contain either the ID or Name. With GET API calls, both properties are populated."
      },
      "LocationReference": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced Location's ID.",
            "example": "33668"
          },
          "name": {
            "type": "string",
            "description": "The referenced Location's name.",
            "example": "The Tired Window Atlanta Downtown"
          }
        },
        "description": "Reference to the associated Location resource. When used for POST and PATCH API calls, the reference can contain either the ID or Name. With GET API calls, both properties are populated."
      },
      "DeviceTypeReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced Device Type's ID.",
            "example": "23"
          },
          "name": {
            "type": "string",
            "description": "The referenced Device Type's name.",
            "example": "SREDKey"
          }
        },
        "description": "Reference to the associated Device Type resource. When used for POST and PATCH API calls, the reference can contain either the ID or Name. With GET API calls, both properties are populated."
      },
      "DeviceStateReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced Device State's ID.",
            "example": "2"
          },
          "name": {
            "type": "string",
            "description": "The referenced Device State's name.",
            "example": "activated"
          }
        },
        "description": "Reference to the associated Device State resource. When used for POST and PATCH API calls, the reference can contain either the ID or Name. With GET API calls, both properties are populated."
      },
      "DeviceBuildReference": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The referenced Device Build's ID",
            "example": "1305"
          },
          "name": {
            "type": "string",
            "description": "The referenced Country's name.",
            "example": "SREDKey 2 - PTS 5.X"
          },
          "buildNumber": {
            "type": "string",
            "description": "The referenced Device's Build number.",
            "example": "IDTECH-007"
          }
        },
        "description": "Reference to the associated Device Build resource. When used for POST and PATCH API calls, the reference can contain either the ID or Name. With GET API calls the id, name and build number are included in the response."
      },
      "ErrorValidation": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "example": "995ce120-d42c-11e7-a87d-7fe171ffa82f"
          },
          "errorCode": {
            "type": "integer",
            "example": 7409
          },
          "message": {
            "type": "string",
            "description": "Human readable description of the error message.",
            "example": "Data validation constraints."
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "[attribute name]": {
                  "$ref": "#/components/schemas/ErrorValidationItem"
                }
              }
            }
          }
        },
        "description": "Error object that is output when an API call fails validation."
      },
      "ErrorValidationItem": {
        "type": "object",
        "properties": {
          "attribute": {
            "type": "string",
            "description": "The name of the attribute that failed validation.",
            "example": "mailCountry"
          },
          "message": {
            "type": "string",
            "description": "Human readable description of the validation error.",
            "example": "Mail country has an incorrect length"
          },
          "errorCode": {
            "type": "integer",
            "description": "Error code",
            "example": 1002
          }
        },
        "description": "Error object that is output when an API call fails validation."
      },
      "ErrorServer": {
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "integer",
            "example": 1005
          },
          "message": {
            "type": "string",
            "description": "Human readable description of the validation error.",
            "example": "Unknown Error"
          }
        },
        "description": "Error object that is output when a server error is encountered."
      },
      "ErrorForbidden": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "example": "971a99a0-d429-11e7-b9e1-edee15522512"
          },
          "errorCode": {
            "type": "integer",
            "example": 7403
          },
          "message": {
            "type": "string",
            "description": "Human readable description of the error message.",
            "example": "Permission denied."
          }
        },
        "description": "Error object that is output when the an authoised API call lacks permissions to access the resource that it is requesting."
      },
      "ErrorUnauthorized": {
        "type": "object",
        "properties": {
          "uuid": {
            "type": "string",
            "example": "fe9d7890-d429-11e7-bcff-49e075da4e68"
          },
          "errorCode": {
            "type": "integer",
            "example": 7401
          },
          "message": {
            "type": "string",
            "description": "Human readable description of the error message.",
            "example": "Unauthenticated request."
          }
        },
        "description": "Error object that is output for unauthoised API calls."
      },
      "DeviceList": {
        "type": "object",
        "properties": {
          "total": {
            "type": "integer",
            "description": "Total number of Devices available (not the number of Users in the response).",
            "example": 1
          },
          "data": {
            "type": "array",
            "description": "List of Devices.",
            "items": {
              "$ref": "#/components/schemas/DeviceListItem"
            }
          }
        }
      },
      "DeviceListItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "This resource's unique identifier.",
            "example": "73"
          },
          "serialNumber": {
            "type": "string",
            "description": "The Device's serial number.",
            "example": "85000711"
          },
          "alternateKey": {
            "type": "string",
            "description": "The alternative key is used when a Device outputs a different serial number from its firmware/software when compared to the serial number that is printed on the Device's casing or its packaging. If there is a difference between the two, the serial number on the casing or packaging should be used as the alternative key and also in the alterntive key property of any related Shipments entries.",
            "example": "ID85000711"
          },
          "name": {
            "type": "string",
            "description": "The Device's name.",
            "example": "Atlanta Downtown Front Desk 1"
          },
          "deviceType": {
            "$ref": "#/components/schemas/DeviceTypeReference"
          },
          "deviceState": {
            "$ref": "#/components/schemas/DeviceStateReference"
          },
          "deviceBuild": {
            "$ref": "#/components/schemas/DeviceBuildReference"
          },
          "kif": {
            "$ref": "#/components/schemas/KifReference"
          },
          "location": {
            "$ref": "#/components/schemas/LocationReference"
          },
          "partner": {
            "$ref": "#/components/schemas/PartnerReference"
          },
          "client": {
            "$ref": "#/components/schemas/ClientReference"
          },
          "activationDate": {
            "type": "string",
            "description": "Timestamp from when the Device was activated.",
            "format": "datetime",
            "example": "2017-05-08T20:14:45.000Z"
          },
          "lastActivityDate": {
            "type": "string",
            "description": "Timestamp from when the Device was last active.",
            "format": "datetime",
            "example": "2017-05-08T20:14:45.000Z"
          },
          "created": {
            "type": "string",
            "description": "Creation timestamp in ISO 8601 format.",
            "format": "datetime",
            "example": "2017-02-08T20:14:45.000Z"
          },
          "modified": {
            "type": "string",
            "description": "Last modified timestamp.",
            "format": "datetime",
            "example": "2017-05-08T20:14:45.000Z"
          },
          "version": {
            "type": "integer",
            "description": "The number of times that this resource has been updated.",
            "example": 3
          },
          "isVirtual": {
            "type": "boolean",
            "description": "Indicates if a Device is Virtual (represents a Device shared with a partner).",
            "example": false
          },
          "notes": {
            "type": "string",
            "description": "Arbitary note that can be attached to a Device entry.",
            "example": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
          }
        }
      }
    },
    "securitySchemes": {
      "basic": {
        "type": "http",
        "scheme": "basic"
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "Common APIs",
      "tags": [
        "Users",
        "Partners",
        "Clients",
        "Devices",
        "Device Builds",
        "Device Custody",
        "Device States",
        "Device Types",
        "Locations"
      ]
    },
    {
      "name": "KIF Specific APIs",
      "tags": [
        "Inject Keys",
        "Shipments",
        "Device Types",
        "Decryption"
      ]
    },
    {
      "name": "Partner Specific APIs",
      "tags": [
        "Transactions",
        "Attestations",
        "Kifs",
        "Virtual Devices"
      ]
    }
  ],
  "x-readme": {
    "explorer-enabled": true,
    "proxy-enabled": true
  }
}
```