# Brand Configuration

### Payment Configuration

Manage the brand-level payment configuration: e-wallet overdraft settings and, for brands running in education mode, the daily payment limit. Amounts are expressed in cents. See the [E-Wallet](https://developers.innovorder.io/docs/e-wallet/ewallet-overview.md) section for how e-wallet balances work - the overdraft configured here is what allows customer balances to go negative.

### `GET /brands/{brandId}/payment_configuration` - Get Payment Configuration

Retrieve the payment configuration of the brand. The paymentDailyLimit field is only included in the response when the education mode option is active on the brand - its absence does not mean the value is null.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "brand_payment_configuration_succeed",
  "data": {
    "paymentConfigurationId": 77,
    "ewalletOverdraftAmount": 2000,
    "useEwalletOverdraft": true,
    "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\_payment\_configuration\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.paymentConfigurationId | integer | 77 | Identifier of the associated payment configuration. |
| data.ewalletOverdraftAmount | integer | 2000 | The ewallet overdraft amount value. |
| data.useEwalletOverdraft | boolean | true | The use ewallet overdraft value. |
| data.brandId | integer | 100 | Identifier of the brand. |

Full Replacement Update

The update below behaves as a full replacement, not a partial update. Omitted fields are reset, not preserved: `useEwalletOverdraft` defaults to `false` when omitted, `ewalletOverdraftAmount` is forced to `null` unless `useEwalletOverdraft` is `true`, and `paymentDailyLimit` is reset to `null` when omitted. Always send the complete configuration.

### `PUT /brands/{brandId}/payment_configuration` - Update Payment Configuration

Update the payment configuration of the brand. Modifying useEwalletOverdraft or ewalletOverdraftAmount requires the CAN\_MANAGE\_BRAND\_EWALLET\_OVERDRAFT access flag on the calling user (an ACTION\_NOT\_ALLOWED error is returned otherwise). ewalletOverdraftAmount (cents, &gt;= 0) is only taken into account when useEwalletOverdraft is true. If usePaymentDailyLimit is present and false, paymentDailyLimit is forced to null.

#### Parameters

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

#### Request Body

```json
{
  "useEwalletOverdraft": true,
  "ewalletOverdraftAmount": 2000,
  "usePaymentDailyLimit": true,
  "paymentDailyLimit": 5000
}
```

##### 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 |
| --- | --- | --- | --- |
| useEwalletOverdraft | boolean | true | The use ewallet overdraft value. |
| ewalletOverdraftAmount | integer | 2000 | The ewallet overdraft amount value. |
| usePaymentDailyLimit | boolean | true | The use payment daily limit value. |
| paymentDailyLimit | integer | 5000 | The payment daily limit value. |

#### Response

```json
{
  "status": 200,
  "code": "brand_payment_configuration_update_succeed",
  "data": {
    "paymentConfigurationId": 77,
    "ewalletOverdraftAmount": 2000,
    "useEwalletOverdraft": true,
    "paymentDailyLimit": 5000,
    "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\_payment\_configuration\_update\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.paymentConfigurationId | integer | 77 | Identifier of the associated payment configuration. |
| data.ewalletOverdraftAmount | integer | 2000 | The ewallet overdraft amount value. |
| data.useEwalletOverdraft | boolean | true | The use ewallet overdraft value. |
| data.paymentDailyLimit | integer | 5000 | The payment daily limit value. |
| data.brandId | integer | 100 | Identifier of the brand. |

### Brand Modules

Modules hold the feature configuration of a brand for each sales channel (ordering flow, payment, style...). The brand-level configuration serves as the inherited base for all restaurants of the brand: restaurant-level module updates are merged on top of it. Use `GET /brands/{brandId}/modules` to discover the (`moduleId`, `channelId`) pairs configured for your brand - the `moduleId` 12 used in the examples below is the ordering flow module. See the [Restaurant Modules](https://developers.innovorder.io/docs/restaurants/restaurant-modules.md) page for the channel ID reference values and the restaurant-level counterpart of these endpoints.

### `GET /brands/{brandId}/modules` - List Brand Modules

Retrieve all modules configured at brand level, grouped by channel, then category, then module name. Note that the first-level keys of the data object are channel IDs as numeric strings, not an array.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "module_succeed",
  "data": {
    "2": {
      "ordering": {
        "flow": {
          "moduleId": 12,
          "channelId": 2,
          "brandId": 100,
          "is_enabled": true,
          "isOrderFollowUpEnabled": false,
          "isProductFollowUpEnabled": false
        }
      }
    },
    "5": {
      "ordering": {
        "flow": {
          "moduleId": 12,
          "channelId": 5,
          "brandId": 100,
          "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 | "module\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.2 | object | {…} | Object containing 2 fields. |
| data.2.ordering | object | {…} | Object containing ordering fields. |
| data.2.ordering.flow | object | {…} | Object containing flow fields. |
| data.2.ordering.flow.moduleId | integer | 12 | Identifier of the associated module. |
| data.2.ordering.flow.channelId | integer | 2 | Identifier of the associated channel. |
| data.2.ordering.flow.brandId | integer | 100 | Identifier of the brand. |
| data.2.ordering.flow.is\_enabled | boolean | true | Whether enabled is enabled or applies. |
| data.2.ordering.flow.isOrderFollowUpEnabled | boolean | false | Whether order follow up enabled is enabled or applies. |
| data.2.ordering.flow.isProductFollowUpEnabled | boolean | false | Whether product follow up enabled is enabled or applies. |
| data.5 | object | {…} | Object containing 5 fields. |
| data.5.ordering | object | {…} | Object containing ordering fields. |
| data.5.ordering.flow | object | {…} | Object containing flow fields. |
| data.5.ordering.flow.moduleId | integer | 12 | Identifier of the associated module. |
| data.5.ordering.flow.channelId | integer | 5 | Identifier of the associated channel. |
| data.5.ordering.flow.brandId | integer | 100 | Identifier of the brand. |
| data.5.ordering.flow.is\_enabled | boolean | true | Whether enabled is enabled or applies. |

Configuration Overwrite

The endpoint below is an upsert that overwrites the existing configuration for the given (`moduleId`, `channelId`) pair at brand level - the values you send always take precedence over the current ones. Since restaurants inherit their module configuration from the brand, this change impacts every restaurant of the brand. The web ordering configuration cache of the brand is invalidated.

### `POST /brands/{brandId}/modules` - Create or Update Brand Module

Create or update the configuration of a module for a channel at brand level. moduleId, channelId and module are all required (a 400 missing\_parameters error is returned otherwise). The content of the module object depends on the module type.

#### Parameters

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

#### Request Body

```json
{
  "moduleId": 12,
  "channelId": 2,
  "module": {
    "is_enabled": true,
    "isOrderFollowUpEnabled": true
  }
}
```

##### 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 |
| --- | --- | --- | --- |
| moduleId | integer | 12 | Identifier of the associated module. |
| channelId | integer | 2 | Identifier of the associated channel. |
| module | object | {…} | Object containing module fields. |
| module.is\_enabled | boolean | true | Whether enabled is enabled or applies. |
| module.isOrderFollowUpEnabled | boolean | true | Whether order follow up enabled is enabled or applies. |

#### Response

```json
{
  "status": 200,
  "code": "module_create_succeed",
  "message": "Module has been successfully created.",
  "data": {
    "moduleId": 12,
    "channelId": 2,
    "brandId": 100,
    "is_enabled": true,
    "isOrderFollowUpEnabled": 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 | "module\_create\_succeed" | Machine-readable application code for the result. |
| message | string | "Module has been successfully created." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.moduleId | integer | 12 | Identifier of the associated module. |
| data.channelId | integer | 2 | Identifier of the associated channel. |
| data.brandId | integer | 100 | Identifier of the brand. |
| data.is\_enabled | boolean | true | Whether enabled is enabled or applies. |
| data.isOrderFollowUpEnabled | boolean | true | Whether order follow up enabled is enabled or applies. |

### Social Networks

Manage the social network links of a brand (Facebook, Instagram, Twitter, TripAdvisor...). These links are typically displayed on web ordering pages.

Role Requirement

The social network endpoints require a `restaurant` user account. Tokens with the `brand` role are not accepted on these routes.

### `GET /brands/{brandId}/social_network` - Get Social Networks

Retrieve the social network links of the brand. All fields are nullable strings. The data field is null if the social network record has never been created.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "social_network_succeed",
  "data": {
    "facebook": "https://facebook.com/innovorderburgers",
    "googleplus": null,
    "instagram": "https://instagram.com/innovorderburgers",
    "twitter": null,
    "pinterest": null,
    "linkedin": null,
    "yelp": null,
    "tracktl": null,
    "tripAdvisor": "https://tripadvisor.com/innovorder-burgers"
  }
}
```

##### 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 | "social\_network\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.facebook | string | "https://facebook.com/innovorderburgers" | The facebook value. |
| data.googleplus | null | null | The googleplus value. |
| data.instagram | string | "https://instagram.com/innovorderburgers" | The instagram value. |
| data.twitter | null | null | The twitter value. |
| data.pinterest | null | null | The pinterest value. |
| data.linkedin | null | null | The linkedin value. |
| data.yelp | null | null | The yelp value. |
| data.tracktl | null | null | The tracktl value. |
| data.tripAdvisor | string | "https://tripadvisor.com/innovorder-burgers" | The trip advisor value. |

### `POST /brands/{brandId}/social_network` - Create Social Networks

Create the social network record of the brand. All fields are optional strings (URLs). Use this endpoint only once to create the record, then use PUT for subsequent updates. Invalidates the web ordering configuration cache of the brand.

#### Parameters

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

#### Request Body

```json
{
  "facebook": "https://facebook.com/innovorderburgers",
  "instagram": "https://instagram.com/innovorderburgers",
  "tripAdvisor": "https://tripadvisor.com/innovorder-burgers"
}
```

##### 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 |
| --- | --- | --- | --- |
| facebook | string | "https://facebook.com/innovorderburgers" | The facebook value. |
| instagram | string | "https://instagram.com/innovorderburgers" | The instagram value. |
| tripAdvisor | string | "https://tripadvisor.com/innovorder-burgers" | The trip advisor value. |

#### Response

```json
{
  "status": 200,
  "code": "social_network_succeed",
  "data": {
    "facebook": "https://facebook.com/innovorderburgers",
    "googleplus": null,
    "instagram": "https://instagram.com/innovorderburgers",
    "twitter": null,
    "pinterest": null,
    "linkedin": null,
    "yelp": null,
    "tracktl": null,
    "tripAdvisor": "https://tripadvisor.com/innovorder-burgers"
  }
}
```

##### 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 | "social\_network\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.facebook | string | "https://facebook.com/innovorderburgers" | The facebook value. |
| data.googleplus | null | null | The googleplus value. |
| data.instagram | string | "https://instagram.com/innovorderburgers" | The instagram value. |
| data.twitter | null | null | The twitter value. |
| data.pinterest | null | null | The pinterest value. |
| data.linkedin | null | null | The linkedin value. |
| data.yelp | null | null | The yelp value. |
| data.tracktl | null | null | The tracktl value. |
| data.tripAdvisor | string | "https://tripadvisor.com/innovorder-burgers" | The trip advisor value. |

### `PUT /brands/{brandId}/social_network` - Update Social Networks

Update the existing social network record of the brand. Same nine optional fields as the creation endpoint: facebook, googleplus, instagram, twitter, pinterest, linkedin, yelp, tracktl, tripAdvisor. Omitted fields are preserved. This endpoint fails if no social network record exists yet - create it first with POST. Invalidates the web ordering configuration cache of the brand.

#### Parameters

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

#### Request Body

```json
{
  "twitter": "https://twitter.com/innovorderburgers",
  "linkedin": "https://linkedin.com/company/innovorder-burgers"
}
```

##### 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 |
| --- | --- | --- | --- |
| twitter | string | "https://twitter.com/innovorderburgers" | The twitter value. |
| linkedin | string | "https://linkedin.com/company/innovorder-burgers" | The linkedin value. |

#### Response

```json
{
  "status": 200,
  "code": "social_network_update_succeed",
  "data": {
    "facebook": "https://facebook.com/innovorderburgers",
    "googleplus": null,
    "instagram": "https://instagram.com/innovorderburgers",
    "twitter": "https://twitter.com/innovorderburgers",
    "pinterest": null,
    "linkedin": "https://linkedin.com/company/innovorder-burgers",
    "yelp": null,
    "tracktl": null,
    "tripAdvisor": "https://tripadvisor.com/innovorder-burgers"
  }
}
```

##### 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 | "social\_network\_update\_succeed" | Machine-readable application code for the result. |
| data | object | {…} | Endpoint-specific response payload. |
| data.facebook | string | "https://facebook.com/innovorderburgers" | The facebook value. |
| data.googleplus | null | null | The googleplus value. |
| data.instagram | string | "https://instagram.com/innovorderburgers" | The instagram value. |
| data.twitter | string | "https://twitter.com/innovorderburgers" | The twitter value. |
| data.pinterest | null | null | The pinterest value. |
| data.linkedin | string | "https://linkedin.com/company/innovorder-burgers" | The linkedin value. |
| data.yelp | null | null | The yelp value. |
| data.tracktl | null | null | The tracktl value. |
| data.tripAdvisor | string | "https://tripadvisor.com/innovorder-burgers" | The trip advisor value. |

### Customer Groups

Retrieve the customer groups configured for a brand. For multi-brand (brand group) endpoints - listing the brands of a group and switching context to a brand - see the [Brands](https://developers.innovorder.io/docs/brands/brands.md) page.

### `GET /brands/{brandId}/groups` - Get Groups for Brand

Retrieve the customer groups configured for a specific brand.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "brand_groups_found",
  "message": "Brand groups found",
  "data": [
    {
      "groupId": 1,
      "name": "VIP Customers",
      "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\_groups\_found" | Machine-readable application code for the result. |
| message | string | "Brand groups found" | 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\[\].groupId | integer | 1 | Identifier of the associated group. |
| data\[\].name | string | "VIP Customers" | The name value. |
| data\[\].brandId | integer | 100 | Identifier of the brand. |

### Restaurant Families

Restaurant families allow grouping restaurants within a brand into categories (e.g., by region, concept, or type). These families are displayed on web ordering to help customers find the right restaurant.

### `GET /brand/{brandId}/brand_restaurant_families` - Get All Restaurant Families

Retrieve all restaurant families configured for a brand.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "brand_restaurant_families_found",
  "message": "The brand restaurant families have been found.",
  "data": [
    {
      "brandRestaurantFamilyId": 1,
      "brandId": 100,
      "name": "Paris Centre",
      "position": 1,
      "imageId": 501
    },
    {
      "brandRestaurantFamilyId": 2,
      "brandId": 100,
      "name": "Paris Ouest",
      "position": 2,
      "imageId": 502
    }
  ]
}
```

##### 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\_restaurant\_families\_found" | Machine-readable application code for the result. |
| message | string | "The brand restaurant families have been found." | 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\[\].brandRestaurantFamilyId | integer | 1 | Identifier of the associated brand restaurant family. |
| data\[\].brandId | integer | 100 | Identifier of the brand. |
| data\[\].name | string | "Paris Centre" | The name value. |
| data\[\].position | integer | 1 | The position value. |
| data\[\].imageId | integer | 501 | Identifier of the associated image. |

### `POST /brand/{brandId}/brand_restaurant_families` - Bulk Upsert Restaurant Families

Create or update multiple restaurant families in a single request. Existing families are matched by ID and updated; new ones are created.

#### Parameters

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

#### Request Body

```json
{
  "brandRestaurantFamilies": [
    {
      "name": "Paris Centre",
      "position": 1,
      "imageId": 501
    },
    {
      "brandRestaurantFamilyId": 2,
      "name": "Paris Ouest (updated)",
      "position": 2,
      "imageId": 503
    }
  ]
}
```

##### 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 |
| --- | --- | --- | --- |
| brandRestaurantFamilies | array | \[…\] | List of brand restaurant families entries. |
| brandRestaurantFamilies\[\] | object | {…} | Object containing brand restaurant families fields. |
| brandRestaurantFamilies\[\].name | string | "Paris Centre" | The name value. |
| brandRestaurantFamilies\[\].position | integer | 1 | The position value. |
| brandRestaurantFamilies\[\].imageId | integer | 501 | Identifier of the associated image. |

#### Response

```json
{
  "status": 200,
  "code": "brand_restaurant_families_upserted",
  "message": "The brand restaurant families have been upserted.",
  "data": [
    {
      "brandRestaurantFamilyId": 3,
      "brandId": 100,
      "name": "Paris Centre",
      "position": 1,
      "imageId": 501
    },
    {
      "brandRestaurantFamilyId": 2,
      "brandId": 100,
      "name": "Paris Ouest (updated)",
      "position": 2,
      "imageId": 503
    }
  ]
}
```

##### 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\_restaurant\_families\_upserted" | Machine-readable application code for the result. |
| message | string | "The brand restaurant families have been upserted." | 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\[\].brandRestaurantFamilyId | integer | 3 | Identifier of the associated brand restaurant family. |
| data\[\].brandId | integer | 100 | Identifier of the brand. |
| data\[\].name | string | "Paris Centre" | The name value. |
| data\[\].position | integer | 1 | The position value. |
| data\[\].imageId | integer | 501 | Identifier of the associated image. |

### Web Ordering (Public)

Public endpoints used by the web ordering frontend. These endpoints do not require authentication and use the `brandHash` (a public brand identifier) instead of the `brandId`.

### `GET /brands/webordering-configuration/{brandHash}` - Get Web Ordering Configuration

Retrieve the full web ordering configuration for a brand, including brand settings, restaurant list with their modules, consumption modes, and Stripe payment configuration. Results are cached for performance.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandHash | string | Yes | The public hash identifier of the brand (found in the brand details response). |

#### Response

```json
{
  "status": 200,
  "code": "brand_succeed",
  "message": "You can access to this brand.",
  "data": {
    "brandId": 100,
    "brandHash": "bb10813b502b",
    "name": "Innovorder Burgers",
    "locale": "fr",
    "currency": "EUR",
    "restaurants": [
      {
        "restaurantId": 200,
        "name": "Paris Centre",
        "consumptionModes": [
          {
            "type": "eat_in"
          },
          {
            "type": "take_away"
          }
        ]
      }
    ],
    "consumptionModesFlag": 3,
    "stripeEnabled": true,
    "isCNTRELuncheonVoucherDeclared": false
  }
}
```

##### 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 | 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.restaurants | array | \[…\] | List of restaurants entries. |
| data.restaurants\[\] | object | {…} | Object containing restaurants fields. |
| data.restaurants\[\].restaurantId | integer | 200 | Identifier of the restaurant. |
| data.restaurants\[\].name | string | "Paris Centre" | The name value. |
| data.restaurants\[\].consumptionModes | array | \[…\] | List of consumption modes entries. |
| data.restaurants\[\].consumptionModes\[\] | object | {…} | Object containing consumption modes fields. |
| data.restaurants\[\].consumptionModes\[\].type | string | "eat\_in" | The type value. |
| data.consumptionModesFlag | integer | 3 | The consumption modes flag value. |
| data.stripeEnabled | boolean | true | The stripe enabled value. |
| data.isCNTRELuncheonVoucherDeclared | boolean | false | Whether cntreluncheon voucher declared is enabled or applies. |

### `GET /brand/{brandHash}/restaurants` - Get Web Ordering Restaurants

Retrieve all restaurants available for web ordering, including their loyalty modules, ordering schedules, tags, and restaurant family associations.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandHash | string | Yes | The public hash identifier of the brand. |

#### Response

```json
{
  "status": 200,
  "code": "webordering_restaurants_found",
  "message": "The webordering eligible restaurants have been found.",
  "data": [
    {
      "restaurantId": 200,
      "name": "Innovorder Burgers Paris",
      "address": {
        "locality": "Paris",
        "postalCode": "75001",
        "lat": 48.868,
        "lng": 2.329
      },
      "canOrderAsAnonymous": 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 | "webordering\_restaurants\_found" | Machine-readable application code for the result. |
| message | string | "The webordering eligible restaurants have been found." | 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\[\].restaurantId | integer | 200 | Identifier of the restaurant. |
| data\[\].name | string | "Innovorder Burgers Paris" | The name value. |
| data\[\].address | object | {…} | Object containing address fields. |
| 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. |
| data\[\].canOrderAsAnonymous | boolean | true | Whether order as anonymous is enabled or applies. |

### `GET /brand/{brandHash}/restaurants_families` - Get Web Ordering Restaurant Families

Retrieve the restaurant family categories available for web ordering. Used to group restaurants by geographic area or concept on the web ordering page.

#### Parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| brandHash | string | Yes | The public hash identifier of the brand. |

#### Response

```json
{
  "status": 200,
  "code": "webordering_restaurant_families_found",
  "message": "The webordering restaurant families have been found.",
  "data": [
    {
      "brandRestaurantFamilyId": 1,
      "name": "Paris Centre",
      "position": 1,
      "imageId": 501,
      "restaurants": [
        200,
        201
      ]
    }
  ]
}
```

##### 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 | "webordering\_restaurant\_families\_found" | Machine-readable application code for the result. |
| message | string | "The webordering restaurant families have been found." | 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\[\].brandRestaurantFamilyId | integer | 1 | Identifier of the associated brand restaurant family. |
| data\[\].name | string | "Paris Centre" | The name value. |
| data\[\].position | integer | 1 | The position value. |
| data\[\].imageId | integer | 501 | Identifier of the associated image. |
| data\[\].restaurants | array | \[…\] | List of restaurants entries. |
| data\[\].restaurants\[\] | integer | 200 | The restaurants value. |

### `GET /brands/{brandId}/ewallet_consumption_modes` - Get E-Wallet Consumption Modes

Retrieve the available consumption modes for e-wallet payments on a brand. This is a public endpoint that does not require authentication.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "ewallet_consumption_modes_found",
  "message": "Ok",
  "data": [
    {
      "type": "eat_in",
      "label": "Sur place"
    },
    {
      "type": "take_away",
      "label": "A emporter"
    }
  ]
}
```

##### 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 | "ewallet\_consumption\_modes\_found" | Machine-readable application code for the result. |
| message | string | "Ok" | 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\[\].type | string | "eat\_in" | The type value. |
| data\[\].label | string | "Sur place" | The label value. |

### Email Whitelisting

Manage email domain whitelisting for a brand. When enabled, only customers with email addresses matching whitelisted domains can register. Each whitelisted domain can optionally be associated with a pricing rule, entrance fee, and group.

### `GET /brands/{brandId}/enable_customer_email_domain_names_whitelisting` - Get Email Whitelisting Status

Check whether email domain name whitelisting is enabled for a brand.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "enable_customer_email_domain_name_whitelisted_updated",
  "message": "Customer email domain names whitelisting has been updated",
  "data": {
    "isEnabled": 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 | "enable\_customer\_email\_domain\_name\_whitelisted\_updated" | Machine-readable application code for the result. |
| message | string | "Customer email domain names whitelisting has been updated" | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.isEnabled | boolean | true | Whether this feature is enabled. |

### `PUT /brands/{brandId}/enable_customer_email_domain_names_whitelisting` - Toggle Email Whitelisting

Enable or disable email domain name whitelisting for a brand.

#### Parameters

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

#### Request Body

```json
{
  "isEnabled": true
}
```

##### 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 |
| --- | --- | --- | --- |
| isEnabled | boolean | true | Whether this feature is enabled. |

#### Response

```json
{
  "status": 200,
  "code": "enable_customer_email_domain_name_whitelisted_updated",
  "message": "Customer email domain names whitelisting has been updated",
  "data": {
    "isEnabled": 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 | "enable\_customer\_email\_domain\_name\_whitelisted\_updated" | Machine-readable application code for the result. |
| message | string | "Customer email domain names whitelisting has been updated" | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.isEnabled | boolean | true | Whether this feature is enabled. |

### `GET /brands/{brandId}/whitelisted_customer_email_domain_names` - Get Whitelisted Email Domains

Retrieve the list of whitelisted email domain names for a brand, with their associated pricing rules and entrance fees.

#### Parameters

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

#### Response

```json
{
  "status": 200,
  "code": "whitelisted_customer_email_domain_name_found",
  "message": "The domain names list has been found",
  "data": {
    "domainNames": [
      {
        "emailDomainName": "university.edu",
        "entranceFeeId": 201,
        "pricingRuleId": 301,
        "group": "students"
      },
      {
        "emailDomainName": "company.com",
        "entranceFeeId": null,
        "pricingRuleId": null,
        "group": "staff"
      }
    ]
  }
}
```

##### 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 | "whitelisted\_customer\_email\_domain\_name\_found" | Machine-readable application code for the result. |
| message | string | "The domain names list has been found" | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.domainNames | array | \[…\] | List of domain names entries. |
| data.domainNames\[\] | object | {…} | Object containing domain names fields. |
| data.domainNames\[\].emailDomainName | string | "university.edu" | The email domain name value. |
| data.domainNames\[\].entranceFeeId | integer | 201 | Identifier of the associated entrance fee. |
| data.domainNames\[\].pricingRuleId | integer | 301 | Identifier of the associated pricing rule. |
| data.domainNames\[\].group | string | "students" | The group value. |

### `PUT /brands/{brandId}/whitelisted_customer_email_domain_names` - Update Whitelisted Email Domains

Replace the list of whitelisted email domain names for a brand. Each domain can be associated with an entrance fee, pricing rule, and group.

#### Parameters

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

#### Request Body

```json
{
  "domainNames": [
    {
      "emailDomainName": "university.edu",
      "entranceFeeId": 201,
      "pricingRuleId": 301,
      "group": "students"
    },
    {
      "emailDomainName": "company.com",
      "entranceFeeId": null,
      "pricingRuleId": null,
      "group": "staff"
    }
  ]
}
```

##### 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 |
| --- | --- | --- | --- |
| domainNames | array | \[…\] | List of domain names entries. |
| domainNames\[\] | object | {…} | Object containing domain names fields. |
| domainNames\[\].emailDomainName | string | "university.edu" | The email domain name value. |
| domainNames\[\].entranceFeeId | integer | 201 | Identifier of the associated entrance fee. |
| domainNames\[\].pricingRuleId | integer | 301 | Identifier of the associated pricing rule. |
| domainNames\[\].group | string | "students" | The group value. |

#### Response

```json
{
  "status": 200,
  "code": "whitelisted_customer_email_domain_name_updated",
  "message": "The domain names list has been updated",
  "data": {
    "domainNames": [
      {
        "emailDomainName": "university.edu",
        "entranceFeeId": 201,
        "pricingRuleId": 301,
        "group": "students"
      }
    ]
  }
}
```

##### 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 | "whitelisted\_customer\_email\_domain\_name\_updated" | Machine-readable application code for the result. |
| message | string | "The domain names list has been updated" | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.domainNames | array | \[…\] | List of domain names entries. |
| data.domainNames\[\] | object | {…} | Object containing domain names fields. |
| data.domainNames\[\].emailDomainName | string | "university.edu" | The email domain name value. |
| data.domainNames\[\].entranceFeeId | integer | 201 | Identifier of the associated entrance fee. |
| data.domainNames\[\].pricingRuleId | integer | 301 | Identifier of the associated pricing rule. |
| data.domainNames\[\].group | string | "students" | The group value. |
