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)
productionorsandbox. Leave it asproductionunless 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.
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.
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:Merchant
Merchant
Profile, address, opening hours and settings of the establishment. Always a single record.Key Fields:
id- Unique identifier of the establishmentuuid- Universally unique identifier of the establishmentname- Name of the establishmentslug- Identifier used in the digital menu URL (app.cardapioweb.com/{slug})
description- Free-text description of the establishmentmain_color- Hexadecimal code of the primary brand colorinstagram- Instagram handlewhatsapp- WhatsApp number, with country and area code, unformattedcustom_domain- Custom domain configured for the digital menustatus- Whether the establishment is ACTIVE or INACTIVEcreated_at- When the establishment was createdupdated_at- When the establishment was last modified
address_street- Streetaddress_number- Street numberaddress_address_block- Block, in cities that use block and lot instead of a numberaddress_address_lot- Lot, in cities that use block and lot instead of a numberaddress_neighborhood- Neighborhoodaddress_complement- Unit, floor and similar detailsaddress_reference- Landmark that helps locate the addressaddress_postal_code- Postal code (CEP), unformattedaddress_city- Cityaddress_state- Two-letter state codeaddress_latitude- Latitudeaddress_longitude- Longitude
logo_image- Logo image, with the standard and thumbnail URLsbanner_image- Banner image, with the standard and thumbnail URLsoperation_modes- Which modes the establishment works with: delivery, takeout, onsite, immediate and scheduledopening_hours- Opening hours per weekday, custom dates, forced open/closed state and the establishment’s timezonepayment_methods- Payment methods configured, with their fees and availabilityschedule_setting- Scheduling rules: lead times, slot interval, orders per slot and available hours
Payment Methods
Payment Methods
Payment methods enabled for the establishment. Requires the Partner Key.Key Fields:
id- Unique identifier of the payment methodname- Display name of the payment method, such asPixkind- Type of the payment method:money,credit_card,debit_card,food_voucher,meal_voucherorpix
brands- Card brands accepted for this payment method, each with an id and a name
Customers
Customers
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 customername- Name of the customeremail- Email addressphone_number- Phone number, without the country codeddi- Country calling code of the phone number
birth_date- Date of birthgender- Gender:female,male,non-binaryorothercreated_at- When the customer was registerednotifications_enabled- Whether the customer allows WhatsApp messages from the establishment
loyalty_points- Total loyalty points currently heldloyalty_points_expires_at- When the loyalty point balance expirescashback_balance- Cashback balance availablecashback_expires_at- When the cashback balance expires
Coupons
Coupons
Discount coupons configured by the establishment.Key Fields:
id- Unique identifier of the couponuid- Identifier used to apply the coupon automatically through the digital menu URLcode- Code the customer types at checkout; coupons without a code are available to everyonename- Name of the coupon, shown to the customer
type-free_shipping,percent_discountorflat_discountvalue- Discount amount: a percentage forpercent_discount, an absolute amount forflat_discount, empty forfree_shippingminimum_order_value- Minimum order value required to use the coupon
active- Whether the coupon is activestatus-not_active,not_yet_available,expired,usage_limit_reached,not_availableorvaliduse_limit- Maximum number of times the coupon can be used in totalnew_customers_only- Whether the coupon is restricted to first-time customerscustomer_multi_use- Whether a single customer may use the coupon more than onceavailability_start_time- Time of day from which the coupon can be usedavailability_end_time- Time of day until which the coupon can be usedavailable_days- Weekdays the coupon can be used on; empty means every dayavailable_order_types- Order types the coupon applies to; empty means every typeavailable_from- Date from which the coupon becomes availableexpires_at- Date the coupon expires, valid until 23:59 that day
items- Menu items the discount applies to, each with an id and a name
Reviews
Reviews
Reviews submitted by customers after an order. Incremental on
created_at.Key Fields:id- Unique identifier of the revieworder_id- Order the review refers tocustomer_id- Customer who submitted the reviewcreated_at- When the review was recorded, used as the incremental replication key
rating- Average of the scores given by the customercomment- Free-text comment left by the customer
answers- Answer to each survey question, with the question id, the question text and the answer
Orders
Orders
Completed and cancelled orders, from the order history. Incremental on
created_at.Key Fields:id- Unique identifier of the ordercreated_at- When the order was created, used as the incremental replication keyupdated_at- When the order was last modified
status-closedorcanceledin this streamorder_type-delivery,takeout,onsiteorclosed_table(table or tab)order_timing-immediateorscheduledsales_channel-catalog,store_front_catalog,portal,whatsapp_extensionorifood
Order Details
Order Details
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 orderdisplay_id- Friendlier order number shown to the establishment; not uniquemerchant_id- Establishment the order belongs tocreated_at- When the order was createdupdated_at- When the order was last modified
status- Status of the order, fromwaiting_confirmationthrough toclosedorcanceledorder_type-delivery,takeout,onsiteorclosed_tableorder_timing-immediateorscheduledsales_channel- Channel the order came throughcustomer_origin- Free-text tag identifying which variant of the digital-menu link the order came fromdelivered_by- Who delivers the order:merchant,ifood,ifood_shipping,foody_delivery,food99,keetaoraiqfometable_number- Table or tab number, for table ordersestimated_time- Estimated delivery time in minutes from creationcancellation_reason- Why the order was cancelled
total- Total amount of the orderdelivery_fee- Delivery fee charged, for delivery ordersservice_fee- Service fee charged, for table and tab ordersadditional_fee- Extra fee freely charged by the establishment
external_display_id- Order number in the marketplace; not uniqueexternal_order_id- Unique identifier of the order in the marketplaceexternal_merchant_id- Unique identifier of the store in the marketplaceexternal_merchant_name- Name of the store in the marketplace
customer_id- Customer who placed the order; joins to the Customers streamcustomer_name- Name of the customercustomer_phone- Phone number of the customercustomer_ddi- Country calling code of the customer’s phone number
delivery_address_street- Streetdelivery_address_number- Street numberdelivery_address_address_block- Block, in cities that use block and lot instead of a numberdelivery_address_address_lot- Lot, in cities that use block and lot instead of a numberdelivery_address_neighborhood- Neighborhooddelivery_address_complement- Unit, floor and similar detailsdelivery_address_reference- Landmark that helps locate the addressdelivery_address_postal_code- Postal code (CEP), unformatteddelivery_address_city- Citydelivery_address_state- Two-letter state codedelivery_address_latitude- Latitudedelivery_address_longitude- Longitude
scheduled_date_time_start- Start of the window the order was scheduled forscheduled_date_time_end- End of the window the order was scheduled foruser_id- Establishment user responsible for the order, for table and tab ordersuser_name- Name of that user
fiscal_document- Customer tax id (CPF or CNPJ) for the receipt, unformattedobservation- General notes about the orderinternal_observation- Notes kept for the establishment’s own use
items- Items of the order, each with the catalog item id, quantity, unit and total price, production status and the selected optionsdiscounts- Discounts applied, with their kind, category (coupon, loyalty or other), amount and the coupon or reward involvedpayments- Payments of the order, with the amount, method, online/offline type, status, payment fee and card details
Recent Orders
Recent Orders
Orders modified in the last 8 hours, in any status. Same fields as the Orders stream.Key Fields:
id- Unique identifier of the ordercreated_at- When the order was createdupdated_at- When the order was last modified
status- Any status, including orders still in progressorder_type-delivery,takeout,onsiteorclosed_tableorder_timing-immediateorscheduledsales_channel- Channel the order came through
Catalog Categories
Catalog Categories
Menu categories of the establishment.Key Fields:
id- Unique identifier of the categoryname- Name of the category
description- Description of the categoryindex- Display position of the category in the menustatus-ACTIVE(visible),INACTIVE(hidden) orMISSING(out of stock)
image- Image of the category, with the standard and thumbnail URLsallowed_times- Time ranges the category is available; an empty array means always available
Catalog Items
Catalog Items
Menu items of the establishment.Key Fields:
id- Unique identifier of the itemcategory_id- Category the item belongs toname- Name of the itemexternal_code- Code identifying the item in the establishment’s own systems
description- Description of the itemkind-regular_itemorcombounit_type- Unit of measure:UN,KGorLstatus-ACTIVE,INACTIVEorMISSINGindex- Display position of the item within its categoryhighlighted- Whether the item is featured on the digital menubadge- Highlight badge:best_seller,new_item,recommendedorlimited_editionadults_only- Whether the item is restricted to customers over 18hide_observation_field- Whether the customer notes field is hidden for this itemavailable_for- Where the item is available:delivery,table,internal_table,service_deskorview_only
price- Base price of the itemcost_price- Cost price of the itemauto_calculate_cost_price- Whether the cost price is calculated from the item’s suppliespromotional_price_active- Whether the promotional price is currently activepromotional_price- Promotional price of the itemstock- Quantity available in stockactive_stock_control- Whether stock control is enabled for the item
image- Image of the item, with the standard and thumbnail URLsextra_images- Additional images of the itemallowed_times- Time ranges the item is available; an empty array means always availablepromotional_price_schedules- Days and times the promotional price appliescombo_steps- Steps of the combo, each with its base price and the items available in it
Catalog Option Groups
Catalog Option Groups
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 groupitem_id- Item the group is attached tocategory_id- Category the item belongs toname- Name of the option group
status-ACTIVE,INACTIVEorMISSINGchoice_type-SINGLE(only one option),MULTIPLE(several, no repetition) orSUMMABLE(several, with repetition)price_calculation_type- How the price is calculated with several options selected:SUM,MEAN,MAXorMINminimum_quantity- Minimum number of options the customer must choosemaximum_quantity- Maximum number of options the customer may chooseindex- Display position of the group within the item
Catalog Options
Catalog Options
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 optionoption_group_id- Option group the option was read underitem_id- Item the option group is attached tocategory_id- Category the item belongs toname- Name of the optionexternal_code- Code identifying the option in the establishment’s own systems
description- Description of the optionstatus-ACTIVE,INACTIVEorMISSINGindex- Display position of the option within the groupbadge- Highlight badge:best_seller,new_item,recommendedorlimited_editionmax_quantity- Maximum quantity of this option that can be selected, when the group isSUMMABLE
price- Price of the option inside this groupcost_price- Cost price of the optionstock- Quantity available in stockactive_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.