Skip to content
innovorder
⌘K

Customer identity

Customer Data

Access and manage customer-related data including e-wallet balances, bulk imports, PDF tickets, and custom metadata.

E-Wallet & Balance

Retrieve e-wallet automatic reload configuration and balance history for a customer. Balance history tracks all e-wallet transactions (credits, debits, refunds).

GET/customers/{customerId}/ewallet_automatic_reloadGet E-Wallet Auto-Reload Config

Retrieve the automatic e-wallet reload configuration for a customer.

Parameters

NameTypeRequiredDescription
customerIdintegerYesThe unique identifier of the customer.

Response

json
{
  "status": 200,
  "code": "customer_ewallet_automatic_reload_succeed",
  "message": "Configuration retrieved successfully.",
  "data": {
    "automaticEwalletReloadActive": true,
    "automaticEwalletReloadMinBalance": 500,
    "automaticEwalletReloadAmount": 2000,
    "automaticEwalletReloadCardId": 12345
  }
}
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_ewallet_automatic_reload_succeed"Machine-readable application code for the result.
messagestring"Configuration retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.automaticEwalletReloadActivebooleantrueThe automatic ewallet reload active value.
data.automaticEwalletReloadMinBalanceinteger500The automatic ewallet reload min balance value.
data.automaticEwalletReloadAmountinteger2000The automatic ewallet reload amount value.
data.automaticEwalletReloadCardIdinteger12345Identifier of the associated automatic ewallet reload card.
Balance History

The full reference for GET /customers/{customerId}/balance_history (parameters, includes, and response schema) lives in the E-Wallet Balance & Transactions section.
In addition to the parameters documented there, the endpoint supports include=order and a date-range filter using unix timestamps: applyDate[gte]=1700000000&applyDate[lte]=1710000000.

GET/customers/{customerId}/balance_history/countGet Balance History Count

Retrieve the total number of balance history entries for a customer. Useful for pagination.

Parameters

NameTypeRequiredDescription
customerIdintegerYesThe unique identifier of the customer.

Response

json
{
  "status": 200,
  "code": "balance_count_succeed",
  "message": "Balance count retrieved.",
  "data": {
    "total": 142
  }
}
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"balance_count_succeed"Machine-readable application code for the result.
messagestring"Balance count retrieved."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.totalinteger142Total number of matching records.

Customer Import

Bulk import customers from a file. The endpoint accepts a file upload and processes it asynchronously, streaming progress updates back to the client via chunked transfer encoding.

Streaming Response

This endpoint uses Transfer-Encoding: chunked to stream progress updates during the import. The final chunk contains the standard JSON response with import results (customers created, updated, and unchanged).

POST/customers/importImport Customers from File

Upload a CSV/Excel file to bulk import customers for a brand. Requires a file in multipart/form-data format.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe brand ID to import customers into.
isMultiBadgebooleanNoIf true, the file format supports multiple badges per customer.
autoImportGuestHierarchybooleanNoIf true, automatically creates guest group hierarchy from the file data.

Request Body

json
multipart/form-data with a 'file' field containing the CSV or Excel file.

Response

json
{
  "status": 200,
  "code": "customers_import_create_succeed",
  "message": "Import completed successfully.",
  "data": {
    "customersCreated": 15,
    "customersUpdated": 3,
    "customersUnchanged": 82
  }
}
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"customers_import_create_succeed"Machine-readable application code for the result.
messagestring"Import completed successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.customersCreatedinteger15The customers created value.
data.customersUpdatedinteger3The customers updated value.
data.customersUnchangedinteger82The customers unchanged value.

POST/customers/import_phoenixImport Phoenix Customer File

Upload a Phoenix-formatted customer file for a brand. The endpoint streams text progress chunks and ends with the standard JSON result payload.

Parameters

NameTypeRequiredDescription
brandIdintegerYesBrand that owns the imported customers.

Request Body

json
file=[binary]
Request Body Properties

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

PropertyTypeRequiredExampleDescription
filebinaryYes[binary]Phoenix-formatted customer file uploaded as multipart/form-data.

Response

json
{
  "status": 200,
  "code": "customers_import_create_succeed",
  "message": "Customers have been imported successfully.",
  "data": {
    "customersCreated": 15,
    "customersUpdated": 3,
    "customersUnchanged": 82,
    "customersError": [
      {
        "line": 7,
        "email": "invalid@example.com",
        "invalidFields": [
          "email"
        ]
      }
    ],
    "customersWarn": [
      {
        "line": 8,
        "email": "duplicate@example.com",
        "invalidFields": [
          "email"
        ]
      }
    ],
    "otherWarnings": [
      {
        "type": "pricingRule",
        "list": [
          "UNKNOWN-RULE"
        ]
      }
    ],
    "validationErrors": []
  }
}
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"customers_import_create_succeed"Machine-readable application code for the result.
messagestring"Customers have been imported successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.customersCreatedinteger15The customers created value.
data.customersUpdatedinteger3The customers updated value.
data.customersUnchangedinteger82The customers unchanged value.
data.customersErrorarray[…]List of customers error entries.
data.customersError[]object{…}Object containing customers error fields.
data.customersError[].lineinteger7The line value.
data.customersError[].emailstring"invalid@example.com"Email address.
data.customersError[].invalidFieldsarray[…]List of invalid fields entries.
data.customersError[].invalidFields[]string"email"The invalid fields value.
data.customersWarnarray[…]List of customers warn entries.
data.customersWarn[]object{…}Object containing customers warn fields.
data.customersWarn[].lineinteger8The line value.
data.customersWarn[].emailstring"duplicate@example.com"Email address.
data.customersWarn[].invalidFieldsarray[…]List of invalid fields entries.
data.customersWarn[].invalidFields[]string"email"The invalid fields value.
data.otherWarningsarray[…]List of other warnings entries.
data.otherWarnings[]object{…}Object containing other warnings fields.
data.otherWarnings[].typestring"pricingRule"The type value.
data.otherWarnings[].listarray[…]List of list entries.
data.otherWarnings[].list[]string"UNKNOWN-RULE"The list value.
data.validationErrorsarray[]List of validation errors entries.

Customer Base Export

Export a filtered customer base directly as CSV or XLSX. If a large export cannot complete within the synchronous request window, request the asynchronous report instead and retrieve it from report generation.

GET/customers/exportExport Customer Base File

Returns a CSV or XLSX attachment. The export is scoped to the requested brand and supports the same filters as the customer list.

Parameters

NameTypeRequiredDescription
brandIdintegerYesBrand whose customers are exported.
fileTypestringYesOutput format: csv or xlsx.
restaurantIdsstringNoComma-separated restaurant IDs used to filter the export.
searchstringNoFree-text customer search filter.
groupsstringNoComma-separated customer-group filters.
mustDisplayArchivedCustomersbooleanNoInclude archived customers when true.

Response

json
Binary attachment. Content-Type is text/csv for csv or application/vnd.openxmlformats-officedocument.spreadsheetml.sheet for xlsx; Content-Disposition contains the filename.

GET/customers/export/asyncRequest Asynchronous Customer Base Export

Creates a report-generation request for the same export filters. Use this when the synchronous export times out or for large customer bases.

Parameters

NameTypeRequiredDescription
brandIdintegerYesBrand whose customers are exported.
fileTypestringYesRequested output format: csv or xlsx.
restaurantIdsstringNoComma-separated restaurant IDs used to filter the export.
searchstringNoFree-text customer search filter.
groupsstringNoComma-separated customer-group filters.
mustDisplayArchivedCustomersbooleanNoInclude archived customers when true.

Response

json
{
  "status": 200,
  "code": "customer_base_export_request_created",
  "message": "Customer base export request is created successfully."
}
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_base_export_request_created"Machine-readable application code for the result.
messagestring"Customer base export request is created successfully."Human-readable result message. Do not use this value for program logic.

Retrieve Generated Reports

An asynchronous export is made available through report generation. Brand and restaurant users see only reports they created. Admin and brand-group users must provide brandId when they do not have a brand context, and can include impersonatedUserId to see reports created by that user.

GET/report_generationList Generated Reports

Lists generated report files in the caller scope. Customer-base export reports become expired after their retention window; use expired to avoid requesting an unavailable download.

Parameters

NameTypeRequiredDescription
brandIdintegerNoBrand context required for an admin or brand-group user who has no own brand.
impersonatedUserIdintegerNoOptional impersonated user whose reports are included for an authorized admin or brand-group caller.

Response

json
{
  "status": 200,
  "code": "report_generations_succeed",
  "message": "The list of report generations have been found.",
  "data": [
    {
      "reportGenerationId": 812,
      "name": "customer-base-export-3325-2026-07-11.xlsx",
      "createdAt": "Fri Jul 11 2026 09:15:00 GMT+0000 (Coordinated Universal Time)",
      "reportType": "customer_base_export",
      "status": "succeed",
      "expired": false
    }
  ]
}
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"report_generations_succeed"Machine-readable application code for the result.
messagestring"The list of report generations 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[].reportGenerationIdinteger812Identifier of the associated report generation.
data[].namestring"customer-base-export-3325-2026-07-11.xlsx"The name value.
data[].createdAtstring"Fri Jul 11 2026 09:15:00 GMT+0000 (Coordinated Universal Time)"Timestamp when this resource was created.
data[].reportTypestring"customer_base_export"The report type value.
data[].statusstring"succeed"HTTP status code returned by the API.
data[].expiredbooleanfalseThe expired value.

GET/report_generation/{reportGenerationId}/signed-urlGet Generated Report Download URL

Returns a time-limited signed URL for a generated report after verifying that the report belongs to the requested brand and to the caller (or authorized impersonated user). Expired or missing files cannot be downloaded.

Parameters

NameTypeRequiredDescription
reportGenerationIdintegerYesGenerated report identifier returned by the list endpoint.
brandIdintegerNoBrand context required for an admin or brand-group user who has no own brand.
impersonatedUserIdintegerNoOptional impersonated user whose report is being downloaded by an authorized caller.

Response

json
{
  "status": 200,
  "code": "report_generations_succeed",
  "message": "The list of report generations have been found.",
  "data": {
    "url": "https://storage.googleapis.com/<signed-report-url>"
  }
}
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"report_generations_succeed"Machine-readable application code for the result.
messagestring"The list of report generations have been found."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.urlstring"https://storage.googleapis.com/<signed-report-url>"The url value.

POST/customers/{customerId}/unarchiveUnarchive Customer

Restores an archived customer. Brand and brand-group users may only restore a customer in a brand they are authorized to manage.

Parameters

NameTypeRequiredDescription
customerIdintegerYesArchived customer to restore.

Response

json
{
  "status": 200,
  "code": "customer_unarchive_succeed",
  "message": "Customer has been successfully unarchived.",
  "data": {
    "success": 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"customer_unarchive_succeed"Machine-readable application code for the result.
messagestring"Customer has been successfully unarchived."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.successbooleantrueThe success value.

Customer Tickets

Generate PDF receipts for individual orders or export a customer's receipt history as a PDF. Bulk exports can be counted and paginated before downloading to keep large histories manageable.

Single Ticket PDF

GET/orders/tickets/{orderId}Get Ticket PDF

Generate and download a PDF receipt for a specific order. Returns the file directly as application/pdf.

Parameters

NameTypeRequiredDescription
orderIdstringYesThe unique identifier of the order.

Response

json
Binary PDF file (Content-Type: application/pdf). The response is an attachment; read the filename from the Content-Disposition response header.

Bulk PDF Export

First count the selected customer history, then request a PDF. For very large histories, uselimit and offset to retrieve bounded batches. A date range must include bothstartDate and endDate.

GET/orders/tickets/export/countCount Tickets Available for Export

Returns the number of customer tickets matching the optional inclusive ISO-date range.

Parameters

NameTypeRequiredDescription
customerIdintegerYesCustomer whose tickets are counted.
startDatestringNoISO 8601 start of the export range. Required together with endDate.
endDatestringNoISO 8601 end of the export range. Required together with startDate.

Response

json
{
  "count": 142
}
Response Properties

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

PropertyTypeExampleDescription
countinteger142Total number of matching records.

POST/orders/tickets/exportDownload Customer Ticket History PDF

Generates a PDF attachment for the selected customer history. The X-Total-Count response header contains the total matching records before pagination; Content-Disposition contains the filename.

Parameters

NameTypeRequiredDescription
customerIdintegerYesCustomer whose tickets are exported.
startDatestringNoISO 8601 start of the export range. Required together with endDate.
endDatestringNoISO 8601 end of the export range. Required together with startDate.
limitintegerNoPositive maximum number of tickets included in this PDF batch.
offsetintegerNoZero-based number of matching tickets to skip before this batch.

Response

json
Binary PDF file (Content-Type: application/pdf). Read the total matching ticket count from X-Total-Count and the filename from Content-Disposition.

Customer Metadata

Store and retrieve arbitrary metadata for a customer within a specific brand context. Metadata is stored as a free-form string and can be organized by namespace.

Namespaces

The optional namespace field allows you to organize metadata into logical groups (e.g., "preferences", "loyalty", "external_ids"). When deleting, you can target a specific namespace or remove all metadata at once.

POST/brands/{brandId}/customers/{customerId}/metadataSave Customer Metadata

Create or update metadata for a customer. If metadata with the same namespace already exists, it will be overwritten.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe brand ID.
customerIdintegerYesThe unique identifier of the customer.

Request Body

json
{
  "data": "{\"preferredLanguage\":\"fr\",\"dietaryRestrictions\":[\"vegetarian\"]}",
  "namespace": "preferences"
}
Request Body Properties

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

PropertyTypeExampleDescription
datastring"{\"preferredLanguage\":\"fr\",\"dietaryRestrictions\":[\"vegetarian\"]}"Endpoint-specific response payload.
namespacestring"preferences"The namespace value.

Response

json
{
  "status": 200,
  "code": "customer_metadata_saved",
  "message": "Metadata saved successfully.",
  "data": {
    "customerMetadataId": 1234,
    "customerId": 5337578,
    "brandId": 100,
    "data": "{\"preferredLanguage\":\"fr\",\"dietaryRestrictions\":[\"vegetarian\"]}",
    "namespace": "preferences"
  }
}
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_metadata_saved"Machine-readable application code for the result.
messagestring"Metadata saved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.customerMetadataIdinteger1234Identifier of the associated customer metadata.
data.customerIdinteger5337578Identifier of the customer.
data.brandIdinteger100Identifier of the brand.
data.datastring"{\"preferredLanguage\":\"fr\",\"dietaryRestrictions\":[\"vegetarian\"]}"Endpoint-specific response payload.
data.namespacestring"preferences"The namespace value.

GET/brands/{brandId}/customers/{customerId}/metadataGet Customer Metadata

Retrieve all metadata entries for a customer within a brand.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe brand ID.
customerIdintegerYesThe unique identifier of the customer.

Response

json
{
  "status": 200,
  "code": "customer_metadata_fetched",
  "message": "Metadata retrieved successfully.",
  "data": [
    {
      "customerMetadataId": 1234,
      "customerId": 5337578,
      "brandId": 100,
      "data": "{\"preferredLanguage\":\"fr\",\"dietaryRestrictions\":[\"vegetarian\"]}",
      "namespace": "preferences"
    },
    {
      "customerMetadataId": 1235,
      "customerId": 5337578,
      "brandId": 100,
      "data": "{\"externalId\":\"EXT-99887\"}",
      "namespace": "external_ids"
    }
  ]
}
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_metadata_fetched"Machine-readable application code for the result.
messagestring"Metadata retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].customerMetadataIdinteger1234Identifier of the associated customer metadata.
data[].customerIdinteger5337578Identifier of the customer.
data[].brandIdinteger100Identifier of the brand.
data[].datastring"{\"preferredLanguage\":\"fr\",\"dietaryRestrictions\":[\"vegetarian\"]}"Endpoint-specific response payload.
data[].namespacestring"preferences"The namespace value.

DELETE/brands/{brandId}/customers/{customerId}/metadataDelete Customer Metadata

Delete metadata for a customer. Optionally filter by namespace to only delete a specific set.

Parameters

NameTypeRequiredDescription
brandIdintegerYesThe brand ID.
customerIdintegerYesThe unique identifier of the customer.
namespacestringNoIf provided, only metadata with this namespace will be deleted. If omitted, all metadata for the customer is deleted.

Response

json
{
  "status": 200,
  "code": "customer_metadata_deleted",
  "message": "Metadata deleted successfully.",
  "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"customer_metadata_deleted"Machine-readable application code for the result.
messagestring"Metadata deleted successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.