# Brands

Once you have identified your `brandId` (via the login response or the `/oauth/me` endpoint), you can retrieve detailed configuration and status information for that brand.

### `GET /brands/{brandId}` - Get Brand Details

Retrieve detailed information for a specific brand, including locale, currency, and enabled features.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The unique identifier of the brand. |

#### Response

```json
{
  "status": 200,
  "code": "brand_succeed",
  "message": "Vous pouvez accéder à cette enseigne.",
  "data": {
    "brandId": 100,
    "brandHash": "bb10813b502b",
    "name": "Innovorder Burgers",
    "locale": "fr",
    "currency": "EUR",
    "contactPhone": "0102030405",
    "contactEmail": "contact@innovorder.com",
    "websiteUrl": null,
    "websiteCustomCssUrl": "https://static.innovorder.fr/webcss/brand-100-custom.css",
    "legalId": null,
    "moduleStripeId": null,
    "externalId": null,
    "created_at": "2025-09-08T07:43:27.000Z",
    "brandType": "COMMERCIAL_CATERING",
    "note": null,
    "status": null,
    "options": {
      "ENABLE_ORDER_DETAIL_V2": {
        "optionId": 11664,
        "nameValue": "ENABLE_ORDER_DETAIL_V2",
        "isActivated": true,
        "restaurantId": null,
        "brandId": 100,
        "created_at": "2025-09-08T07:43:27.000Z",
        "updated_at": "2025-09-08T07:43:27.000Z",
        "deleted_at": null
      }
    },
    "hasArchivedCustomers": true,
    "lowestPosVersion": "10.3.6"
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_succeed" | Machine-readable application code for the result. |
| message | string | "Vous pouvez accéder à cette enseigne." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.brandId | integer | 100 | Identifier of the brand. |
| data.brandHash | string | "bb10813b502b" | The brand hash value. |
| data.name | string | "Innovorder Burgers" | The name value. |
| data.locale | string | "fr" | The locale value. |
| data.currency | string | "EUR" | ISO 4217 currency code. |
| data.contactPhone | string | "0102030405" | The contact phone value. |
| data.contactEmail | string | "contact@innovorder.com" | The contact email value. |
| data.websiteUrl | null | null | The website url value. |
| data.websiteCustomCssUrl | string | "https://static.innovorder.fr/webcss/brand-100-custom.css" | The website custom css url value. |
| data.legalId | null | null | Identifier of the associated legal. |
| data.moduleStripeId | null | null | Identifier of the associated module stripe. |
| data.externalId | null | null | Identifier in the connected external system. |
| data.created\_at | string | "2025-09-08T07:43:27.000Z" | Timestamp when this resource was created. |
| data.brandType | string | "COMMERCIAL\_CATERING" | The brand type value. |
| data.note | null | null | The note value. |
| data.status | null | null | HTTP status code returned by the API. |
| data.options | object | {…} | Object containing options fields. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2 | object | {…} | Object containing enable order detail v2 fields. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.optionId | integer | 11664 | Identifier of the associated option. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.nameValue | string | "ENABLE\_ORDER\_DETAIL\_V2" | The name value value. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.isActivated | boolean | true | Whether activated is enabled or applies. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.restaurantId | null | null | Identifier of the restaurant. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.brandId | integer | 100 | Identifier of the brand. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.created\_at | string | "2025-09-08T07:43:27.000Z" | Timestamp when this resource was created. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.updated\_at | string | "2025-09-08T07:43:27.000Z" | Timestamp when this resource was last updated. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.deleted\_at | null | null | Timestamp when this resource was deleted, or null when it is active. |
| data.hasArchivedCustomers | boolean | true | Whether archived customers is enabled or applies. |
| data.lowestPosVersion | string | "10.3.6" | The lowest pos version value. |

#### Key Response Fields

brandHash

A public unique identifier for the brand. This is often used in public-facing APIs (like the Online Ordering API) to retrieve public configuration without authentication.

options

A dictionary of feature flags and configuration options enabled for this brand. Useful for frontend applications to toggle features (e.g., `ENABLE_ORDER_DETAIL_V2`).

websiteCustomCssUrl

URL to a custom CSS file for branding web interfaces.

### Public Loyalty Bootstrap

Loyalty registration pages can load the safe subset of brand configuration they need without a bearer token. Missing brands and brands without an enabled loyalty module both return the same not-found response.

### `GET /brands/{brandId}/loyalty` - Get Public Loyalty Configuration

Returns only the public brand fields and the two allow-listed signup options consumed by the loyalty registration experience.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | Brand identifier used by the loyalty registration page. |

#### Response

```json
{
  "status": 200,
  "code": "brand_succeed",
  "message": "You can access to this brand.",
  "data": {
    "brandId": 42,
    "brandHash": "HASH42",
    "name": "Innovorder Burgers",
    "currency": "EUR",
    "options": {
      "BIRTHDATE": {
        "nameValue": "BIRTHDATE",
        "value": "true"
      },
      "ADVANCED_SECURITY_RULES": {
        "nameValue": "ADVANCED_SECURITY_RULES",
        "value": "true"
      }
    }
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_succeed" | Machine-readable application code for the result. |
| message | string | "You can access to this brand." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.brandId | integer | 42 | Identifier of the brand. |
| data.brandHash | string | "HASH42" | The brand hash value. |
| data.name | string | "Innovorder Burgers" | The name value. |
| data.currency | string | "EUR" | ISO 4217 currency code. |
| data.options | object | {…} | Object containing options fields. |
| data.options.BIRTHDATE | object | {…} | Object containing birthdate fields. |
| data.options.BIRTHDATE.nameValue | string | "BIRTHDATE" | The name value value. |
| data.options.BIRTHDATE.value | string | "true" | The value value. |
| data.options.ADVANCED\_SECURITY\_RULES | object | {…} | Object containing advanced security rules fields. |
| data.options.ADVANCED\_SECURITY\_RULES.nameValue | string | "ADVANCED\_SECURITY\_RULES" | The name value value. |
| data.options.ADVANCED\_SECURITY\_RULES.value | string | "true" | The value value. |

### Operation-Zone Status

Check whether the brand operates at least one operation-zone restaurant and retrieve the currency configured for the brand. This is useful before enabling operation-zone-specific configuration in an integration.

### `GET /brands/{brandId}/operation-zone-status` - Get Brand Operation-Zone Status

Returns a status object even when the brand has no operation-zone restaurants. brandCurrency is null when the brand cannot be resolved or has no configured currency.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The brand to inspect. |

#### Response

```json
{
  "status": 200,
  "code": "brand_operation_zone_status_found",
  "message": "Brand operation zone status found",
  "data": {
    "hasOpZoneRestaurant": true,
    "brandCurrency": "EUR"
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_operation\_zone\_status\_found" | Machine-readable application code for the result. |
| message | string | "Brand operation zone status found" | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.hasOpZoneRestaurant | boolean | true | Whether op zone restaurant is enabled or applies. |
| data.brandCurrency | string | "EUR" | The brand currency value. |

### Update Brand

Update the general information of a brand. Only the following fields are persisted: `name` (required), `contactPhone`, `contactEmail`, `websiteUrl`, `locale`, `currency`, `moduleStripeId`, `externalId`, `externalSecondId`, `brandType`, `note`, `status` and `shouldBlockTRDPaymentMethods`. Any other field in the request body is silently ignored.

### `PUT /brands/{brandId}` - Update Brand

Update the general information of a brand. The name field is required (a 400 missing\_parameters error is returned otherwise). Sending an empty string for externalSecondId clears the stored value, while omitting the field preserves it. Updating a brand invalidates its web ordering configuration cache.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The unique identifier of the brand. |

#### Request Body

```json
{
  "name": "Innovorder Burgers",
  "contactPhone": "0102030405",
  "contactEmail": "contact@innovorder.com",
  "websiteUrl": "https://www.innovorder-burgers.com",
  "locale": "fr",
  "currency": "EUR",
  "externalId": "EXT-BRAND-001",
  "externalSecondId": "SECOND-001",
  "brandType": "COMMERCIAL_CATERING",
  "note": "Flagship brand",
  "shouldBlockTRDPaymentMethods": false
}
```

##### Request Body Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| name | string | "Innovorder Burgers" | The name value. |
| contactPhone | string | "0102030405" | The contact phone value. |
| contactEmail | string | "contact@innovorder.com" | The contact email value. |
| websiteUrl | string | "https://www.innovorder-burgers.com" | The website url value. |
| locale | string | "fr" | The locale value. |
| currency | string | "EUR" | ISO 4217 currency code. |
| externalId | string | "EXT-BRAND-001" | Identifier in the connected external system. |
| externalSecondId | string | "SECOND-001" | Identifier of the associated external second. |
| brandType | string | "COMMERCIAL\_CATERING" | The brand type value. |
| note | string | "Flagship brand" | The note value. |
| shouldBlockTRDPaymentMethods | boolean | false | The should block trdpayment methods value. |

#### Response

```json
{
  "status": 200,
  "code": "brand_update_succeed",
  "data": {
    "brandId": 100,
    "brandHash": "bb10813b502b",
    "name": "Innovorder Burgers",
    "locale": "fr",
    "currency": "EUR",
    "contactPhone": "0102030405",
    "contactEmail": "contact@innovorder.com",
    "websiteUrl": "https://www.innovorder-burgers.com",
    "externalId": "EXT-BRAND-001",
    "brandType": "COMMERCIAL_CATERING",
    "options": {
      "ENABLE_ORDER_DETAIL_V2": {
        "optionId": 11664,
        "nameValue": "ENABLE_ORDER_DETAIL_V2",
        "isActivated": true
      }
    },
    "hasArchivedCustomers": true
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_update\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.brandId | integer | 100 | Identifier of the brand. |
| data.brandHash | string | "bb10813b502b" | The brand hash value. |
| data.name | string | "Innovorder Burgers" | The name value. |
| data.locale | string | "fr" | The locale value. |
| data.currency | string | "EUR" | ISO 4217 currency code. |
| data.contactPhone | string | "0102030405" | The contact phone value. |
| data.contactEmail | string | "contact@innovorder.com" | The contact email value. |
| data.websiteUrl | string | "https://www.innovorder-burgers.com" | The website url value. |
| data.externalId | string | "EXT-BRAND-001" | Identifier in the connected external system. |
| data.brandType | string | "COMMERCIAL\_CATERING" | The brand type value. |
| data.options | object | {…} | Object containing options fields. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2 | object | {…} | Object containing enable order detail v2 fields. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.optionId | integer | 11664 | Identifier of the associated option. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.nameValue | string | "ENABLE\_ORDER\_DETAIL\_V2" | The name value value. |
| data.options.ENABLE\_ORDER\_DETAIL\_V2.isActivated | boolean | true | Whether activated is enabled or applies. |
| data.hasArchivedCustomers | boolean | true | Whether archived customers is enabled or applies. |

### Retrieve Brand Channels

Get the list of sales channels configured for the brand (e.g., Web, Kiosk, POS). This information is useful for filtering menus or consumption modes specific to a channel.

### `GET /brands/{brandId}/channels` - List Channels

Retrieve all sales channels available for the brand.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The unique identifier of the brand. |

#### Response

```json
{
  "status": 200,
  "code": "channel_succeed",
  "message": "Vous avez accès à ces canaux.",
  "data": {
    "1": {
      "channelId": 1,
      "name": "kiosk",
      "is_enabled": true
    },
    "2": {
      "channelId": 2,
      "name": "web",
      "is_enabled": true
    },
    "5": {
      "channelId": 5,
      "name": "pos",
      "is_enabled": true
    }
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "channel\_succeed" | Machine-readable application code for the result. |
| message | string | "Vous avez accès à ces canaux." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.1 | object | {…} | Object containing 1 fields. |
| data.1.channelId | integer | 1 | Identifier of the associated channel. |
| data.1.name | string | "kiosk" | The name value. |
| data.1.is\_enabled | boolean | true | Whether enabled is enabled or applies. |
| data.2 | object | {…} | Object containing 2 fields. |
| data.2.channelId | integer | 2 | Identifier of the associated channel. |
| data.2.name | string | "web" | The name value. |
| data.2.is\_enabled | boolean | true | Whether enabled is enabled or applies. |
| data.5 | object | {…} | Object containing 5 fields. |
| data.5.channelId | integer | 5 | Identifier of the associated channel. |
| data.5.name | string | "pos" | The name value. |
| data.5.is\_enabled | boolean | true | Whether enabled is enabled or applies. |

### Brand Options

Manage feature flags and configuration options for a brand. Options control which features are enabled or disabled across the brand (e.g., `ENABLE_ORDER_DETAIL_V2`, `ENABLE_LOYALTY`).

### `PUT /brands/{brandId}/options` - Update Brand Options

Update one or more feature flag options for a brand. Only the options provided in the request body are modified; others remain unchanged.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The unique identifier of the brand. |

#### Request Body

```json
{
  "options": {
    "ENABLE_ORDER_DETAIL_V2": {
      "isActivated": true
    },
    "ENABLE_LOYALTY": {
      "isActivated": false
    }
  }
}
```

##### Request Body Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| options | object | {…} | Object containing options fields. |
| options.ENABLE\_ORDER\_DETAIL\_V2 | object | {…} | Object containing enable order detail v2 fields. |
| options.ENABLE\_ORDER\_DETAIL\_V2.isActivated | boolean | true | Whether activated is enabled or applies. |
| options.ENABLE\_LOYALTY | object | {…} | Object containing enable loyalty fields. |
| options.ENABLE\_LOYALTY.isActivated | boolean | false | Whether activated is enabled or applies. |

#### Response

```json
{
  "status": 200,
  "code": "brand_options_updated",
  "message": "Options have been updated.",
  "data": {
    "ENABLE_ORDER_DETAIL_V2": {
      "optionId": 11664,
      "nameValue": "ENABLE_ORDER_DETAIL_V2",
      "isActivated": true,
      "brandId": 100
    },
    "ENABLE_LOYALTY": {
      "optionId": 11665,
      "nameValue": "ENABLE_LOYALTY",
      "isActivated": false,
      "brandId": 100
    }
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_options\_updated" | Machine-readable application code for the result. |
| message | string | "Options have been updated." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.ENABLE\_ORDER\_DETAIL\_V2 | object | {…} | Object containing enable order detail v2 fields. |
| data.ENABLE\_ORDER\_DETAIL\_V2.optionId | integer | 11664 | Identifier of the associated option. |
| data.ENABLE\_ORDER\_DETAIL\_V2.nameValue | string | "ENABLE\_ORDER\_DETAIL\_V2" | The name value value. |
| data.ENABLE\_ORDER\_DETAIL\_V2.isActivated | boolean | true | Whether activated is enabled or applies. |
| data.ENABLE\_ORDER\_DETAIL\_V2.brandId | integer | 100 | Identifier of the brand. |
| data.ENABLE\_LOYALTY | object | {…} | Object containing enable loyalty fields. |
| data.ENABLE\_LOYALTY.optionId | integer | 11665 | Identifier of the associated option. |
| data.ENABLE\_LOYALTY.nameValue | string | "ENABLE\_LOYALTY" | The name value value. |
| data.ENABLE\_LOYALTY.isActivated | boolean | false | Whether activated is enabled or applies. |
| data.ENABLE\_LOYALTY.brandId | integer | 100 | Identifier of the brand. |

### External ID Mappings

Store partner-system identifiers against Innovorder IDs, then resolve many identifiers in one request. A mapping is keyed by `mappingKey` and its internal numeric value; scope fields default to`0` when omitted.

### `PUT /external_ids_mappings` - Bulk Upsert External ID Mappings

Creates or updates every mapping supplied in the request array. mappingKey, internalValue, and externalValue are required for every element. provider may be null or an empty string.

#### Request Body

```json
[
  {
    "provider": "acme-pos",
    "mappingKey": "product",
    "internalValue": 464462,
    "externalValue": "ACME-PRODUCT-42",
    "restaurantId": 6801,
    "channelId": 5,
    "brandId": 3325
  }
]
```

##### Request Body Properties

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

| Property | Type | Required | Example | Description |
| --- | --- | --- | --- | --- |
| \[\] | object | Not specified | {…} | Object containing fields. |
| \[\].provider | string \| null | No | "acme-pos" | Optional source-system provider name; an empty string is also accepted. |
| \[\].mappingKey | string | Yes | "product" | Partner-defined mapping category, such as product or customer. |
| \[\].internalValue | integer | Yes | 464462 | Innovorder numeric identifier to map. |
| \[\].externalValue | string | Yes | "ACME-PRODUCT-42" | Identifier used by the partner system. |
| \[\].restaurantId | integer | No | 6801 | Optional restaurant scope. The stored default is 0 when omitted. |
| \[\].channelId | integer | No | 5 | Optional sales-channel scope. The stored default is 0 when omitted. |
| \[\].brandId | integer | No | 3325 | Optional brand scope. The stored default is 0 when omitted. |

#### Response

```json
{
  "status": 201,
  "code": "external_ids_mappings_upsert_succeeded",
  "message": "The external ids mappings has been created.",
  "data": [
    {
      "externalIdsMappingId": 91,
      "provider": "acme-pos",
      "mappingKey": "product",
      "internalValue": 464462,
      "externalValue": "ACME-PRODUCT-42",
      "restaurantId": 6801,
      "channelId": 5,
      "brandId": 3325,
      "createdAt": "2026-07-11T09:15:00.000Z",
      "updatedAt": "2026-07-11T09:15:00.000Z"
    }
  ]
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 201 | HTTP status code returned by the API. |
| code | string | "external\_ids\_mappings\_upsert\_succeeded" | Machine-readable application code for the result. |
| message | string | "The external ids mappings has been created." | Human-readable result message. Do not use this value for program logic. |
| data | array | \[…\] | Endpoint-specific response payload. |
| data\[\] | object | {…} | Endpoint-specific response payload. |
| data\[\].externalIdsMappingId | integer | 91 | Identifier of the associated external ids mapping. |
| data\[\].provider | string | "acme-pos" | The provider value. |
| data\[\].mappingKey | string | "product" | The mapping key value. |
| data\[\].internalValue | integer | 464462 | The internal value value. |
| data\[\].externalValue | string | "ACME-PRODUCT-42" | The external value value. |
| data\[\].restaurantId | integer | 6801 | Identifier of the restaurant. |
| data\[\].channelId | integer | 5 | Identifier of the associated channel. |
| data\[\].brandId | integer | 3325 | Identifier of the brand. |
| data\[\].createdAt | string | "2026-07-11T09:15:00.000Z" | Timestamp when this resource was created. |
| data\[\].updatedAt | string | "2026-07-11T09:15:00.000Z" | Timestamp when this resource was last updated. |

### `GET /external_ids_mappings` - Resolve External IDs

Resolves comma-separated Innovorder numeric IDs to external identifiers for one mapping key. The current implementation accepts provider but does not use it to filter the lookup.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| mappingKey | string | Yes | Mapping category to resolve. |
| internalValues | string | Yes | Comma-separated Innovorder numeric IDs, for example 464462,464463. |
| provider | string | No | Accepted optional provider value; it is not currently applied as a lookup filter. |

#### Response

```json
{
  "status": 200,
  "code": "external_ids_mappings_search_succeeded",
  "message": "The external ids mappings have been found.",
  "data": {
    "464462": "ACME-PRODUCT-42",
    "464463": "ACME-PRODUCT-43"
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "external\_ids\_mappings\_search\_succeeded" | Machine-readable application code for the result. |
| message | string | "The external ids mappings have been found." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.464462 | string | "ACME-PRODUCT-42" | The 464462 value. |
| data.464463 | string | "ACME-PRODUCT-43" | The 464463 value. |

### Brand Legal Information

Manage the legal information registered for the brand (company registration, tax details, publication director and webmaster contacts). The read endpoint is publicly readable, but we recommend always calling it with an authenticated token. Note the singular `/brand/` prefix on the update endpoint.

### `GET /brands/{brandId}/legal` - Get Brand Legal Information

Retrieve the legal information of the brand. The data field is null if no legal information has ever been registered for this brand. The nested address object is nullable.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The unique identifier of the brand. |

#### Response

```json
{
  "status": 200,
  "code": "brand_legal_succeed",
  "data": {
    "legalId": 42,
    "socialReason": "Innovorder Burgers SAS",
    "organizationType": "SAS",
    "capital": "50000",
    "commerceRegistryCity": "Paris",
    "siren": "123456789",
    "taxNumber": "FR12345678901",
    "industryClassificationCode": "5610A",
    "publicationDirectorName": "Jean Dupont",
    "publicationDirectorFunction": "CEO",
    "webmasterName": "Tech Team",
    "webmasterEmail": "tech@innovorder.com",
    "address": {
      "addressId": 731240,
      "locality": "Paris",
      "postalCode": "75001",
      "lat": 48.868,
      "lng": 2.329
    }
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_legal\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.legalId | integer | 42 | Identifier of the associated legal. |
| data.socialReason | string | "Innovorder Burgers SAS" | The social reason value. |
| data.organizationType | string | "SAS" | The organization type value. |
| data.capital | string | "50000" | The capital value. |
| data.commerceRegistryCity | string | "Paris" | The commerce registry city value. |
| data.siren | string | "123456789" | The siren value. |
| data.taxNumber | string | "FR12345678901" | The tax number value. |
| data.industryClassificationCode | string | "5610A" | The industry classification code value. |
| data.publicationDirectorName | string | "Jean Dupont" | The publication director name value. |
| data.publicationDirectorFunction | string | "CEO" | The publication director function value. |
| data.webmasterName | string | "Tech Team" | The webmaster name value. |
| data.webmasterEmail | string | "tech@innovorder.com" | The webmaster email value. |
| data.address | object | {…} | Object containing address fields. |
| data.address.addressId | integer | 731240 | Identifier of the associated address. |
| data.address.locality | string | "Paris" | The locality value. |
| data.address.postalCode | string | "75001" | The postal code value. |
| data.address.lat | number | 48.868 | The lat value. |
| data.address.lng | number | 2.329 | The lng value. |

### `PUT /brand/{brandId}/legal` - Update Legal Information

Create or update the legal information for a brand. Includes company details, tax info, and webmaster contact.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The unique identifier of the brand. |

#### Request Body

```json
{
  "socialReason": "Innovorder SAS",
  "organizationType": "SAS",
  "capital": 50000,
  "commerceRegistryCity": "Paris",
  "siren": "123456789",
  "taxNumber": "FR12345678901",
  "industryClassificationCode": "5610A",
  "publicationDirectorName": "Jean Dupont",
  "publicationDirectorFunction": "CEO",
  "webmasterName": "Tech Team",
  "webmasterEmail": "tech@innovorder.com",
  "address": {
    "lat": 48.8566,
    "lng": 2.3522
  }
}
```

##### Request Body Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| socialReason | string | "Innovorder SAS" | The social reason value. |
| organizationType | string | "SAS" | The organization type value. |
| capital | integer | 50000 | The capital value. |
| commerceRegistryCity | string | "Paris" | The commerce registry city value. |
| siren | string | "123456789" | The siren value. |
| taxNumber | string | "FR12345678901" | The tax number value. |
| industryClassificationCode | string | "5610A" | The industry classification code value. |
| publicationDirectorName | string | "Jean Dupont" | The publication director name value. |
| publicationDirectorFunction | string | "CEO" | The publication director function value. |
| webmasterName | string | "Tech Team" | The webmaster name value. |
| webmasterEmail | string | "tech@innovorder.com" | The webmaster email value. |
| address | object | {…} | Object containing address fields. |
| address.lat | number | 48.8566 | The lat value. |
| address.lng | number | 2.3522 | The lng value. |

#### Response

```json
{
  "status": 200,
  "code": "brand_legal_update_succeed",
  "message": "Brand's legal has been successfully updated.",
  "data": {
    "legalId": 42,
    "socialReason": "Innovorder SAS",
    "organizationType": "SAS",
    "capital": 50000,
    "siren": "123456789",
    "taxNumber": "FR12345678901"
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_legal\_update\_succeed" | Machine-readable application code for the result. |
| message | string | "Brand's legal has been successfully updated." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.legalId | integer | 42 | Identifier of the associated legal. |
| data.socialReason | string | "Innovorder SAS" | The social reason value. |
| data.organizationType | string | "SAS" | The organization type value. |
| data.capital | integer | 50000 | The capital value. |
| data.siren | string | "123456789" | The siren value. |
| data.taxNumber | string | "FR12345678901" | The tax number value. |

### Payment, Modules & Social Networks

The payment configuration, module configuration and social network links of a brand are documented on the [Brand Configuration](https://developers.innovorder.io/docs/brands/brand-config.md) page.

### Brand Groups

Role Requirement

This section applies only to users with the `brandGroup` role.

Brand Groups allow for the organization of multiple brands under a single entity (e.g., a holding company). The workflow for a Brand Group user is:

1.  Retrieve the list of brands in the group.
2.  Select a brand to manage.
3.  Generate a brand-specific access token ("Switch Context").
4.  Use the new token for all subsequent Brand/Menu/Order operations.

#### 1\. List Brands

### `GET /brand_groups/{brandGroupId}/brands` - Get Brands in Group

Retrieve all brands associated with the specified brand group. Each entry is a full brand record; only a subset of fields is shown below.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandGroupId | integer | Yes | The unique identifier of the brand group (from /oauth/me). |

#### Response

```json
{
  "status": 200,
  "code": "brand_group_brand_listed",
  "message": "Brand group brands have been found.",
  "data": {
    "brands": [
      {
        "brandId": 100,
        "name": "Innovorder Burgers",
        "currency": "EUR"
      },
      {
        "brandId": 101,
        "name": "Innovorder Sushi",
        "currency": "EUR"
      }
    ]
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "brand\_group\_brand\_listed" | Machine-readable application code for the result. |
| message | string | "Brand group brands have been found." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.brands | array | \[…\] | List of brands entries. |
| data.brands\[\] | object | {…} | Object containing brands fields. |
| data.brands\[\].brandId | integer | 100 | Identifier of the brand. |
| data.brands\[\].name | string | "Innovorder Burgers" | The name value. |
| data.brands\[\].currency | string | "EUR" | ISO 4217 currency code. |

#### 2\. Switch Context (Generate Token)

### `GET /brand_groups/{brandId}/user` - Get Brand Token

Generate a new accessToken scoped to the specific brand. The token authenticates a dedicated brand-role user (internally called the "guest brand" user) that is automatically provisioned on first call, allowing the Brand Group user to operate on that specific brand. The target brand must belong to the brand group of the caller (403 otherwise).

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandId | integer | Yes | The target brand ID. |

#### Response

```json
{
  "status": 200,
  "code": "guest_brand_token_generated_successfully",
  "message": "Guest brand login token generated successfully.",
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1..."
  }
}
```

##### Response Properties

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

| Property | Type | Example | Description |
| --- | --- | --- | --- |
| status | integer | 200 | HTTP status code returned by the API. |
| code | string | "guest\_brand\_token\_generated\_successfully" | Machine-readable application code for the result. |
| message | string | "Guest brand login token generated successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.accessToken | string | "eyJhbGciOiJIUzI1..." | The access token value. |
