Upsert stores
Stores
Upsert stores
Create or update store configuration from your POS or RMS in Fire spark.
PUT
Upsert stores
Creates or updates one or more stores for the authenticated merchant. Use this endpoint to sync location details, channel availability, fulfillment zones, and payment settings from your POS or RMS into Fire spark.
Each array element is matched by
Each provider requires
id. When no store exists with that id for the merchant, Fire spark creates it. When one already exists, Fire spark updates the writable fields below. Omitted fields keep their current values on update.
Requires an access token with the
stores:write scope. See
Authorize to obtain a token.Headers
| Header | Required | Description |
|---|---|---|
x-brand-id | No | Scope the upsert to stores for this brand. External brand identifier — alphanumeric characters, _, and - only. 1–64 characters. When omitted, all stores for the merchant are eligible. |
Request
Send a JSON array. Each element represents one store. Includeid on every element — it is the stable external identifier from your POS or RMS and the upsert key. It cannot be changed after the store is created.
Request fields
| Field | Type | Description |
|---|---|---|
id | string | Required. External store identifier from your POS or RMS. Alphanumeric characters, _, and - only. 1–64 characters. Unique per merchant. Used as the upsert key. Cannot be changed after the store is created. |
brand_id | string | External brand identifier. Alphanumeric characters, _, and - only. 1–64 characters. Optional — omit or set null for single-brand merchants. |
name | string | Display name. 1–100 characters. |
status | string | ACTIVE or INACTIVE. |
contact | object | Store contact. email and phone (E.164) are required when contact is sent. |
location | object | Physical address and coordinates. |
timezone | string | IANA timezone. 1–100 characters. |
channels | object | Per-channel fulfillment configuration. Each channel includes a fulfillment map keyed by fulfillment type. Can be an empty object {}. |
payments | object | Payment methods and whether the store accepts orders. |
cms_template_id | string (UUID) | CMS template to assign to the store. Omit to keep the current value on update, or set null to remove the template. Must reference an existing template with entity STORES. Required on create when you assign a template. |
cms is read-only on store responses. You can assign or clear a template with
cms_template_id, but you cannot write CMS field values through this endpoint.Nested object validation
contact
contact
| Field | Type | Required | Constraints |
|---|---|---|---|
email | string | Yes | Valid email. |
phone | string | Yes | E.164 format. |
name | string | No | 1–100 characters. |
location
location
| Field | Type | Required | Constraints |
|---|---|---|---|
latitude | number | Yes | -90 to 90. |
longitude | number | Yes | -180 to 180. |
address_line_1 | string | Yes | 3–255 characters. |
address_line_2 | string | No | 3–255 characters. |
city | string | Yes | 1–100 characters. |
country | string | Yes | 1–100 characters. |
postal_code | string | Yes | Numeric only. 4–10 digits. |
business_name | string | Yes | 1–100 characters. |
unit_number | string | No | Numeric only. 1–10 digits. |
channels
channels
Map keyed by channel code. Each value requires
id, uid, name, and fulfillment — a map of fulfillment types for that channel. Each fulfillment entry requires uid, id, type, name, pricing, coverage_zones, and availability.pricing
pricing
| Field | Type | Constraints |
|---|---|---|
is_tax_inclusive | boolean | — |
minimum_order_value | number | ≥ 0. |
maximum_order_value | number | 0–1,000,000. |
tax_rate | number | 0–1. |
fees | array | Each fee requires id, type (FIXED or PERCENTAGE), tax_inclusive, name (localized object), amount (≥ 0), and percentage (0–1). |
availability
availability
| Field | Type | Constraints |
|---|---|---|
status | string | OPEN, CLOSED, or TEMPORARILY_CLOSED. |
schedules | array | null | Weekly hour maps keyed by day name (monday through sunday). Each day requires start_time and end_time as ISO times. null when there is no schedule restriction. |
temporary_closed_reason | object | Localized text keyed by locale. |
temporary_closed_until | string | ISO 8601 datetime with offset. |
fulfillment
fulfillment
Requires
uid, id, type, name, pricing, coverage_zones, and availability. Optional instructions as a localized object.Coverage zones require name and type (RADIUS or POLYGON). When type is RADIUS, include radius_info with latitude, longitude, and radius (0–100,000 meters). When type is POLYGON, include polygon_info.polygon as an array of coordinate points.payments
payments
| Field | Type | Constraints |
|---|---|---|
orderable | boolean | — |
methods | array | Each method requires method (CREDIT, DEBIT, CASH, BANK_TRANSFER, or OTHER), minimum_order_value, maximum_order_value, and providers. |
id (UUID), name, and status (ACTIVE or INACTIVE).Response
Error responses
| Status | Description |
|---|---|
400 | Request body failed validation. Check field constraints above. |
401 | Missing or invalid access token. |
403 | Token does not include the stores:write scope. |
422 | Business rule violation — for example attempting to change a store id, duplicate id for the merchant, or scheduled overrides that conflict with the requested changes. |
Validation error