All twins

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

Live · console.twinbay.ai

Start with one base URL.

Create a sandbox, describe the state you want it in, and point your existing SDK at the hostname it gives you. The sandbox logs each request your agent makes, and you can edit any record it holds.

Start building

A sandbox in under a minute, no card required. Twinbay is free for academic researchers.