aov-cart-drawer-help-center
🔌 Store API
Endpoints

Endpoints

Forty-seven endpoints, all relative to https://aov-cart-drawer.firebaseapp.com/store-api/v1. Thirteen are GET and work with any key. The other thirty-four change the cart drawer and need a read and write key.

Every request carries Authorization: Bearer aov_sk_…. See Overview for creating a key and for the response envelope.

Each endpoint is the HTTP form of an MCP tool. The MCP tool column names it and links to the tool guide, which explains what the fields mean. This page covers only the HTTP side: paths, parameters and rules.

EndpointDoesMCP toolKey
GET /contextThe store, its plan and drawer generationget_store_contextRead
GET /configuration-optionsThe styles, block types, locales and markets you can useget_configuration_optionsRead
GET /setup-healthWhether the drawer is installed and workingget_setup_healthRead
GET /drawer-settingsThe saved cart drawer configurationget_drawer_settingsRead
GET /productsSearch productssearch_productsRead
GET /products/variantsVariants of one productget_product_variantsRead
GET /collectionsSearch collectionssearch_collectionsRead
GET /discountsSearch discountssearch_discountsRead
GET /analyticsCart drawer performance for a date rangeget_analyticsRead
GET /templatesThe cart drawer templates (first generation only)get_all_templatesRead
GET /translationsTranslated wording for one languageget_translationsRead
GET /planPlan and access statusget_plan_statusRead
GET /operation-statusThe outcome of an earlier changeget_operation_statusRead
Write endpointsChange settings, blocks, rewards, upsells, wordingOne per endpoint, named belowRead and write

Query parameters on a GET go in the URL. pageSize is 1–50 wherever it is accepted. Where a read returns a page and there is more, the response includes a cursor to pass back unchanged.

GET /store-api/v1 returns this list for the key you call it with — only the endpoints that key can use on this store. Use it when a path here and your store disagree.

Two cart drawer generations

A store's cart drawer is either the first generation (built from templates) or the second generation (built from zone styles). Most endpoints work on both. A few belong to one:

Only on the first generationOnly on the second generation
GET /templatesPATCH /drawer-settings/zone-design
PATCH /drawer-settings/designPUT /drawer-settings/quick-style
POST /template/switchPUT /drawer-settings/zone-style

Calling one on the wrong generation returns TOOL_UNAVAILABLE_FOR_STATE (409), and the message names the generation the store uses. GET /context tells you which one you have before you try.

/context

No parameters. A good first call. What it returns is described under get_store_context.

curl "https://aov-cart-drawer.firebaseapp.com/store-api/v1/context" \
  -H "Authorization: Bearer aov_sk_YOUR_KEY"

/configuration-options

The values the write endpoints accept, so you do not have to guess identifiers. What each domain lists is described under get_configuration_options.

Query:

NameMeaning
domainstyles, blockTypes, locales or markets
kindFor styles: quickStyle, zoneStyle, colorPreset or themeScheme
pageSize1–50
offsetWhere to start in the list

/setup-health

No parameters. What it checks, and the issue codes it returns, are described under get_setup_health.

/drawer-settings

The saved cart drawer configuration, together with its revision. Read it before you write. What each section holds is described under get_drawer_settings.

Query:

NameMeaning
sectionsComma-separated: general, design, content, rewards, upsell, addons, validation
schemaVersion2
pageSize1–50
cursorFrom a previous response
expectedRevisionFail if the configuration is no longer at this revision
blockKeyRead one block
htmlOffsetWhere to continue reading a long custom HTML block

Ask for only the sections you need. The whole configuration is large.

The MCP tool also takes offsets. This API does not: to page through a long list, send the cursor from the previous response.

{"success": true, "data": {"revision": 42, "…": "…"}, "error": null}

/products

Search products by name, handle, vendor or status.

Query:

NameMeaning
nameWords in the title
handleThe exact handle
vendorThe vendor
statusACTIVE, ARCHIVED, DRAFT or UNLISTED
pageSize1–50
cursorFrom a previous response

Send at least one of name, handle, vendor or status. name and handle cannot be combined. What each result contains is described under Finding products, collections and discounts, which also covers /products/variants, /collections and /discounts.

/products/variants

The variants of one product, with their ids.

Query:

NameMeaning
name, handle or productIdExactly one of these
vendor, statusOnly together with name
pageSize, cursorPaging

/collections

Query: name (required), pageSize, cursor.

/discounts

Query: name (required), pageSize.

Only the first 100 eligible discounts are searched, so a store with more may not see every match. Narrow name rather than assuming a missing discount does not exist.

/analytics

Cart drawer performance over a date range. What each figure means is described under get_analytics.

Query:

NameMeaning
startYYYY-MM-DD, in the store's timezone
endYYYY-MM-DD, in the store's timezone

Leave both out for the last 30 days. The range can be at most 400 days. A longer one is refused with INVALID_INPUT and the message "that window is longer than 400 days. Ask for a shorter period."

curl "https://aov-cart-drawer.firebaseapp.com/store-api/v1/analytics?start=2026-08-01&end=2026-08-31" \
  -H "Authorization: Bearer aov_sk_YOUR_KEY"

/templates

First generation only. What it lists is described under get_all_templates.

/translations

The wording the drawer shows in one language.

Query: template and locale (for example fr or pt-BR). What text and translations hold is described under get_translations.

/plan

The store's plan and whether it includes the Store API. No parameters. What the plan state means is described under get_plan_status.

/operation-status

Query: operationId — the 64-character id a write returned. What it reports is described under get_operation_status.

Writing

Write endpoints take a JSON object as the body. Send Content-Type: application/json. The body mirrors the input of the matching MCP tool, named in the MCP tool column of the tables below, so the field meanings are in the MCP tool guide and how every change behaves is in Writing: how every change behaves; this API adds only the HTTP shape.

curl -X PATCH "https://aov-cart-drawer.firebaseapp.com/store-api/v1/reward-bar/settings" \
  -H "Authorization: Bearer aov_sk_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision": 42, "requestId": "reward-bar-2026-08-31"}'

Saved, and what it returns

A write that commits returns:

{"success": true, "data": {"status": "saved", "revision": 43, "changed": ["…"], "operationId": "…"}, "error": null}

revision is the new revision. changed lists which documents were touched. When an operationId is present you can follow it with GET /operation-status?operationId=…. A saved change is then published to the storefront; if publishing is still running or did not finish, POST /configuration-publication/retry with the revision you were given as expectedRevision retries it.

A write that did not commit returns success: false with a 409 (or 422) and the reason in error.code. Nothing was changed. See A write that was not saved.

expectedRevision and requestId

Both are optional on every write, with one exception: POST /configuration-publication/retry requires expectedRevision.

FieldTypeMeaning
expectedRevisioninteger, 0 or moreRefuse if the configuration is no longer at this revision. Protects work saved by someone else.
requestIdstring, up to 255 charactersNames one intended change. Repeating it does not apply the change twice; reusing it for a different change is refused. Upsell changes generate one for you when you leave it out.

Confirming deletions

Removing a reward tier or an upsell rule, and switching template, needs ?confirm=true on the URL. Without it the request is refused and nothing is removed.

Write endpoints

Every one needs a read and write key. Paths marked 1st or 2nd generation work only on that generation.

Settings

EndpointChangesMCP tool
PATCH /drawer-settings/generalGeneral settingsupdate_general_settings
PATCH /drawer-settings/featuresTurn features on or off: cart-drawer, upsell, reward-bar, announcement, shipping-protection — body updates: [{feature, enabled}]update_drawer_features
PATCH /drawer-settings/styleColours, as a map of hex valuesupdate_drawer_style
PATCH /drawer-settings/designDesign (1st generation)update_drawer_design
PATCH /drawer-settings/zone-designZone design (2nd generation)update_zone_design
PUT /drawer-settings/quick-styleApply a quick style by styleId (2nd generation)set_quick_style
PUT /drawer-settings/zone-styleApply a style to one zone by styleId (2nd generation)set_zone_style
PUT /drawer-settings/color-presetApply a colour presetapply_color_preset
POST /template/switch?confirm=trueSwitch template; body template (1st generation)switch_template
PATCH /global-display-settingsWhere the drawer showsupdate_global_display_settings
PATCH /cart-validationCart validation rulesupdate_cart_validation
PATCH /sticky-cartThe sticky cartupdate_sticky_cart
PATCH /wordingDrawer wordingupdate_wording
PATCH /translations/:localeWording for one language, for example fr or pt-BRupdate_translation

Blocks

EndpointChangesMCP tool
POST /blocksAdd a block. Exactly one of blockType, name or html (up to 20,000 characters); optional label, view (fullCart or emptyCart), zone (header, body or footer)add_drawer_block
PATCH /blocks/:blockKeyEdit a custom HTML block: send html, or resetToOriginal: trueupdate_imported_block
DELETE /blocks/:blockKeyRemove a blockremove_drawer_block
PUT /blocks/orderReorder blocks in a view and zone; body order, 1–30 entriesset_block_order
PATCH /blocks/settingsOne block's settings: block, view, enabled and the block's own fieldsupdate_block_settings
PATCH /content-block-settingsContent block settingsupdate_content_block_settings

Rewards

EndpointChangesMCP tool
PATCH /reward-bar/settingsThe reward barupdate_reward_bar_settings
POST /reward-tiersAdd a tier: rewardType, goalValue, title, discount and product fields, goalByMarket, goalBySpecificCurrency, iconadd_reward_tier
PATCH /reward-tiers/:tierIdEdit a tier. A number is treated as a legacy positionupdate_reward_tier
PUT /reward-tiers/orderReorder; body tierIds, 1–20 entriesreorder_reward_tiers
DELETE /reward-tiers/:tierId?confirm=trueRemove a tierremove_reward_tier

Upsell

EndpointChangesMCP tool
PATCH /upsell/settingsUpsell settingsupdate_upsell_settings
POST /upsell-rulesAdd a ruleadd_upsell_rule
PATCH /upsell-rules/:idEdit a ruleupdate_upsell_rule
PUT /upsell-rules/orderReorder; body ruleIdsreorder_upsell_rules
DELETE /upsell-rules/:id?confirm=trueRemove a ruleremove_upsell_rule
PUT /upsell-default-slotsThe default upsell slots and their discount settingsupdate_upsell_default_slots

Add-ons and publishing

EndpointChangesMCP tool
PATCH /gift-wrap/settingsGift wrapupdate_gift_wrap_settings
PATCH /shipping-protection/settingsShipping protectionupdate_shipping_protection_settings
POST /configuration-publication/retryRetry publishing the saved revision; body expectedRevision (required), optional requestIdretry_configuration_publication
⚠️

Write endpoints change the live cart drawer. Read /drawer-settings first, send its revision as expectedRevision, and test an integration on a development store before pointing it at a real one.

The write limits are under Limits. See Errors for what a refused write looks like.

Product
Install AppWebsiteAvada Apps
Resources
DocumentationFAQPrivacy Policy
Company
Avada GroupContact
© 2026 Avada Group. All rights reserved.