Service operations
Restaurant Zones
Restaurant zones (also called operation zones) represent the fiscal and legal entities under which a restaurant operates. Each zone holds its own VAT configuration, legal address, SIRET number, and social reason. A restaurant can belong to multiple zones, with one designated as the primary zone.
GET/api/v1/restaurants/{id}/operation-zonesList Operation Zones
Retrieve all operation zone summaries for a specific restaurant. Returns each zone with its configuration, including whether it is the primary zone.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Yes | The unique identifier of the restaurant. |
Response
{
"status": 200,
"code": "fetch_restaurant_operation_zones_succeed",
"message": "The operation zones for the given restaurant have been successfully fetched.",
"data": [
{
"operationZoneId": 1,
"operationZoneCode": "FR_MAINLAND",
"isPrimary": true,
"socialReason": "Innovorder SAS",
"vatNumber": "FR12345678901",
"siret": "12345678901234",
"address": {
"route": "10 Rue de la Paix",
"postalCode": "75002",
"locality": "Paris",
"country": "FR",
"streetNumber": "10",
"administrativeAreaLevel1": "Ile-de-France",
"administrativeAreaLevel2": "Paris",
"lat": 48.8698,
"lng": 2.3311
}
},
{
"operationZoneId": 2,
"operationZoneCode": "FR_CORSICA",
"isPrimary": false,
"socialReason": "Innovorder Corse SARL",
"vatNumber": "FR98765432100",
"siret": "98765432100012",
"address": {
"route": "5 Cours Napoleon",
"postalCode": "20000",
"locality": "Ajaccio",
"country": "FR",
"streetNumber": "5",
"administrativeAreaLevel1": "Corse",
"administrativeAreaLevel2": "Corse-du-Sud",
"lat": 41.9194,
"lng": 8.7389
}
}
]
}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 | "fetch_restaurant_operation_zones_succeed" | Machine-readable application code for the result. |
| message | string | "The operation zones for the given restaurant have been successfully fetched." | 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[].operationZoneId | integer | 1 | Identifier of the associated operation zone. |
| data[].operationZoneCode | string | "FR_MAINLAND" | The operation zone code value. |
| data[].isPrimary | boolean | true | Whether primary is enabled or applies. |
| data[].socialReason | string | "Innovorder SAS" | The social reason value. |
| data[].vatNumber | string | "FR12345678901" | The vat number value. |
| data[].siret | string | "12345678901234" | The siret value. |
| data[].address | object | {…} | Object containing address fields. |
| data[].address.route | string | "10 Rue de la Paix" | The route value. |
| data[].address.postalCode | string | "75002" | The postal code value. |
| data[].address.locality | string | "Paris" | The locality value. |
| data[].address.country | string | "FR" | The country value. |
| data[].address.streetNumber | string | "10" | The street number value. |
| data[].address.administrativeAreaLevel1 | string | "Ile-de-France" | The administrative area level1 value. |
| data[].address.administrativeAreaLevel2 | string | "Paris" | The administrative area level2 value. |
| data[].address.lat | number | 48.8698 | The lat value. |
| data[].address.lng | number | 2.3311 | The lng value. |
GET/api/v1/restaurants/{id}/vat-ratesGet VAT Rates
Retrieve the VAT groups (families) applicable to a restaurant, based on its primary operation zone, with the rate per consumption mode in basis points (1000 = 10%). Use the returned vatGroupId values when creating or updating products. If the restaurant has no operation zone, operationZone is null and vatGroups is empty.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Yes | The unique identifier of the restaurant. |
Response
{
"status": 200,
"code": "fetch_restaurant_vat_rates_succeed",
"message": "The VAT rates for the given restaurant have been successfully fetched.",
"data": {
"restaurantId": 200,
"operationZone": {
"operationZoneId": 1,
"code": "FR_MAINLAND",
"name": "France (mainland)",
"countryCode": "FR",
"isPrimary": true,
"fiscalityType": "NONE"
},
"vatGroups": [
{
"vatGroupId": 1,
"code": "FOOD",
"name": "Food",
"eatIn": 1000,
"takeAway": 550,
"delivery": 550
},
{
"vatGroupId": 2,
"code": "ALCOHOL",
"name": "Alcoholic beverages",
"eatIn": 2000,
"takeAway": 2000,
"delivery": 2000
}
]
}
}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 | "fetch_restaurant_vat_rates_succeed" | Machine-readable application code for the result. |
| message | string | "The VAT rates for the given restaurant have been successfully fetched." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.restaurantId | integer | 200 | Identifier of the restaurant. |
| data.operationZone | object | {…} | Object containing operation zone fields. |
| data.operationZone.operationZoneId | integer | 1 | Identifier of the associated operation zone. |
| data.operationZone.code | string | "FR_MAINLAND" | Machine-readable application code for the result. |
| data.operationZone.name | string | "France (mainland)" | The name value. |
| data.operationZone.countryCode | string | "FR" | The country code value. |
| data.operationZone.isPrimary | boolean | true | Whether primary is enabled or applies. |
| data.operationZone.fiscalityType | string | "NONE" | The fiscality type value. |
| data.vatGroups | array | […] | List of vat groups entries. |
| data.vatGroups[] | object | {…} | Object containing vat groups fields. |
| data.vatGroups[].vatGroupId | integer | 1 | Identifier of the associated vat group. |
| data.vatGroups[].code | string | "FOOD" | Machine-readable application code for the result. |
| data.vatGroups[].name | string | "Food" | The name value. |
| data.vatGroups[].eatIn | integer | 1000 | The eat in value. |
| data.vatGroups[].takeAway | integer | 550 | The take away value. |
| data.vatGroups[].delivery | integer | 550 | The delivery value. |
GET/api/v1/brands/{id}/vat-ratesGet Brand VAT Rates
Returns VAT groups for the brand dominant primary operation zone. Rates are display values; the authoritative VAT is selected per restaurant when product propagation occurs. Brands with no operation-zone restaurant receive operationZone null and an empty vatGroups list.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Yes | The unique identifier of the brand. |
Response
{
"status": 200,
"code": "fetch_brand_vat_rates_succeed",
"message": "The VAT rates for the given brand have been successfully fetched.",
"data": {
"brandId": 3325,
"operationZone": {
"operationZoneId": 1,
"code": "FR_MAINLAND",
"name": "France (mainland)",
"countryCode": "FR",
"isPrimary": true,
"fiscalityType": "NONE"
},
"vatGroups": [
{
"vatGroupId": 1,
"code": "FOOD",
"name": "Food",
"eatIn": 1000,
"takeAway": 550,
"delivery": 550
}
]
}
}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 | "fetch_brand_vat_rates_succeed" | Machine-readable application code for the result. |
| message | string | "The VAT rates for the given brand have been successfully fetched." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.brandId | integer | 3325 | Identifier of the brand. |
| data.operationZone | object | {…} | Object containing operation zone fields. |
| data.operationZone.operationZoneId | integer | 1 | Identifier of the associated operation zone. |
| data.operationZone.code | string | "FR_MAINLAND" | Machine-readable application code for the result. |
| data.operationZone.name | string | "France (mainland)" | The name value. |
| data.operationZone.countryCode | string | "FR" | The country code value. |
| data.operationZone.isPrimary | boolean | true | Whether primary is enabled or applies. |
| data.operationZone.fiscalityType | string | "NONE" | The fiscality type value. |
| data.vatGroups | array | […] | List of vat groups entries. |
| data.vatGroups[] | object | {…} | Object containing vat groups fields. |
| data.vatGroups[].vatGroupId | integer | 1 | Identifier of the associated vat group. |
| data.vatGroups[].code | string | "FOOD" | Machine-readable application code for the result. |
| data.vatGroups[].name | string | "Food" | The name value. |
| data.vatGroups[].eatIn | integer | 1000 | The eat in value. |
| data.vatGroups[].takeAway | integer | 550 | The take away value. |
| data.vatGroups[].delivery | integer | 550 | The delivery value. |
PUT/api/v1/restaurants/{id}/operation-zones/{operationZoneId}/configureConfigure Operation Zone
Update the legal and fiscal configuration of an existing operation zone for a restaurant. This includes the social reason, address, VAT number, and SIRET.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | integer | Yes | The unique identifier of the restaurant. |
| operationZoneId | integer | Yes | The unique identifier of the operation zone to configure. |
Request Body
{
"socialReason": "Innovorder SAS",
"address": {
"route": "10 Rue de la Paix",
"postalCode": "75002",
"locality": "Paris",
"country": "FR",
"streetNumber": "10",
"administrativeAreaLevel1": "Ile-de-France",
"administrativeAreaLevel2": "Paris",
"provider": "google",
"providerId": "ChIJ2VbKGOVx5kcR",
"lat": 48.8698,
"lng": 2.3311
},
"vatNumber": "FR12345678901",
"siret": "12345678901234"
}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. |
| address | object | {…} | Object containing address fields. |
| address.route | string | "10 Rue de la Paix" | The route value. |
| address.postalCode | string | "75002" | The postal code value. |
| address.locality | string | "Paris" | The locality value. |
| address.country | string | "FR" | The country value. |
| address.streetNumber | string | "10" | The street number value. |
| address.administrativeAreaLevel1 | string | "Ile-de-France" | The administrative area level1 value. |
| address.administrativeAreaLevel2 | string | "Paris" | The administrative area level2 value. |
| address.provider | string | "google" | The provider value. |
| address.providerId | string | "ChIJ2VbKGOVx5kcR" | Identifier of the associated provider. |
| address.lat | number | 48.8698 | The lat value. |
| address.lng | number | 2.3311 | The lng value. |
| vatNumber | string | "FR12345678901" | The vat number value. |
| siret | string | "12345678901234" | The siret value. |
Response
{
"status": 200,
"code": "configure_operation_zone_succeed",
"message": "The operation zone has been successfully configured.",
"data": {}
}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 | "configure_operation_zone_succeed" | Machine-readable application code for the result. |
| message | string | "The operation zone has been successfully configured." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
VAT Configuration Referential
The VAT configuration referential lists every operation zone that can be selected for a restaurant, along with the VAT groups (families) and their applicable rates per zone and consumption mode. Use it to discover valid zone codes and VAT group identifiers before configuring products or operation zones.
1000 = 10%). When requesting format=csv, the response is raw text/csv sent as a file attachment without the standard { code, message, data } envelope, and rates are converted to percentages. The mode parameter only filters the columns of the CSV output; it has no effect on the JSON response.GET/api/v1/vat-configurationGet VAT Configuration Referential
Retrieve the global referential of selectable operation zones and VAT groups, with rates per zone and per consumption mode (eat in, take away, delivery). This is a global referential and is not scoped to a specific brand or restaurant.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| zoneCode | string | No | Filter the referential to a single operation zone. Case-insensitive, max 64 characters (query parameter). |
| groupCode | string | No | Filter the referential to a single VAT group. Case-insensitive, max 64 characters (query parameter). |
| mode | string | No | Consumption mode filter, only applied to CSV output. Values: eatIn, takeAway, delivery (query parameter). |
| format | string | No | Output format: json (default) or csv (query parameter). |
Response
{
"status": 200,
"code": "get_vat_configuration_succeed",
"message": "VAT configuration retrieved successfully.",
"data": {
"version": "2026-01-27",
"operationZones": [
{
"code": "FR_MAINLAND",
"name": "France (mainland)",
"countryCode": "FR",
"fiscalityType": [
"NF525"
],
"currencies": [
"EUR"
]
},
{
"code": "FR_CORSICA",
"name": "France (Corsica)",
"countryCode": "FR",
"fiscalityType": [
"NF525"
],
"currencies": [
"EUR"
]
}
],
"vatGroups": [
{
"vatGroupId": 1,
"code": "FOOD",
"name": "Food",
"rates": {
"FR_MAINLAND": {
"eatIn": 1000,
"takeAway": 550,
"delivery": 550
},
"FR_CORSICA": {
"eatIn": 1000,
"takeAway": 210,
"delivery": 210
}
}
},
{
"vatGroupId": 2,
"code": "ALCOHOL",
"name": "Alcoholic beverages",
"rates": {
"FR_MAINLAND": {
"eatIn": 2000,
"takeAway": 2000,
"delivery": 2000
},
"FR_CORSICA": {
"eatIn": 2000,
"takeAway": 2000,
"delivery": 2000
}
}
}
]
}
}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 | "get_vat_configuration_succeed" | Machine-readable application code for the result. |
| message | string | "VAT configuration retrieved successfully." | Human-readable result message. Do not use this value for program logic. |
| data | object | {…} | Endpoint-specific response payload. |
| data.version | string | "2026-01-27" | The version value. |
| data.operationZones | array | […] | List of operation zones entries. |
| data.operationZones[] | object | {…} | Object containing operation zones fields. |
| data.operationZones[].code | string | "FR_MAINLAND" | Machine-readable application code for the result. |
| data.operationZones[].name | string | "France (mainland)" | The name value. |
| data.operationZones[].countryCode | string | "FR" | The country code value. |
| data.operationZones[].fiscalityType | array | […] | List of fiscality type entries. |
| data.operationZones[].fiscalityType[] | string | "NF525" | The fiscality type value. |
| data.operationZones[].currencies | array | […] | List of currencies entries. |
| data.operationZones[].currencies[] | string | "EUR" | The currencies value. |
| data.vatGroups | array | […] | List of vat groups entries. |
| data.vatGroups[] | object | {…} | Object containing vat groups fields. |
| data.vatGroups[].vatGroupId | integer | 1 | Identifier of the associated vat group. |
| data.vatGroups[].code | string | "FOOD" | Machine-readable application code for the result. |
| data.vatGroups[].name | string | "Food" | The name value. |
| data.vatGroups[].rates | object | {…} | Object containing rates fields. |
| data.vatGroups[].rates.FR_MAINLAND | object | {…} | Object containing fr mainland fields. |
| data.vatGroups[].rates.FR_MAINLAND.eatIn | integer | 1000 | The eat in value. |
| data.vatGroups[].rates.FR_MAINLAND.takeAway | integer | 550 | The take away value. |
| data.vatGroups[].rates.FR_MAINLAND.delivery | integer | 550 | The delivery value. |
| data.vatGroups[].rates.FR_CORSICA | object | {…} | Object containing fr corsica fields. |
| data.vatGroups[].rates.FR_CORSICA.eatIn | integer | 1000 | The eat in value. |
| data.vatGroups[].rates.FR_CORSICA.takeAway | integer | 210 | The take away value. |
| data.vatGroups[].rates.FR_CORSICA.delivery | integer | 210 | The delivery value. |