Skip to main content
Cardápio Web is a Brazilian digital-menu and delivery management platform for restaurants. It handles the online menu, orders placed through the digital menu or through marketplaces such as iFood, table and counter service, customers, loyalty and cashback, coupons and reviews. This connector brings the establishment’s orders, menu, customers, coupons and reviews into your catalog.

Configuring Cardápio Web as a Source

In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Cardápio Web option from the list of connectors. Click Next and you’ll be prompted to add your access.

1. Add account access

You’ll need the establishment’s API token. In the Cardápio Web Portal, go to Configurações → Integrações → API de integração and generate the token. The following configurations are available:
  • API Key: The establishment’s API token, sent to Cardápio Web on every request. One token covers one establishment, so create a separate source for each establishment you want to extract.
  • Partner Key: (Advanced) The integrator token. Only a few endpoints require it, and it has to be requested from Cardápio Web at integracao@cardapioweb.com. Leave it empty unless you have one — see the note below.
  • Environment: (Advanced) production or sandbox. Leave it as production unless you are extracting from a Cardápio Web test establishment.
  • Initial sync date: (Advanced) The earliest date to extract orders and reviews from. Cardápio Web does not accept dates older than 3 years, so earlier values are automatically raised to that limit.
  • Lookback Days: (Advanced) How many days before the last synced date to re-read on each incremental run. Defaults to 7 days — see the note in Order history.
The Payment Methods stream is the only one Cardápio Web requires the integrator token for. Without a Partner Key it is skipped with a message in the run log, and the rest of the extraction runs normally.
Once you’re done, click Next.

2. Select streams

Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.
Tip: The stream can be found more easily by typing its name.
Select the streams and click Next.
Order Details makes one request per order, so a first extraction covering years of history takes considerably longer than the other streams. Select it only if you need item, discount or payment level data.

3. Configure data streams

Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.
  • Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
  • Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
  • Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
  • Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
    • Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched.
    • Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog.
Only Orders and Reviews can be filtered by date on the Cardápio Web side, so they are the streams that support INCREMENTAL. Every other stream is a full snapshot of the current state: the API exposes no date filter for customers, coupons or the menu.
Once you are done configuring, click Next.

4. Configure data source

Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). Optionally, you can define some additional settings:
  • Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.

5. Verify data extraction

Once the source is created, the first extraction will start according to the trigger you defined. You can follow the progress in the Runs tab and find your tables in the Catalog as soon as the run finishes.

How Cardápio Web exposes orders

Cardápio Web has two separate order endpoints, and the connector uses both because neither covers the whole picture on its own.

Order history

The Orders stream reads the order history, which only returns orders that reached a terminal status — completed (closed) or cancelled (canceled). This is the stream to use for sales analysis. Because an order only appears here once it is finished, and that can happen days after it was created, each incremental run re-reads the last few days of orders (the Lookback Days setting, 7 days by default). An order created on Monday and closed on Thursday is therefore still picked up. The history goes back at most 3 years, and Cardápio Web accepts a window of at most 6 months per request, so the connector walks the history in successive windows.

Recent orders

The Recent Orders stream reads the orders modified in the last 8 hours, in any status. It is the only way to see orders that are still in progress, or stuck in an intermediate status. The 8-hour window is fixed by Cardápio Web, so this stream is only complete for sources that run at least three times a day.

Rate limits

Cardápio Web applies its limits per establishment, and the connector paces its requests to stay inside them: Because of the 5-per-minute limit, the first extraction of a long order history is slow by design. The run log reports when the connector is pacing itself.

Streams and Fields

Available streams

The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description.
The four catalog_* streams are all built from a single request to Cardápio Web, so selecting all of them costs no more than selecting one.

Fields by stream

Below you’ll find all available data streams from Cardápio Web and their corresponding fields:
Profile, address, opening hours and settings of the establishment. Always a single record.Key Fields:
  • id - Unique identifier of the establishment
  • uuid - Universally unique identifier of the establishment
  • name - Name of the establishment
  • slug - Identifier used in the digital menu URL (app.cardapioweb.com/{slug})
Profile:
  • description - Free-text description of the establishment
  • main_color - Hexadecimal code of the primary brand color
  • instagram - Instagram handle
  • whatsapp - WhatsApp number, with country and area code, unformatted
  • custom_domain - Custom domain configured for the digital menu
  • status - Whether the establishment is ACTIVE or INACTIVE
  • created_at - When the establishment was created
  • updated_at - When the establishment was last modified
Address:
  • address_street - Street
  • address_number - Street number
  • address_address_block - Block, in cities that use block and lot instead of a number
  • address_address_lot - Lot, in cities that use block and lot instead of a number
  • address_neighborhood - Neighborhood
  • address_complement - Unit, floor and similar details
  • address_reference - Landmark that helps locate the address
  • address_postal_code - Postal code (CEP), unformatted
  • address_city - City
  • address_state - Two-letter state code
  • address_latitude - Latitude
  • address_longitude - Longitude
Nested data (JSON strings):
  • logo_image - Logo image, with the standard and thumbnail URLs
  • banner_image - Banner image, with the standard and thumbnail URLs
  • operation_modes - Which modes the establishment works with: delivery, takeout, onsite, immediate and scheduled
  • opening_hours - Opening hours per weekday, custom dates, forced open/closed state and the establishment’s timezone
  • payment_methods - Payment methods configured, with their fees and availability
  • schedule_setting - Scheduling rules: lead times, slot interval, orders per slot and available hours
Payment methods enabled for the establishment. Requires the Partner Key.Key Fields:
  • id - Unique identifier of the payment method
  • name - Display name of the payment method, such as Pix
  • kind - Type of the payment method: money, credit_card, debit_card, food_voucher, meal_voucher or pix
Nested data (JSON strings):
  • brands - Card brands accepted for this payment method, each with an id and a name
Customers registered at the establishment. Cardápio Web exposes no date filter for customers, so every run reads the whole customer base.Key Fields:
  • id - Unique identifier of the customer
  • name - Name of the customer
  • email - Email address
  • phone_number - Phone number, without the country code
  • ddi - Country calling code of the phone number
Profile:
  • birth_date - Date of birth
  • gender - Gender: female, male, non-binary or other
  • created_at - When the customer was registered
  • notifications_enabled - Whether the customer allows WhatsApp messages from the establishment
Loyalty and cashback:
  • loyalty_points - Total loyalty points currently held
  • loyalty_points_expires_at - When the loyalty point balance expires
  • cashback_balance - Cashback balance available
  • cashback_expires_at - When the cashback balance expires
Discount coupons configured by the establishment.Key Fields:
  • id - Unique identifier of the coupon
  • uid - Identifier used to apply the coupon automatically through the digital menu URL
  • code - Code the customer types at checkout; coupons without a code are available to everyone
  • name - Name of the coupon, shown to the customer
Discount:
  • type - free_shipping, percent_discount or flat_discount
  • value - Discount amount: a percentage for percent_discount, an absolute amount for flat_discount, empty for free_shipping
  • minimum_order_value - Minimum order value required to use the coupon
Availability:
  • active - Whether the coupon is active
  • status - not_active, not_yet_available, expired, usage_limit_reached, not_available or valid
  • use_limit - Maximum number of times the coupon can be used in total
  • new_customers_only - Whether the coupon is restricted to first-time customers
  • customer_multi_use - Whether a single customer may use the coupon more than once
  • availability_start_time - Time of day from which the coupon can be used
  • availability_end_time - Time of day until which the coupon can be used
  • available_days - Weekdays the coupon can be used on; empty means every day
  • available_order_types - Order types the coupon applies to; empty means every type
  • available_from - Date from which the coupon becomes available
  • expires_at - Date the coupon expires, valid until 23:59 that day
Nested data (JSON strings):
  • items - Menu items the discount applies to, each with an id and a name
Reviews submitted by customers after an order. Incremental on created_at.Key Fields:
  • id - Unique identifier of the review
  • order_id - Order the review refers to
  • customer_id - Customer who submitted the review
  • created_at - When the review was recorded, used as the incremental replication key
Review:
  • rating - Average of the scores given by the customer
  • comment - Free-text comment left by the customer
Nested data (JSON strings):
  • answers - Answer to each survey question, with the question id, the question text and the answer
Completed and cancelled orders, from the order history. Incremental on created_at.Key Fields:
  • id - Unique identifier of the order
  • created_at - When the order was created, used as the incremental replication key
  • updated_at - When the order was last modified
Classification:
  • status - closed or canceled in this stream
  • order_type - delivery, takeout, onsite or closed_table (table or tab)
  • order_timing - immediate or scheduled
  • sales_channel - catalog, store_front_catalog, portal, whatsapp_extension or ifood
Full detail of each order. One request per order, so this is the slowest stream on a first extraction.Key Fields:
  • id - Unique identifier of the order
  • display_id - Friendlier order number shown to the establishment; not unique
  • merchant_id - Establishment the order belongs to
  • created_at - When the order was created
  • updated_at - When the order was last modified
Classification:
  • status - Status of the order, from waiting_confirmation through to closed or canceled
  • order_type - delivery, takeout, onsite or closed_table
  • order_timing - immediate or scheduled
  • sales_channel - Channel the order came through
  • customer_origin - Free-text tag identifying which variant of the digital-menu link the order came from
  • delivered_by - Who delivers the order: merchant, ifood, ifood_shipping, foody_delivery, food99, keeta or aiqfome
  • table_number - Table or tab number, for table orders
  • estimated_time - Estimated delivery time in minutes from creation
  • cancellation_reason - Why the order was cancelled
Amounts:
  • total - Total amount of the order
  • delivery_fee - Delivery fee charged, for delivery orders
  • service_fee - Service fee charged, for table and tab orders
  • additional_fee - Extra fee freely charged by the establishment
Marketplace:
  • external_display_id - Order number in the marketplace; not unique
  • external_order_id - Unique identifier of the order in the marketplace
  • external_merchant_id - Unique identifier of the store in the marketplace
  • external_merchant_name - Name of the store in the marketplace
Customer:
  • customer_id - Customer who placed the order; joins to the Customers stream
  • customer_name - Name of the customer
  • customer_phone - Phone number of the customer
  • customer_ddi - Country calling code of the customer’s phone number
Delivery address:
  • delivery_address_street - Street
  • delivery_address_number - Street number
  • delivery_address_address_block - Block, in cities that use block and lot instead of a number
  • delivery_address_address_lot - Lot, in cities that use block and lot instead of a number
  • delivery_address_neighborhood - Neighborhood
  • delivery_address_complement - Unit, floor and similar details
  • delivery_address_reference - Landmark that helps locate the address
  • delivery_address_postal_code - Postal code (CEP), unformatted
  • delivery_address_city - City
  • delivery_address_state - Two-letter state code
  • delivery_address_latitude - Latitude
  • delivery_address_longitude - Longitude
Scheduling and staff:
  • scheduled_date_time_start - Start of the window the order was scheduled for
  • scheduled_date_time_end - End of the window the order was scheduled for
  • user_id - Establishment user responsible for the order, for table and tab orders
  • user_name - Name of that user
Notes:
  • fiscal_document - Customer tax id (CPF or CNPJ) for the receipt, unformatted
  • observation - General notes about the order
  • internal_observation - Notes kept for the establishment’s own use
Nested data (JSON strings):
  • items - Items of the order, each with the catalog item id, quantity, unit and total price, production status and the selected options
  • discounts - Discounts applied, with their kind, category (coupon, loyalty or other), amount and the coupon or reward involved
  • payments - Payments of the order, with the amount, method, online/offline type, status, payment fee and card details
Orders modified in the last 8 hours, in any status. Same fields as the Orders stream.Key Fields:
  • id - Unique identifier of the order
  • created_at - When the order was created
  • updated_at - When the order was last modified
Classification:
  • status - Any status, including orders still in progress
  • order_type - delivery, takeout, onsite or closed_table
  • order_timing - immediate or scheduled
  • sales_channel - Channel the order came through
Menu categories of the establishment.Key Fields:
  • id - Unique identifier of the category
  • name - Name of the category
Category:
  • description - Description of the category
  • index - Display position of the category in the menu
  • status - ACTIVE (visible), INACTIVE (hidden) or MISSING (out of stock)
Nested data (JSON strings):
  • image - Image of the category, with the standard and thumbnail URLs
  • allowed_times - Time ranges the category is available; an empty array means always available
Menu items of the establishment.Key Fields:
  • id - Unique identifier of the item
  • category_id - Category the item belongs to
  • name - Name of the item
  • external_code - Code identifying the item in the establishment’s own systems
Item:
  • description - Description of the item
  • kind - regular_item or combo
  • unit_type - Unit of measure: UN, KG or L
  • status - ACTIVE, INACTIVE or MISSING
  • index - Display position of the item within its category
  • highlighted - Whether the item is featured on the digital menu
  • badge - Highlight badge: best_seller, new_item, recommended or limited_edition
  • adults_only - Whether the item is restricted to customers over 18
  • hide_observation_field - Whether the customer notes field is hidden for this item
  • available_for - Where the item is available: delivery, table, internal_table, service_desk or view_only
Pricing and stock:
  • price - Base price of the item
  • cost_price - Cost price of the item
  • auto_calculate_cost_price - Whether the cost price is calculated from the item’s supplies
  • promotional_price_active - Whether the promotional price is currently active
  • promotional_price - Promotional price of the item
  • stock - Quantity available in stock
  • active_stock_control - Whether stock control is enabled for the item
Nested data (JSON strings):
  • image - Image of the item, with the standard and thumbnail URLs
  • extra_images - Additional images of the item
  • allowed_times - Time ranges the item is available; an empty array means always available
  • promotional_price_schedules - Days and times the promotional price applies
  • combo_steps - Steps of the combo, each with its base price and the items available in it
Add-on groups attached to each menu item. The same group can be attached to several items, so the primary key is item_id plus id.Key Fields:
  • id - Unique identifier of the option group
  • item_id - Item the group is attached to
  • category_id - Category the item belongs to
  • name - Name of the option group
Rules:
  • status - ACTIVE, INACTIVE or MISSING
  • choice_type - SINGLE (only one option), MULTIPLE (several, no repetition) or SUMMABLE (several, with repetition)
  • price_calculation_type - How the price is calculated with several options selected: SUM, MEAN, MAX or MIN
  • minimum_quantity - Minimum number of options the customer must choose
  • maximum_quantity - Maximum number of options the customer may choose
  • index - Display position of the group within the item
Options available within each add-on group. An option can belong to more than one group and be priced differently in each, so the primary key is item_id plus option_group_id plus id.Key Fields:
  • id - Unique identifier of the option
  • option_group_id - Option group the option was read under
  • item_id - Item the option group is attached to
  • category_id - Category the item belongs to
  • name - Name of the option
  • external_code - Code identifying the option in the establishment’s own systems
Option:
  • description - Description of the option
  • status - ACTIVE, INACTIVE or MISSING
  • index - Display position of the option within the group
  • badge - Highlight badge: best_seller, new_item, recommended or limited_edition
  • max_quantity - Maximum quantity of this option that can be selected, when the group is SUMMABLE
Pricing and stock:
  • price - Price of the option inside this group
  • cost_price - Cost price of the option
  • stock - Quantity available in stock
  • active_stock_control - Whether stock control is enabled for the option

Known limitations

  • Inventory and aggregated summaries are not available. Cardápio Web restricts the supplies (insumos) endpoints and the aggregated order summaries to OAuth applications published on the CW App Store; they cannot be read with an establishment API token. Raw orders are available, so the same aggregates can be computed in your catalog.
  • The order history only covers terminal orders. Orders still in progress appear only in the Recent Orders stream, within its 8-hour window.
  • The order history reaches back at most 3 years and is read in windows of at most 6 months.
  • One source per establishment. The API token identifies a single establishment, so multi-store groups need one source per store.