Skip to content
innovorder
⌘K

Organization

Brand Customers

Manage customers associated with a brand. Create new customers, load (create or update) customers in bulk, and retrieve paginated customer lists with keyset-based cursor pagination.

Create Customer

Customer creation (POST /brands/{brandId}/customers) is documented in Customers → Manage Customers, which covers both the standard (free-text) and hierarchy-based (guest group) payloads with a full field reference.

Bulk Loading & Listing

PUT/brands/{brandId}/customers/loaderCreate or Update Customer

Create a new customer or update an existing one. Used for bulk data loading and synchronization. The unicity field determines whether to match on email or studentNumber.

Parameters

NameTypeRequiredDescription
brandIdstringYesThe unique identifier of the brand.
notifyPOSbooleanNoWhether to notify POS devices of the change (query parameter).
unicityFieldstringNoField used for unicity check: "email" or "studentNumber" (query parameter).
autoImportGuestHierarchybooleanNoWhether to auto-import guest hierarchy (query parameter).

Request Body

json
{
  "email": "john.doe@example.com",
  "firstName": "John",
  "lastName": "Doe",
  "phone": "+33612345678",
  "defaults": {
    "email": "default@example.com",
    "password": "DefaultP@ss",
    "firstName": "Default",
    "lastName": "User"
  },
  "student": {
    "studentNumber": "STU-2025-001",
    "accountPaymentType": "PREPAYMENT"
  }
}
Request Body Properties

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

PropertyTypeExampleDescription
emailstring"john.doe@example.com"Email address.
firstNamestring"John"The first name value.
lastNamestring"Doe"The last name value.
phonestring"+33612345678"Phone number.
defaultsobject{…}Object containing defaults fields.
defaults.emailstring"default@example.com"Email address.
defaults.passwordstring"DefaultP@ss"The password value.
defaults.firstNamestring"Default"The first name value.
defaults.lastNamestring"User"The last name value.
studentobject{…}Object containing student fields.
student.studentNumberstring"STU-2025-001"The student number value.
student.accountPaymentTypestring"PREPAYMENT"The account payment type value.

Response

json
{
  "status": 200,
  "code": "customer_create_or_update_succeed",
  "message": "Customer has been successfully loaded.",
  "data": {
    "customerId": 50001,
    "email": "john.doe@example.com",
    "firstName": "John",
    "lastName": "Doe"
  }
}
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"customer_create_or_update_succeed"Machine-readable application code for the result.
messagestring"Customer has been successfully loaded."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.customerIdinteger50001Identifier of the customer.
data.emailstring"john.doe@example.com"Email address.
data.firstNamestring"John"The first name value.
data.lastNamestring"Doe"The last name value.

GET/brands/{brandId}/customersList Customers (Paginated)

Retrieve customers for a brand updated since a given date. Uses keyset-based cursor pagination for efficient iteration over large datasets.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe unique identifier of the brand.
sinceUtcstringYesDate in UTC (YYYY-MM-DD format). Only customers updated since this date are returned (query parameter).
cursorstringNoCursor for keyset pagination. Use the value from the previous response to get the next page (query parameter).
limitintegerNoMaximum number of results per page. Defaults to 100 (query parameter).

Response

json
{
  "status": 200,
  "code": "success",
  "data": [
    {
      "id": 50001,
      "email": "john.doe@example.com",
      "firstName": "John",
      "lastName": "Doe",
      "phone": "+33612345678",
      "brandId": 100
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6NTAwMDF9"
  }
}
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"success"Machine-readable application code for the result.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].idinteger50001The id value.
data[].emailstring"john.doe@example.com"Email address.
data[].firstNamestring"John"The first name value.
data[].lastNamestring"Doe"The last name value.
data[].phonestring"+33612345678"Phone number.
data[].brandIdinteger100Identifier of the brand.
paginationobject{…}Object containing pagination fields.
pagination.nextCursorstring"eyJpZCI6NTAwMDF9"Cursor to use when retrieving the next page.

GET/brands/{brandId}/customers/paymentTypes/{paymentType}/countGet Customer Count by Payment Type

Retrieve the number of customers for a brand filtered by their payment type (e.g., PREPAYMENT, POSTPAYMENT, CASH).

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe unique identifier of the brand.
paymentTypestringYesThe account payment type: PREPAYMENT, POSTPAYMENT, or CASH.

Response

json
{
  "status": 200,
  "code": "customer_count_by_payment_type_found",
  "message": "The customer count by paymentType from a brand have been found",
  "data": {
    "count": 342
  }
}
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"customer_count_by_payment_type_found"Machine-readable application code for the result.
messagestring"The customer count by paymentType from a brand have been found"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.countinteger342Total number of matching records.

Student Entities

Retrieve student entity hierarchies (sections, classes, groups) configured for a brand. These are used in collective catering contexts to organize customers into groups with specific pricing rules and entrance fees.

GET/brands/{brandId}/students_entitiesGet All Student Entities

Retrieve the distinct student entity values (classes, sections, sub-sections, tariff codes) used by the customers of the brand, including disabled and archived customers, plus the class > section > sub-section tree in the entities field.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe unique identifier of the brand.

Response

json
{
  "status": 200,
  "code": "students_entities_found",
  "message": "Student entities found",
  "data": {
    "sections": [
      "Sciences",
      "Lettres"
    ],
    "subSections": [
      "Groupe A"
    ],
    "classes": [
      "L3 Informatique"
    ],
    "tariffCodes": [
      "T1"
    ],
    "entities": [
      {
        "name": "L3 Informatique",
        "children": [
          {
            "name": "Sciences",
            "children": [
              {
                "name": "Groupe A",
                "children": []
              }
            ]
          }
        ]
      }
    ]
  }
}
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"students_entities_found"Machine-readable application code for the result.
messagestring"Student entities found"Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.sectionsarray[…]List of sections entries.
data.sections[]string"Sciences"The sections value.
data.subSectionsarray[…]List of sub sections entries.
data.subSections[]string"Groupe A"The sub sections value.
data.classesarray[…]List of classes entries.
data.classes[]string"L3 Informatique"The classes value.
data.tariffCodesarray[…]List of tariff codes entries.
data.tariffCodes[]string"T1"The tariff codes value.
data.entitiesarray[…]List of entities entries.
data.entities[]object{…}Object containing entities fields.
data.entities[].namestring"L3 Informatique"The name value.
data.entities[].childrenarray[…]List of children entries.
data.entities[].children[]object{…}Object containing children fields.
data.entities[].children[].namestring"Sciences"The name value.
data.entities[].children[].childrenarray[…]List of children entries.
data.entities[].children[].children[]object{…}Object containing children fields.
data.entities[].children[].children[].namestring"Groupe A"The name value.
data.entities[].children[].children[].childrenarray[]List of children entries.

The active-only variant, GET /brands/{brandId}/active_students_entities, returns the same structure restricted to enabled, non-archived customers. It is documented in Customers → Hierarchy & Groups as part of the hierarchy traversal workflow.