Stores
The Stores resource enables you to interact with your stores.
The following table describes the different contents of the Stores resource:
| API Resource | Endpoint description |
|---|---|
GET stores-pa | Returns the list of stores for the authenticated client |
PUT stores-pa/{storeId}/status | Update a store to integrated or not integrated |
GET stores-pa/{storeId}/check-in-code/ | Returns the check-in code of a store belonging to an authenticated client. |
GET /stores/integration-status | Check which stores are integrated and which are not (Self-Onboarding) |
POST /stores/provisioning | Provision stores for an integration in batch (Self-Onboarding) |
POST /stores/deprovisioning | Deprovision stores from an integration in batch (Self-Onboarding) |
GET stores-pa
Use this endpoint to retrieve the stores of an authenticating ally.
Endpoint URL
Use this URL to make a request with this endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/stores-pa
{COUNTRY_DOMAIN}: This is your Rappi Country Domain. See the list of Country Domains.
Endpoint Properties
This resource has the following properties:
| Response formats | JSON |
| Authentication requirements | Token |
Parameters
This endpoint does not permit additional parameters.
Status Codes
These are the possible status codes of the response for this endpoint:
Sample Request
This is an example of an API request using this endpoint:
GET https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores-pa
This is an example of the request:
URL url = new URL("https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores-pa"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("x-authorization", "Bearer YOUR_TOKEN"); try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder response = new StringBuilder(); String responseLine; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println("Response body: " + response.toString()); } System.out.println("Response Code : " + connection.getResponseCode());
Sample Response "Success 200"
This is an example of the response "Success 200":
[ { "integrationId": "111", "rappiId": "890982", "name": "Store 1" }, { "integrationId": "222", "rappiId": "890983", "name": "Store 2" }, { "integrationId": "333", "rappiId": "890983", "name": "Store 3" } ]
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
integrationIdstring | Identifier of the store in the Rappi application |
rappiIdstring | Identifier that Rappi granted the ally |
namestring | Name of the store in the Rappi application |
Sample Response "Invalid credentials 401"
This is an example of the response "Invalid credentials 401":
{ "message": "Not a valid token" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
Sample Response "App Client no encontrado 404"
This is an example of the response "App Client no encontrado 404":
{ "message": "Not found appClient of client id {clientId}" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
PUT store-pa integrated status
Use this endpoint to change a store to integrated or to not integrated
Endpoint URL
Use this URL to make a request with this endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/stores-pa/{storeId}/status
{COUNTRY_DOMAIN}: This is your Rappi Country Domain. See the list of Country Domains.
Endpoint Properties
This resource has the following properties:
| Response formats | JSON |
| Authentication requirements | Token |
Parameters
This endpoint has the following parameters:
| Parameter | Description |
|---|---|
{storeId} | Path Param. Store Id from rappi |
{integrated} | Query Param. To indicate whether the store is changed to "integrated" (true) o "not integrated" (false) |
Status Codes
These are the possible status codes of the response for this endpoint:
Sample Request
This is an example of an API request using this endpoint:
PUT https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores-pa/12345/status?integrated=true
This is an example of the request:
URL url = new URL("https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores-pa/12345/status?integrated=true"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("PUT"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("x-authorization", "Bearer YOUR_TOKEN"); try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder response = new StringBuilder(); String responseLine; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println("Response body: " + response.toString()); } System.out.println("Response Code : " + connection.getResponseCode());
Sample Response "Success 200"
This is an example of the response "Success 200" when updating a store to "integrated"
{ "message": "The store {storeid} was changed to integrated {true} successfully." }
This is an example of the response "Success 200" when updating a store to "not integrated"
{ "message": "The store {storeid} was changed to integrated {false} successfully. Please remember to login into the partners app and set the AUTO ACCEPT config" }
This table describes the objects contained in the response example:
| Objeto | Descripción |
|---|---|
messagestring | Mensaje con la información del cambio realizado |
Sample Response "Invalid credentials 401"
This is an example of the response "Invalid credentials 401":
{ "message": "Not a valid token" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
Sample Response "App Client no encontrado 404"
This is an example of the response "App Client no encontrado 404":
{ "message": "Not found appClient of client id {clientId}" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
Sample Response "Error while updating the store 400"
This is an example of the response "Error while updating the store 400":
{ "message": "There was an error trying to change the store {storeId} to integrated: {true|false}. Please contact support team" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
GET store current menu
Use this endpoint to retrieve the menu from the stores.
Endpoint URL
Use this URL to make a request with this endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/store/{STORE_ID}/menu/current
{COUNTRY_DOMAIN}: This is your Rappi Country Domain. See the list of Country Domains.
{STORE_ID}: This is the store id from Rappi.
Endpoint Properties
This resource has the following properties:
| Response formats | JSON | |
| Authentication requirements | Token |
Parameters
This endpoint does not permit additional parameters.
Status Codes
These are the possible status codes of the response for this endpoint:
Sample Request
This is an example of an API request using this endpoint:
GET https://internal-api.dev.rappi.com/api/v2/restaurants-integrations-public-api/store/900111941/menu/current
This is an example of the request:
URL url = new URL("https://internal-api.dev.rappi.com/api/v2/restaurants-integrations-public-api/store/YOU_STORE/menu/current"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("x-authorization", "Bearer YOUR_TOKEN"); try (BufferedReader br = new BufferedReader( new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder response = new StringBuilder(); String responseLine; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println("Response body: " + response.toString()); } System.out.println("Response Code : " + connection.getResponseCode());
Sample Response "Success 200"
This is an example of the response "Success 200":
[ { "storeId": "900111941", "products": [ { "id": "2135501578", "name": "2 por 19,90", "price": 52.9, "partnerSku": null, "active": null, "toppings": [ { "id": "340825698", "name": "Batata Grande", "price": 6.9, "partnerSku": null, "active": null, "category": { "id": "1247164425", "name": "Deseja Acompanhamento?" } }, { "id": "340825699", "name": "Pepsi 350ml", "price": 6.9, "partnerSku": null, "active": null, "category": { "id": "1247164426", "name": "Deseja Bebida?" } } ] }, { "id": "2135501683", "name": "4 Sanduíches por R$ 29,80!", "price": 43.6, "partnerSku": null, "active": null, "toppings": [ { "id": "340827238", "name": "Rodeio", "price": 0, "partnerSku": null, "active": null, "category": { "id": "1247164714", "name": "Escolha seu 1º sanduíche:" } } ] } ] } ]
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
storeIdstring | Rappi Id from the Store |
productsarray of objects | List of products |
products.idstring | Rappi Id from toppings |
products.namestring | Product name |
products.priceinteger | Product price |
products.toppingsarray of objects | List of toppings |
products.toppings.idstring | Rappi Id from the topping |
products.toppings.namestring | Topping name |
products.toppings.priceinteger | Topping price |
products.toppings.categoryobjects | Topping category |
products.toppings.category.idstring | Rappi Id from Topping Category |
products.toppings.category.namestring | Topping Category name |
Sample Response "Invalid credentials 401"
This is sample response "Invalid credentials 401":
{ "message": "Not a valid token" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
Sample Response "App Client not found 404"
This is sample response "App Client no encontrado 404":
{ "message": "Not found appClient of client id {clientId}" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
Sample Response "Store not found in App Client 400"
This is sample response "Store not found in App Client 400":
{ "message": "The stores {storeId} don't belong to the appClient of client id {clientId}" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
GET stores-pa check in code
Use this endpoint to get the authenticated partner's store check-in code.
Endpoint URL
Use this URL to make a request with this endpoint:
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/stores-pa/{storeId}/check-in-code
{COUNTRY_DOMAIN}: This is your Rappi Country Domain. See the list of Country Domains.
{STORE_ID}: This is the store id from Rappi.
Endpoint Properties
This resource has the following properties:
| Response formats | JSON | |
| Authentication requirements | Token |
Parameters
This endpoint has the following parameter:
| Parameter | Description |
|---|---|
{storeId} | Path Param. Store Id from rappi |
Status Codes
These are the possible status codes of the response for this endpoint:
Sample Request
This is an example of an API request using this endpoint:
GET https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores-pa/900105433/check-in-code
This is an example of the request:
URL url = new URL("https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores-pa/900105433/check-in-code"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("User-Agent", "Mozilla/5.0"); connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Accept", "application/json"); connection.setRequestProperty("x-authorization", "Bearer YOUR_TOKEN"); try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { StringBuilder response = new StringBuilder(); String responseLine; while ((responseLine = br.readLine()) != null) { response.append(responseLine.trim()); } System.out.println("Response body: " + response.toString()); } System.out.println("Response Code : " + connection.getResponseCode());
Sample Response "Success 200"
This is an example of the response "Success 200":
{ "store_id": 900105433, "code": "8733", "expired_at": "2023-01-25 16:26:35", "created_at": "2023-01-23 13:51:06", "updated_at": "2023-01-24 16:26:35" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
store_idint | Store Id in the Rappi App |
codestring | Store check-in code assigned by Rappi |
expired_atstring | Expiration date of the check-in code assigned to the store |
created_atstring | Creation date of the check-in code assigned for the store |
updated_atstring | Update date of the check-in code assigned to the store |
Sample Response "The store does not belong to the App Client 400"
This is an example of the response "The store does not belong to the App Client 400":
{ "message": "The stores {store_id} don't belong to the appClient of client id {clientId}" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
Sample Response "Invalid credentials 401"
This is an example of the response "Invalid credentials 401":
{ "message": "Access is denied" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
Sample Response "App Client not found 404"
This is an example of the response "App Client not found 404":
{ "message": "Not found appClient of client id {clientId}" }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
messagestring | Descriptive error message |
GET integration-status
Use this endpoint to check which stores are already integrated and which are not. Store IDs are fetched automatically from the merchant's JWT email — no request body is needed.
Endpoint URL
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/stores/integration-status
{COUNTRY_DOMAIN}: This is your Rappi Country Domain. See the list of Country Domains.
Endpoint Properties
| Response formats | JSON |
| Authentication requirements | Bearer integrator JWT (Authorization) + Bearer merchant JWT (Authorization-Partners) |
Parameters
| Header | Requirement | Description |
|---|---|---|
Authorization | required | Bearer <integrator JWT> — M2M token issued by Auth0 |
Authorization-Partners | required | Bearer <merchant JWT> — OAuth2 token issued by Auth0; email extracted internally to identify merchant's stores |
Status Codes
Sample Request
GET https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores/integration-status
Sample Response "Success 200"
This is an example of the response "Success 200":
{ "stores": [ { "storeId": "1", "name": "Your Brand Main", "brand": "YourBrand", "integrated": true, "integrationId": "your-integration-id", "children": [ { "storeId": "3", "name": "Child Store 3", "brand": "YourBrand", "integrated": true, "integrationId": "your-integration-id" }, { "storeId": "4", "name": "Child Store 4", "brand": "YourBrand", "integrated": false } ] }, { "storeId": "2", "name": "Your Brand Secondary", "brand": "YourBrand", "integrated": true, "integrationId": "your-integration-id", "children": [] }, { "storeId": "10", "name": "Sertester1", "brand": "YourBrand", "integrated": false, "children": [ { "storeId": "20", "name": "Sertester1 Child 1", "brand": "YourBrand", "integrated": false }, { "storeId": "21", "name": "Sertester1 Child 2", "brand": "YourBrand", "integrated": false } ] }, { "storeId": "11", "name": "FIFOUno", "brand": "YourBrand", "integrated": false, "children": [] } ] }
This table describes the objects contained in the response example:
| Object | Description |
|---|---|
storesarray of objects | All parent stores belonging to the merchant (both integrated and not integrated). Child stores appear nested inside children, not at the top level. |
stores[].storeIdstring | Rappi store ID |
stores[].namestring | Store display name |
stores[].brandstring | Brand name resolved from Portal Partners |
stores[].integratedboolean | true if the store is currently integrated; false otherwise |
stores[].integrationIdstring | Integration identifier the store is provisioned under. Only present when integrated is true. |
stores[].childrenarray of objects | Child stores belonging to this parent. Always present (empty array if none). |
stores[].children[].storeIdstring | Child store Rappi ID |
stores[].children[].namestring | Child store display name |
stores[].children[].brandstring | Brand name of the child store |
stores[].children[].integratedboolean | true if the child is currently integrated; false otherwise |
stores[].children[].integrationIdstring | Integration identifier. Only present when integrated is true. |
Sample Response "Unauthorized 401"
This is an example of the response "Unauthorized 401":
{ "message": "Not a valid token" }
| Object | Description |
|---|---|
messagestring | Descriptive error message |
POST provisioning
Use this endpoint to provision stores for a POS integration in batch. This operation is asynchronous — the API returns 202 Accepted immediately. The result is delivered via the STORE_PROVISIONING_STATUS webhook.
Endpoint URL
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/stores/provisioning
{COUNTRY_DOMAIN}: This is your Rappi Country Domain. See the list of Country Domains.
Endpoint Properties
| Response formats | JSON |
| Authentication requirements | Bearer integrator JWT (Authorization) + Bearer merchant JWT (Authorization-Partners) |
Parameters
| Header | Requirement | Description |
|---|---|---|
Authorization | required | Bearer <integrator JWT> — M2M token issued by Auth0 |
Authorization-Partners | required | Bearer <merchant JWT> — OAuth2 token issued by Auth0 |
Request Body
| Attribute | Requirement | Description |
|---|---|---|
storesarray of objects | required | List of stores to provision. Maximum 20 per request. |
stores[].storeIdstring | required | Rappi store ID to provision |
stores[].namestring | required | Store display name. Used to identify the store in the integration. |
stores[].integrationIdstring | required | Integration identifier to associate the store with (e.g. your-integration-id) |
stores[].storeIntegrationIdstring | optional | Store identifier in the POS system (StoreID at POS). Used to correlate the Rappi store with the corresponding store in the integrator's system. If not provided, the Rappi storeId is used. |
Status Codes
Sample Request
POST https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores/provisioning
This is an example of the request:
{ "stores": [ { "storeId": "10", "name": "My Store", "integrationId": "your-integration-id" }, { "storeId": "11", "name": "My Other Store", "integrationId": "your-integration-id" } ] }
Sample Response "Accepted 202"
This is an example of the response "Accepted 202":
{ "batchId": "550e8400-e29b-41d4-a716-446655440000", "accepted": [ { "storeId": "10", "integrationId": "your-integration-id" } ], "rejected": [ { "storeId": "11", "reason": "not_owned" } ], "autoProvisioned": [ { "storeId": "100", "integrationId": "your-integration-id", "reason": "parent_auto_provisioned" } ] }
| Object | Description |
|---|---|
batchIdstring | Unique identifier for the batch operation. Referenced in the STORE_PROVISIONING_STATUS webhook. |
acceptedarray of objects | Stores explicitly accepted for provisioning |
accepted[].storeIdstring | Rappi store ID |
accepted[].integrationIdstring | Integration identifier |
rejectedarray of objects | Stores rejected and not provisioned |
rejected[].storeIdstring | Rappi store ID |
rejected[].reasonstring | Reason for rejection: not_owned, invalid_integration_id, missing_name |
autoProvisionedarray of objects | Parent stores that were automatically provisioned because a requested child store required it. Always present (empty array if none). |
autoProvisioned[].storeIdstring | Rappi store ID of the auto-provisioned parent |
autoProvisioned[].integrationIdstring | Integration identifier |
autoProvisioned[].reasonstring | Always parent_auto_provisioned |
Sample Response "Unauthorized 401"
This is an example of the response "Unauthorized 401":
{ "message": "Not a valid token" }
| Object | Description |
|---|---|
messagestring | Descriptive error message |
POST deprovisioning
Use this endpoint to deprovision stores from a POS integration in batch. This operation is asynchronous — the API returns 202 Accepted immediately. The result is delivered via the STORE_PROVISIONING_STATUS webhook with operation: DEPROVISION and status: INACTIVE per store.
Endpoint URL
https://{COUNTRY_DOMAIN}/api/v2/restaurants-integrations-public-api/stores/deprovisioning
{COUNTRY_DOMAIN}: This is your Rappi Country Domain. See the list of Country Domains.
Endpoint Properties
| Response formats | JSON |
| Authentication requirements | Bearer integrator JWT (Authorization) + Bearer merchant JWT (Authorization-Partners) |
Parameters
| Header | Requirement | Description |
|---|---|---|
Authorization | required | Bearer <integrator JWT> — M2M token issued by Auth0 |
Authorization-Partners | required | Bearer <merchant JWT> — OAuth2 token issued by Auth0 |
Request Body
| Attribute | Requirement | Description |
|---|---|---|
storesarray of objects | required | List of stores to deprovision. Maximum 20 per request. |
stores[].storeIdstring | required | Rappi store ID to deprovision |
stores[].integrationIdstring | required | Integration identifier to dissociate the store from (e.g. your-integration-id) |
Status Codes
Sample Request
POST https://api.dev.rappi.com/api/v2/restaurants-integrations-public-api/stores/deprovisioning
This is an example of the request:
{ "stores": [ { "storeId": "10", "integrationId": "your-integration-id" } ] }
Sample Response "Accepted 202"
This is an example of the response "Accepted 202":
{ "batchId": "550e8400-e29b-41d4-a716-446655440000", "accepted": [ { "storeId": "10", "integrationId": "your-integration-id" } ], "rejected": [ { "storeId": "5", "reason": "has_integrated_children", "integratedChildren": ["50", "51"] } ], "autoProvisioned": [] }
| Object | Description |
|---|---|
batchIdstring | Unique identifier for the batch operation. Referenced in the STORE_PROVISIONING_STATUS webhook. |
acceptedarray of objects | Stores accepted for deprovisioning |
accepted[].storeIdstring | Rappi store ID |
accepted[].integrationIdstring | Integration identifier |
rejectedarray of objects | Stores rejected and not deprovisioned |
rejected[].storeIdstring | Rappi store ID |
rejected[].reasonstring | Reason for rejection: not_owned, not_integrated, has_integrated_children |
rejected[].integratedChildrenarray of strings | Present only when reason is has_integrated_children. Lists the child store IDs that must be deprovisioned first. |
autoProvisionedarray of objects | Always empty for deprovisioning |
Sample Response "Unauthorized 401"
This is an example of the response "Unauthorized 401":
{ "message": "Not a valid token" }
| Object | Description |
|---|---|
messagestring | Descriptive error message |
