Shopify · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Shopify Admin REST API

7 actions 7 updates update extends ../openapi/_original/shopify-admin-rest-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Shopify's API. It is a proposal applied on top of the contract, not a document Shopify publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-api-evangelistx-artifactsx-rate-limitsx-non-standard-status-codessourcex-reversibilityx-reversiblex-irreversible-warning

Targets 3

$.info
$.servers[0]
$.paths['/orders/{order_id}/cancel.json'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Shopify Admin REST API
  version: 1.1.0
extends: ../openapi/_original/shopify-admin-rest-api-openapi.yml
x-provenance:
  generated: '2026-08-27'
  method: generated
  source: >-
    Facts asserted here are drawn from https://shopify.dev/docs/api/usage/versioning.md,
    /limits.md, /response-codes.md and /access-scopes.md (all HTTP 200, fetched 2026-08-27).
    The overlay adds our annotations; the original spec is never mutated.
actions:
- target: $.info
  description: Record the current API version, the legacy status of this surface, and the contract's provenance.
  update:
    x-api-evangelist:
      captured_version: '2025-01'
      current_stable_version: '2026-07'
      surface_status: legacy
      surface_status_note: >-
        The Admin REST API is no longer listed among versioned APIs in Shopify's current versioning
        reference, while the GraphQL Admin, Storefront, Customer Account, Function, Partner, Payments
        Apps and Webhooks APIs all are. Shopify's own guidance is that GraphQL is the recommended API
        for all new development. This spec describes a surface in maintenance.
      recommended_alternative: https://shopify.dev/docs/api/admin-graphql
      version_policy: date-based quarterly, minimum 12-month support, minimum 9-month overlap
      version_header: X-Shopify-API-Version
      fall_forward: true
- target: $.info
  description: Attach the artifacts derived from this contract so a consumer can find them.
  update:
    x-artifacts:
      authentication: ../authentication/shopify-authentication.yml
      scopes: ../scopes/shopify-scopes.yml
      errors: ../errors/shopify-problem-types.yml
      conventions: ../conventions/shopify-conventions.yml
      lifecycle: ../lifecycle/shopify-lifecycle.yml
      rate_limits: ../rate-limits/shopify-rate-limits.yml
      webhooks: ../asyncapi/shopify-webhooks.yml
      data_model: ../data-model/shopify-data-model.yml
      conformance: ../conformance/shopify-conformance.yml
      mcp: ../mcp/shopify-mcp.yml
      tool_crosswalk: ../mcp/shopify-tool-crosswalk.yml
- target: $.servers[0]
  description: Confirm the templated host is correct and name the variable a consumer must bind.
  update:
    x-api-evangelist:
      templated: true
      variable: store
      note: >-
        Correct as published. The host is per-merchant — {store}.myshopify.com — so there is no single
        production base URL to substitute. Replacing this with a fixed host would be a repair into a
        wrong contract.
- target: $.info
  description: Record the runtime rate-limit signal, which is in the body rather than in a header.
  update:
    x-rate-limits:
      method: leaky bucket
      graphql_admin_points_per_second:
        standard: 100
        advanced: 200
        plus: 1000
        enterprise: 2000
      single_query_max_cost: 1000
      max_input_array: 250
      max_pagination_objects: 25000
      count_sentinel: 25001
      exhaustion_status: 429
      body_signal: extensions.cost.throttleStatus
      headers: [Retry-After, X-Shopify-Shop-Api-Call-Limit]
      source: https://shopify.dev/docs/api/usage/limits
- target: $.info
  description: Record the non-standard status codes this API returns that a generic client will mishandle.
  update:
    x-non-standard-status-codes:
    - code: 402
      meaning: The shop is frozen for non-payment. Not an auth or quota problem.
    - code: 423
      meaning: The shop is locked, after repeated rate-limit violations or a fraud/compromise signal. Requires support contact.
    - code: 430
      meaning: Shopify Security Rejection. The request was judged possibly malicious.
    - code: 501
      meaning: Endpoint not available on this shop (for example a Plus-only API on a non-Plus shop).
    - code: 540
      meaning: Endpoint temporarily disabled by Shopify.
    source: https://shopify.dev/docs/api/usage/response-codes
- target: $.info
  description: Record reversibility, since no operation in the spec declares whether it can be taken back.
  update:
    x-reversibility:
      grade: verified
      cancelOrder:
        reversible: false
        note: Shopify states plainly that order cancellation is irreversible; a cancelled order cannot be restored.
        blocked_when: The order has fulfillments (returns 422).
      closeOrder:
        reversible: true
        reversal: reopenOrder
      createFulfillment:
        reversible: true
        reversal: cancelFulfillment
      deleteProduct:
        reversible: false
      deleteOrder:
        reversible: false
      deleteWebhook:
        reversible: false
      detail: ../conventions/shopify-conventions.yml
- target: $.paths['/orders/{order_id}/cancel.json'].post
  description: Mark the single most consequential irreversible operation in this contract.
  update:
    x-reversible: false
    x-irreversible-warning: >-
      Order cancellation cannot be undone. An order that has been cancelled can't be restored to its
      original state. If the payment was authorized but not captured, the hold is released
      automatically even when no refund is requested.
    x-source: https://shopify.dev/docs/api/admin-graphql/latest/mutations/orderCancel