Skip to content

Enroll a device

Pair a phone or Kustom terminal with your account through an enrollment code from POST /ipp/v1/enrollments, then list, name and deregister your devices.

A phone or terminal can’t take payments until it’s enrolled on your account. Your backend creates a single-use enrollment code, a clerk types it into the Kustom POS app, and the app pairs itself. Creating the code is the only part you build.

  • In-person payments is enabled on your account.
  • The Kustom POS app is installed on the device.
  • If your account has more than one location, you know which one the device belongs to. You can list your locations to find the location_id.

Enrolling many managed devices at once? Enroll a managed fleet pushes the codes through your MDM instead.

POST /ipp/v1/enrollments. The response carries an enrollment_code and an expires_at.

The ttl you send decides what kind of code you get:

ttlCode
TWO_HOURSA short 8-character code, made for a clerk to type
TWENTY_FOUR_HOURS, FORTY_EIGHT_HOURS, SEVENTY_TWO_HOURS, THIRTY_DAYSA UUID, made for pushing to a device rather than typing

On an account with more than one location, location_id is required, and it binds the device to that location for good. Sessions don’t carry a location — they inherit the device’s.

Any metadata you attach is carried onto the device record when pairing completes. Tag each enrollment with its store or lane, and you can filter devices by it later.

How it reaches them is yours to choose. The clerk types it into the Kustom POS app, which registers the device against your account and receives its own bearer token. Nothing more is needed from your backend.

The enrolled device has a stable device_id, which is what you send when you create a session. From here you can list, update and deregister devices.

Name each device when you update it. Nothing in the API says whether a device is a phone or a Kustom terminal, so a name such as “Terminal, till 2” is how you tell them apart in the device list.

Deregistering revokes the device’s bearer token immediately. The clerk has to enroll it again before it can take another payment.

The device appears in GET /ipp/v1/devices, carrying the metadata you set on its enrollment. The enrollment itself has moved to CONSUMED:

StatusMeaning
PENDINGCreated, and no clerk has entered it yet
CONSUMEDA device registered with it
EXPIREDNot used before expires_at. Create a new enrollment
CANCELLEDDeleted with DELETE /ipp/v1/enrollments/{enrollment_id}

CANCELLED and EXPIRED enrollments are left out of list results.

The /ipp/v1 endpoints return 404 or 403. In-person payments isn’t enabled on the account. That’s a conversation with your Kustom representative, not a code fix.

The clerk’s code is rejected. It expired or was already used — codes are single-use. Create a new enrollment.

The device needs to move to another location. A device stays bound to the location it enrolled into. Deregister it and enroll it again with the new location_id.

This page is also available as Markdown — append .md to its URL — and is indexed in llms.txt.