Shopify
live · conformance passing
Models the Shopify store an ecommerce agent actually calls — products with option-bound variants and decimal-string prices, inventory as the four quantity names across two locations with the arithmetic Shopify enforces between them, orders whose financial and fulfillment statuses are derived from their transactions, fulfillments and refunds rather than stored, an order left partially fulfilled with one line item shipped and the other open, refunds that restock or do not and one refused for the maximum still refundable, and returns that are requested before they are approved — with global ids whose type segment is load-bearing, money as MoneyBag in two currencies, all three of Shopify's error channels in the channel Shopify uses for each, calculated query cost measured against Shopify's own endpoint so THROTTLED arrives at HTTP 200 with a truthful throttleStatus, and a schema pinned from Shopify's own so no field name is invented.
- Category
- Ecommerce
- Sandbox key
- shpat_…
- Verified against
- ShopifyAPI 12.7.0, shopify.dev/admin-graphql-direct-proxy 2026-07
- Replaces
- A shared Shopify development store, or testing against a live shop
Scenarios
Start a sandbox in one of these, or describe the state you want in a sentence and the seeder writes the records it implies.
Stocked store
A catalogue with real inventory across two locations, a few customers, and orders in mixed states, so paginating products or orders takes more than one page on the first try.
Partially fulfilled
An order with one line item shipped and one not, which is the shape an order agent has to reason about and the one no fixture has.
Refund window closed
A delivered, paid order old enough that a refund is refused, so the error path runs on the first attempt instead of never.
Out of stock
A variant at zero with inventoryPolicy DENY and another oversold to a negative quantity, so both branches of an inventory check exist.
Throttled
The calculated-cost bucket starts nearly empty, so backoff code runs on the first query rather than never.
Narrow scopes
A read-only token, so every write is ACCESS_DENIED. The most common real Shopify app failure.
What it models
Records your code can read, write and edit for the life of the sandbox. A route the twin does not model returns a provider-shaped refusal rather than a plausible response.
- shop
- locations
- products
- variants
- inventory_levels
- customers
- draft_orders
- orders
- line_items
- fulfillment_orders
- fulfillments
- refunds
- returns
- discounts
- metafields
- webhook_subscriptions
- bulk_operations
Verified in CI against
- pythonShopifyAPI12.7.0
- graphqlshopify.dev/admin-graphql-direct-proxy2026-07