Skip to content
innovorder
⌘K

Service operations

Restaurant Zones

System map · Service topology
Restaurant
Zones + rooms
Service

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

NameTypeRequiredDescription
idintegerYesThe unique identifier of the restaurant.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"fetch_restaurant_operation_zones_succeed"Machine-readable application code for the result.
messagestring"The operation zones for the given restaurant have been successfully fetched."Human-readable result message. Do not use this value for program logic.
dataarray[…]Endpoint-specific response payload.
data[]object{…}Endpoint-specific response payload.
data[].operationZoneIdinteger1Identifier of the associated operation zone.
data[].operationZoneCodestring"FR_MAINLAND"The operation zone code value.
data[].isPrimarybooleantrueWhether primary is enabled or applies.
data[].socialReasonstring"Innovorder SAS"The social reason value.
data[].vatNumberstring"FR12345678901"The vat number value.
data[].siretstring"12345678901234"The siret value.
data[].addressobject{…}Object containing address fields.
data[].address.routestring"10 Rue de la Paix"The route value.
data[].address.postalCodestring"75002"The postal code value.
data[].address.localitystring"Paris"The locality value.
data[].address.countrystring"FR"The country value.
data[].address.streetNumberstring"10"The street number value.
data[].address.administrativeAreaLevel1string"Ile-de-France"The administrative area level1 value.
data[].address.administrativeAreaLevel2string"Paris"The administrative area level2 value.
data[].address.latnumber48.8698The lat value.
data[].address.lngnumber2.3311The 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

NameTypeRequiredDescription
idintegerYesThe unique identifier of the restaurant.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"fetch_restaurant_vat_rates_succeed"Machine-readable application code for the result.
messagestring"The VAT rates for the given restaurant have been successfully fetched."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.restaurantIdinteger200Identifier of the restaurant.
data.operationZoneobject{…}Object containing operation zone fields.
data.operationZone.operationZoneIdinteger1Identifier of the associated operation zone.
data.operationZone.codestring"FR_MAINLAND"Machine-readable application code for the result.
data.operationZone.namestring"France (mainland)"The name value.
data.operationZone.countryCodestring"FR"The country code value.
data.operationZone.isPrimarybooleantrueWhether primary is enabled or applies.
data.operationZone.fiscalityTypestring"NONE"The fiscality type value.
data.vatGroupsarray[…]List of vat groups entries.
data.vatGroups[]object{…}Object containing vat groups fields.
data.vatGroups[].vatGroupIdinteger1Identifier of the associated vat group.
data.vatGroups[].codestring"FOOD"Machine-readable application code for the result.
data.vatGroups[].namestring"Food"The name value.
data.vatGroups[].eatIninteger1000The eat in value.
data.vatGroups[].takeAwayinteger550The take away value.
data.vatGroups[].deliveryinteger550The 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

NameTypeRequiredDescription
idintegerYesThe unique identifier of the brand.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"fetch_brand_vat_rates_succeed"Machine-readable application code for the result.
messagestring"The VAT rates for the given brand have been successfully fetched."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.brandIdinteger3325Identifier of the brand.
data.operationZoneobject{…}Object containing operation zone fields.
data.operationZone.operationZoneIdinteger1Identifier of the associated operation zone.
data.operationZone.codestring"FR_MAINLAND"Machine-readable application code for the result.
data.operationZone.namestring"France (mainland)"The name value.
data.operationZone.countryCodestring"FR"The country code value.
data.operationZone.isPrimarybooleantrueWhether primary is enabled or applies.
data.operationZone.fiscalityTypestring"NONE"The fiscality type value.
data.vatGroupsarray[…]List of vat groups entries.
data.vatGroups[]object{…}Object containing vat groups fields.
data.vatGroups[].vatGroupIdinteger1Identifier of the associated vat group.
data.vatGroups[].codestring"FOOD"Machine-readable application code for the result.
data.vatGroups[].namestring"Food"The name value.
data.vatGroups[].eatIninteger1000The eat in value.
data.vatGroups[].takeAwayinteger550The take away value.
data.vatGroups[].deliveryinteger550The 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

NameTypeRequiredDescription
idintegerYesThe unique identifier of the restaurant.
operationZoneIdintegerYesThe unique identifier of the operation zone to configure.

Request Body

json
{
  "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.

PropertyTypeExampleDescription
socialReasonstring"Innovorder SAS"The social reason value.
addressobject{…}Object containing address fields.
address.routestring"10 Rue de la Paix"The route value.
address.postalCodestring"75002"The postal code value.
address.localitystring"Paris"The locality value.
address.countrystring"FR"The country value.
address.streetNumberstring"10"The street number value.
address.administrativeAreaLevel1string"Ile-de-France"The administrative area level1 value.
address.administrativeAreaLevel2string"Paris"The administrative area level2 value.
address.providerstring"google"The provider value.
address.providerIdstring"ChIJ2VbKGOVx5kcR"Identifier of the associated provider.
address.latnumber48.8698The lat value.
address.lngnumber2.3311The lng value.
vatNumberstring"FR12345678901"The vat number value.
siretstring"12345678901234"The siret value.

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"configure_operation_zone_succeed"Machine-readable application code for the result.
messagestring"The operation zone has been successfully configured."Human-readable result message. Do not use this value for program logic.
dataobject{…}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.

Rates are expressed in basis points in the JSON response (e.g. 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

NameTypeRequiredDescription
zoneCodestringNoFilter the referential to a single operation zone. Case-insensitive, max 64 characters (query parameter).
groupCodestringNoFilter the referential to a single VAT group. Case-insensitive, max 64 characters (query parameter).
modestringNoConsumption mode filter, only applied to CSV output. Values: eatIn, takeAway, delivery (query parameter).
formatstringNoOutput format: json (default) or csv (query parameter).

Response

json
{
  "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.

PropertyTypeExampleDescription
statusinteger200HTTP status code returned by the API.
codestring"get_vat_configuration_succeed"Machine-readable application code for the result.
messagestring"VAT configuration retrieved successfully."Human-readable result message. Do not use this value for program logic.
dataobject{…}Endpoint-specific response payload.
data.versionstring"2026-01-27"The version value.
data.operationZonesarray[…]List of operation zones entries.
data.operationZones[]object{…}Object containing operation zones fields.
data.operationZones[].codestring"FR_MAINLAND"Machine-readable application code for the result.
data.operationZones[].namestring"France (mainland)"The name value.
data.operationZones[].countryCodestring"FR"The country code value.
data.operationZones[].fiscalityTypearray[…]List of fiscality type entries.
data.operationZones[].fiscalityType[]string"NF525"The fiscality type value.
data.operationZones[].currenciesarray[…]List of currencies entries.
data.operationZones[].currencies[]string"EUR"The currencies value.
data.vatGroupsarray[…]List of vat groups entries.
data.vatGroups[]object{…}Object containing vat groups fields.
data.vatGroups[].vatGroupIdinteger1Identifier of the associated vat group.
data.vatGroups[].codestring"FOOD"Machine-readable application code for the result.
data.vatGroups[].namestring"Food"The name value.
data.vatGroups[].ratesobject{…}Object containing rates fields.
data.vatGroups[].rates.FR_MAINLANDobject{…}Object containing fr mainland fields.
data.vatGroups[].rates.FR_MAINLAND.eatIninteger1000The eat in value.
data.vatGroups[].rates.FR_MAINLAND.takeAwayinteger550The take away value.
data.vatGroups[].rates.FR_MAINLAND.deliveryinteger550The delivery value.
data.vatGroups[].rates.FR_CORSICAobject{…}Object containing fr corsica fields.
data.vatGroups[].rates.FR_CORSICA.eatIninteger1000The eat in value.
data.vatGroups[].rates.FR_CORSICA.takeAwayinteger210The take away value.
data.vatGroups[].rates.FR_CORSICA.deliveryinteger210The delivery value.