Skip to content
innovorder
⌘K

Point of sale

POS Access Management

System map · POS sign-in
Staff member
Access grant
POS device

Manage POS user access: roles, groups, and individual users. Roles define permission sets that control what actions a POS operator can perform. Groups organize POS devices and users together. Users represent individual POS operators with PIN-based authentication.

Key Concepts

Role

A named permission set (e.g. Manager, Cashier) that defines which POS screens and actions a user can access.

Group

A logical grouping of POS devices and users. Each restaurant can have multiple groups. One group is marked as default.

User

An individual POS operator identified by name and a 4- or 8-character PIN code. Assigned to a role that determines their permissions.

Roles

GET/restaurants/{restaurantId}/pos_access/rolesList all POS roles

Retrieve all POS access roles defined for a restaurant. Each role contains a name, a key, and a list of permissions.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Response

json
{
  "status": 200,
  "code": "pos_access_roles_found",
  "message": "POS access groups have been found",
  "data": [
    {
      "posRoleId": 101,
      "restaurantId": 4200,
      "key": "manager",
      "name": "Manager",
      "permissions": [
        "ACCESS_NEW_ORDER_SCREEN",
        "ACCESS_TICKET_SCREEN",
        "ACCESS_RAZ_SCREEN",
        "CANCEL_ORDER",
        "APPLY_DISCOUNT"
      ]
    },
    {
      "posRoleId": 102,
      "restaurantId": 4200,
      "key": "cashier",
      "name": "Cashier",
      "permissions": [
        "ACCESS_NEW_ORDER_SCREEN",
        "ACCESS_TICKET_SCREEN"
      ]
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_roles_found"Machine-readable application code for the result.
messagestring"POS access groups have been found"Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].posRoleIdinteger101Identifier of the associated pos role.
data[].restaurantIdinteger4200Identifier of the restaurant.
data[].keystring"manager"The key value.
data[].namestring"Manager"The name value.
data[].permissionsarray[…]List of permissions entries.
data[].permissions[]string"ACCESS_NEW_ORDER_SCREEN"The permissions value.

GET/restaurants/{restaurantId}/pos_access/roles/permissionsList all available permissions

Returns the full list of assignable POS permissions. Use this to build a permission editor UI.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Response

json
{
  "status": 200,
  "code": "pos_access_roles_found",
  "message": "POS access groups have been found",
  "data": [
    "ACCESS_CATALOG_SCREEN",
    "ACCESS_CUSTOMISATION_SCREEN",
    "ACCESS_E_WALLET_SCREEN",
    "ACCESS_MANAGE_CASH_FLOAT_SCREEN",
    "ACCESS_MANAGE_DISCOUNT_SCREEN",
    "ACCESS_MANAGE_RUNNER_SCREEN",
    "ACCESS_MANAGE_TABLES_SCREEN",
    "ACCESS_NEW_ORDER_SCREEN",
    "ACCESS_ORDERS_FOLLOW_UP_SCREEN",
    "ACCESS_PARAMETER_SCREEN",
    "ACCESS_PRINTER_SCREEN",
    "ACCESS_RAZ_SCREEN",
    "ACCESS_TICKET_SCREEN",
    "APPLY_DISCOUNT",
    "CANCEL_ORDER",
    "CANCEL_VALIDATED_ORDER_ITEM",
    "CREATE_GROUP",
    "CREATE_PRODUCT",
    "DELETE_DEFAULT_PRINTER",
    "DISCONNECT",
    "ENTER_DISCOUNT_WHEN_PLACING_AN_ORDER",
    "EXPORT_ARCHIVE",
    "GENERATE_ARCHIVE",
    "JUSTIFY_ORDERS",
    "LINK_A_BADGE",
    "MODIFY_FEATURE_OPTIONS",
    "MODIFY_GROUP_FROM_GRID",
    "MODIFY_ORDER_ITEM_PRICE",
    "MODIFY_PASSWORD",
    "MODIFY_PRODUCT_FROM_GRID",
    "MODIFY_SKU_BILLING_CODE_PURCHASE_PRICE",
    "MODIFY_PRODUCT_PRICE",
    "MODIFY_PRODUCT_OTHER_INFO",
    "MODIFY_TICKET",
    "MODIFY_TICKET_GROUPS",
    "MODIFY_TICKET_ORDER_PLACES",
    "MODIFY_TICKET_ORDER_STATUS",
    "MODIFY_TICKET_QUANTITY",
    "MODIFY_VALIDATED_ORDER_ITEM",
    "OFFER_PRODUCT_FOR_FREE",
    "OPEN_CASH_DRAWER",
    "PRINT_VALID_TICKET",
    "REFUND_CLIENT",
    "REMOVE_PRODUCT_FROM_CATALOG",
    "REOPEN_ORDER",
    "SEARCH_CLIENT",
    "SHOW_APPLY_PRICING_RULE_BUTTON",
    "SYNC_ARCHIVE",
    "VIEW_AUDIT_TRAIL",
    "VIEW_FEATURE_OPTIONS",
    "VIEW_ORDER_AUDIT",
    "VIEW_REVENUE_IN_FOLLOW_UP",
    "VIEW_TICKET_AUDIT",
    "VIEW_TICKET_TEMPLATE",
    "ACCESS_CUSTOMERS_SCREEN",
    "MODIFY_TICKET_PRINTER",
    "FORCE_ORDER_SHIFT",
    "VALIDATE_EPT_PAYMENT_OPERATIONS",
    "MODIFY_FUNCTION_FROM_GRID"
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_roles_found"Machine-readable application code for the result.
messagestring"POS access groups have been found"Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]string"ACCESS_CATALOG_SCREEN"Endpoint-specific response payload.

GET/restaurants/{restaurantId}/pos_access/roles/{roleId}Get a single POS role

Retrieve a specific POS role by its ID, including its permission list.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
roleIdintegerYesThe unique identifier of the POS role.

Response

json
{
  "status": 200,
  "code": "pos_access_role_found",
  "message": "POS access group has been found",
  "data": {
    "posRoleId": 101,
    "restaurantId": 4200,
    "key": "manager",
    "name": "Manager",
    "permissions": [
      "ACCESS_NEW_ORDER_SCREEN",
      "ACCESS_TICKET_SCREEN",
      "ACCESS_RAZ_SCREEN",
      "CANCEL_ORDER",
      "APPLY_DISCOUNT"
    ]
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_role_found"Machine-readable application code for the result.
messagestring"POS access group has been found"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.posRoleIdinteger101Identifier of the associated pos role.
data.restaurantIdinteger4200Identifier of the restaurant.
data.keystring"manager"The key value.
data.namestring"Manager"The name value.
data.permissionsarray[…]List of permissions entries.
data.permissions[]string"ACCESS_NEW_ORDER_SCREEN"The permissions value.

PATCH/restaurants/{restaurantId}/pos_access/roles/{roleId}Update a POS role's permissions

Replace the permission list of a POS role. Send the full desired list of permissions.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
roleIdintegerYesThe unique identifier of the POS role.

Request Body

json
{
  "permissions": [
    "ACCESS_NEW_ORDER_SCREEN",
    "ACCESS_TICKET_SCREEN",
    "CANCEL_ORDER"
  ]
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
permissionsarray[…]List of permissions entries.
permissions[]string"ACCESS_NEW_ORDER_SCREEN"The permissions value.

Response

json
{
  "status": 200,
  "code": "pos_access_role_updated",
  "message": "POS access role has been updated",
  "data": {
    "posRoleId": 101,
    "restaurantId": 4200,
    "key": "manager",
    "name": "Manager",
    "permissions": [
      "ACCESS_NEW_ORDER_SCREEN",
      "ACCESS_TICKET_SCREEN",
      "CANCEL_ORDER"
    ]
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_role_updated"Machine-readable application code for the result.
messagestring"POS access role has been updated"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.posRoleIdinteger101Identifier of the associated pos role.
data.restaurantIdinteger4200Identifier of the restaurant.
data.keystring"manager"The key value.
data.namestring"Manager"The name value.
data.permissionsarray[…]List of permissions entries.
data.permissions[]string"ACCESS_NEW_ORDER_SCREEN"The permissions value.

Groups

GET/restaurants/{restaurantId}/pos_access/groupsList all POS access groups

Retrieve all POS access groups for a restaurant. Each group includes its associated POS devices and users.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Response

json
{
  "status": 200,
  "code": "pos_access_groups_found",
  "message": "POS access roles have been found",
  "data": [
    {
      "posAccessGroupId": 10,
      "restaurantId": 4200,
      "name": "Main Floor",
      "isDefault": true,
      "posDevices": [
        {
          "posDeviceId": 501
        },
        {
          "posDeviceId": 502
        }
      ],
      "posUsers": [
        {
          "posUserId": 1,
          "name": "Alice",
          "posRoleId": 101
        },
        {
          "posUserId": 2,
          "name": "Bob",
          "posRoleId": 102
        }
      ]
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_groups_found"Machine-readable application code for the result.
messagestring"POS access roles have been found"Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].posAccessGroupIdinteger10Identifier of the associated pos access group.
data[].restaurantIdinteger4200Identifier of the restaurant.
data[].namestring"Main Floor"The name value.
data[].isDefaultbooleantrueWhether default is enabled or applies.
data[].posDevicesarray[…]List of pos devices entries.
data[].posDevices[]object{…}Object containing pos devices fields.
data[].posDevices[].posDeviceIdinteger501Identifier of the associated pos device.
data[].posUsersarray[…]List of pos users entries.
data[].posUsers[]object{…}Object containing pos users fields.
data[].posUsers[].posUserIdinteger1Identifier of the associated pos user.
data[].posUsers[].namestring"Alice"The name value.
data[].posUsers[].posRoleIdinteger101Identifier of the associated pos role.

POST/restaurants/{restaurantId}/pos_access/groupsCreate a POS access group

Create a new POS access group for a restaurant. Optionally associate POS devices and users at creation time.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "name": "Terrace",
  "posDeviceIds": [
    503
  ],
  "posUserIds": [
    3,
    4
  ]
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
namestring"Terrace"The name value.
posDeviceIdsarray[…]List of pos device ids entries.
posDeviceIds[]integer503The pos device ids value.
posUserIdsarray[…]List of pos user ids entries.
posUserIds[]integer3The pos user ids value.

Response

json
{
  "status": 200,
  "code": "pos_access_group_created",
  "message": "POS access group has been created",
  "data": {
    "posAccessGroupId": 11,
    "restaurantId": 4200,
    "name": "Terrace",
    "isDefault": false,
    "posDevices": [
      {
        "posDeviceId": 503
      }
    ],
    "posUsers": [
      {
        "posUserId": 3,
        "name": "Carol",
        "posRoleId": 101
      },
      {
        "posUserId": 4,
        "name": "Dave",
        "posRoleId": 102
      }
    ]
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_group_created"Machine-readable application code for the result.
messagestring"POS access group has been created"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.posAccessGroupIdinteger11Identifier of the associated pos access group.
data.restaurantIdinteger4200Identifier of the restaurant.
data.namestring"Terrace"The name value.
data.isDefaultbooleanfalseWhether default is enabled or applies.
data.posDevicesarray[…]List of pos devices entries.
data.posDevices[]object{…}Object containing pos devices fields.
data.posDevices[].posDeviceIdinteger503Identifier of the associated pos device.
data.posUsersarray[…]List of pos users entries.
data.posUsers[]object{…}Object containing pos users fields.
data.posUsers[].posUserIdinteger3Identifier of the associated pos user.
data.posUsers[].namestring"Carol"The name value.
data.posUsers[].posRoleIdinteger101Identifier of the associated pos role.

GET/restaurants/{restaurantId}/pos_access/groups/{groupId}Get a single POS access group

Retrieve a specific POS access group by its ID, including associated devices and users.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
groupIdintegerYesThe unique identifier of the POS access group.

Response

json
{
  "status": 200,
  "code": "pos_access_group_found",
  "message": "POS access group has been found",
  "data": {
    "posAccessGroupId": 10,
    "restaurantId": 4200,
    "name": "Main Floor",
    "isDefault": true,
    "posDevices": [
      {
        "posDeviceId": 501
      },
      {
        "posDeviceId": 502
      }
    ],
    "posUsers": [
      {
        "posUserId": 1,
        "name": "Alice",
        "posRoleId": 101
      },
      {
        "posUserId": 2,
        "name": "Bob",
        "posRoleId": 102
      }
    ]
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_group_found"Machine-readable application code for the result.
messagestring"POS access group has been found"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.posAccessGroupIdinteger10Identifier of the associated pos access group.
data.restaurantIdinteger4200Identifier of the restaurant.
data.namestring"Main Floor"The name value.
data.isDefaultbooleantrueWhether default is enabled or applies.
data.posDevicesarray[…]List of pos devices entries.
data.posDevices[]object{…}Object containing pos devices fields.
data.posDevices[].posDeviceIdinteger501Identifier of the associated pos device.
data.posUsersarray[…]List of pos users entries.
data.posUsers[]object{…}Object containing pos users fields.
data.posUsers[].posUserIdinteger1Identifier of the associated pos user.
data.posUsers[].namestring"Alice"The name value.
data.posUsers[].posRoleIdinteger101Identifier of the associated pos role.

PATCH/restaurants/{restaurantId}/pos_access/groups/{groupId}Update a POS access group

Update the name and member assignments of a POS access group. Both posDeviceIds and posUserIds are required and will fully replace the current associations.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
groupIdintegerYesThe unique identifier of the POS access group.

Request Body

json
{
  "name": "Main Floor (Updated)",
  "posDeviceIds": [
    501,
    502,
    504
  ],
  "posUserIds": [
    1,
    2,
    5
  ]
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
namestring"Main Floor (Updated)"The name value.
posDeviceIdsarray[…]List of pos device ids entries.
posDeviceIds[]integer501The pos device ids value.
posUserIdsarray[…]List of pos user ids entries.
posUserIds[]integer1The pos user ids value.

Response

json
{
  "status": 200,
  "code": "pos_access_group_updated",
  "message": "POS access group has been updated",
  "data": {
    "posAccessGroupId": 10,
    "restaurantId": 4200,
    "name": "Main Floor (Updated)",
    "isDefault": true
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_group_updated"Machine-readable application code for the result.
messagestring"POS access group has been updated"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.posAccessGroupIdinteger10Identifier of the associated pos access group.
data.restaurantIdinteger4200Identifier of the restaurant.
data.namestring"Main Floor (Updated)"The name value.
data.isDefaultbooleantrueWhether default is enabled or applies.

DELETE/restaurants/{restaurantId}/pos_access/groups/{groupId}Delete a POS access group

Delete a POS access group. The default group cannot be deleted.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
groupIdintegerYesThe unique identifier of the POS access group.

Response

json
{
  "status": 200,
  "code": "pos_access_group_deleted",
  "message": "POS access group has been deleted",
  "data": {}
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_group_deleted"Machine-readable application code for the result.
messagestring"POS access group has been deleted"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.

Users

GET/restaurants/{restaurantId}/pos_access/usersList all POS users

Retrieve all POS users for a restaurant. Each user includes their name, how they identify on the till, their role assignment, and associated role details.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Response

json
{
  "status": 200,
  "code": "pos_access_users_found",
  "message": "POS access users have been found",
  "data": [
    {
      "posUserId": 1,
      "restaurantId": 4200,
      "name": "Alice",
      "authenticationMethod": "PIN_CODE",
      "pinCode": "1234",
      "physicalKeyValue": null,
      "posRoleId": 101,
      "posRole": {
        "posRoleId": 101,
        "key": "manager",
        "name": "Manager"
      }
    },
    {
      "posUserId": 2,
      "restaurantId": 4200,
      "name": "Bob",
      "authenticationMethod": "PHYSICAL_KEY",
      "pinCode": null,
      "physicalKeyValue": "K-123",
      "posRoleId": 102,
      "posRole": {
        "posRoleId": 102,
        "key": "cashier",
        "name": "Cashier"
      }
    }
  ]
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_users_found"Machine-readable application code for the result.
messagestring"POS access users have been found"Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].posUserIdinteger1Identifier of the associated pos user.
data[].restaurantIdinteger4200Identifier of the restaurant.
data[].namestring"Alice"The name value.
data[].authenticationMethodstring"PIN_CODE"The authentication method value.
data[].pinCodestring"1234"The pin code value.
data[].physicalKeyValuenullnullThe physical key value value.
data[].posRoleIdinteger101Identifier of the associated pos role.
data[].posRoleobject{…}Object containing pos role fields.
data[].posRole.posRoleIdinteger101Identifier of the associated pos role.
data[].posRole.keystring"manager"The key value.
data[].posRole.namestring"Manager"The name value.
authenticationMethodstringNot providedHow the operator identifies on the till: `PIN_CODE` or `PHYSICAL_KEY`.
pinCodestring | nullNot providedThe PIN code, in clear text. Null when the operator identifies with a physical key.
physicalKeyValuestring | nullNot providedThe physical key value, in clear text. Null when the operator identifies with a PIN code.

POST/restaurants/{restaurantId}/pos_access/usersCreate a POS user

Create a new POS user for a restaurant. The operator identifies on the till with either a PIN code or a physical key, never both, so exactly one of `pinCode` and `physicalKeyValue` must be supplied. A profile with no secret at all is rejected with `pos_user_authentication_secret_required`.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.

Request Body

json
{
  "name": "Carol",
  "authenticationMethod": "PHYSICAL_KEY",
  "physicalKeyValue": "K-456",
  "posRoleId": 102
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeRequiredExampleDescription
namestringYes"Carol"Operator name, 1 to 64 characters.
authenticationMethodstringNot specified"PHYSICAL_KEY"`PIN_CODE` or `PHYSICAL_KEY`. Defaults to `PIN_CODE` when omitted.
physicalKeyValuestringNot specified"K-456"Required when the method is `PHYSICAL_KEY`. Up to 255 characters, unique among the profiles of the restaurant once normalised; a duplicate is rejected with `pos_user_physical_key_value_already_used`. Normalisation keeps what precedes the first line ending and trims the surrounding whitespace; case and inner spaces are significant.
posRoleIdintegerYes102The POS role granted to the operator.
pinCodestringNot specifiedNot providedRequired when the method is `PIN_CODE`. Exactly 4 or 8 characters. Ignored, and erased, when the method is `PHYSICAL_KEY`.

Response

json
{
  "status": 200,
  "code": "pos_access_user_created",
  "message": "POS access user has been created",
  "data": {
    "posUserId": 3,
    "restaurantId": 4200,
    "name": "Carol",
    "authenticationMethod": "PHYSICAL_KEY",
    "pinCode": null,
    "physicalKeyValue": "K-456",
    "posRoleId": 102
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_user_created"Machine-readable application code for the result.
messagestring"POS access user has been created"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.posUserIdinteger3Identifier of the associated pos user.
data.restaurantIdinteger4200Identifier of the restaurant.
data.namestring"Carol"The name value.
data.authenticationMethodstring"PHYSICAL_KEY"The authentication method value.
data.pinCodenullnullThe pin code value.
data.physicalKeyValuestring"K-456"The physical key value value.
data.posRoleIdinteger102Identifier of the associated pos role.

GET/restaurants/{restaurantId}/pos_access/users/{userId}Get a single POS user

Retrieve a specific POS user by their ID.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
userIdintegerYesThe unique identifier of the POS user.

Response

json
{
  "status": 200,
  "code": "pos_access_user_found",
  "message": "POS access user has been found",
  "data": {
    "posUserId": 1,
    "restaurantId": 4200,
    "name": "Alice",
    "authenticationMethod": "PIN_CODE",
    "pinCode": "1234",
    "physicalKeyValue": null,
    "posRoleId": 101,
    "posRole": {
      "posRoleId": 101,
      "key": "manager",
      "name": "Manager"
    }
  }
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_user_found"Machine-readable application code for the result.
messagestring"POS access user has been found"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.posUserIdinteger1Identifier of the associated pos user.
data.restaurantIdinteger4200Identifier of the restaurant.
data.namestring"Alice"The name value.
data.authenticationMethodstring"PIN_CODE"The authentication method value.
data.pinCodestring"1234"The pin code value.
data.physicalKeyValuenullnullThe physical key value value.
data.posRoleIdinteger101Identifier of the associated pos role.
data.posRoleobject{…}Object containing pos role fields.
data.posRole.posRoleIdinteger101Identifier of the associated pos role.
data.posRole.keystring"manager"The key value.
data.posRole.namestring"Manager"The name value.

PATCH/restaurants/{restaurantId}/pos_access/users/{userId}Update a POS user

Update a POS user's name, identification method, secret, or role assignment. All fields are optional, and a field left out keeps its stored value. Changing the identification method rewrites the secret rather than keeping both: it must be supplied in the same request, and the secret of the abandoned method is erased, which also frees a physical key value for another profile of the restaurant. The response carries no `data`; read the user back if you need the stored state.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
userIdintegerYesThe unique identifier of the POS user.

Request Body

json
{
  "name": "Alice M.",
  "authenticationMethod": "PHYSICAL_KEY",
  "physicalKeyValue": "K-789",
  "posRoleId": 101
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
namestring"Alice M."Operator name, 1 to 64 characters.
authenticationMethodstring"PHYSICAL_KEY"`PIN_CODE` or `PHYSICAL_KEY`. Omit to keep the current method.
physicalKeyValuestring"K-789"Required when switching to `PHYSICAL_KEY`, otherwise the request is rejected with `pos_user_physical_key_value_required`. Same uniqueness and normalisation rules as on creation.
posRoleIdinteger101The POS role granted to the operator.
pinCodestringNot providedExactly 4 or 8 characters. Required when switching to `PIN_CODE`, since the previous code was erased when the key was set. Otherwise the request is rejected with `pos_user_pin_code_required`.

Response

json
{
  "status": 200,
  "code": "pos_access_user_updated",
  "message": "POS access user has been updated"
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_user_updated"Machine-readable application code for the result.
messagestring"POS access user has been updated"Human-readable result message. Do not use this value for program logic.

DELETE/restaurants/{restaurantId}/pos_access/users/{userId}Delete a POS user

Delete a POS user from the restaurant.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesThe unique identifier of the restaurant.
userIdintegerYesThe unique identifier of the POS user.

Response

json
{
  "status": 200,
  "code": "pos_access_user_deleted",
  "message": "POS access user has been deleted",
  "data": {}
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_user_deleted"Machine-readable application code for the result.
messagestring"POS access user has been deleted"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.

Publish POS Access

POST/restaurants/{restaurantId}/pos_access/publishPublish POS Access to a Device

Notifies the selected POS device to refresh its access roles, groups, and users. The caller must have access to the restaurant.

Parameters

NameTypeRequiredDescription
restaurantIdintegerYesRestaurant whose POS access configuration is published.

Request Body

json
{
  "posDeviceId": 501
}
Request Body Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeRequiredExampleDescription
posDeviceIdintegerYes501Target POS device that receives the access-configuration update.

Response

json
{
  "status": 200,
  "code": "pos_access_published",
  "message": "POS access has been published to the selected POS device."
}
Response Properties

Every field in the example is listed below. Explicit requiredness is shown when the endpoint contract defines it.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"pos_access_published"Machine-readable application code for the result.
messagestring"POS access has been published to the selected POS device."Human-readable result message. Do not use this value for program logic.