{
  "openapi": "3.1.0",
  "info": {
    "title": "Slab Dynasty Partner API",
    "version": "2026-07",
    "description": "A Shopify-shaped REST API for listing, pricing and fulfilling graded trading cards. Dated versions in the path; pin one explicitly — there is no 'latest' alias. Full docs, including pagination and error-handling guides, at the developer portal.",
    "contact": {
      "url": "https://developers.slabdynasty.com/apply"
    }
  },
  "externalDocs": {
    "description": "Human-readable reference and changelog",
    "url": "https://developers.slabdynasty.com/docs"
  },
  "servers": [
    {
      "url": "https://api.slabdynasty.com/{version}",
      "variables": {
        "version": {
          "default": "2026-07",
          "enum": [
            "2026-07"
          ],
          "description": "Dated API version. Unrecognised values return 404 unknown_api_version with the supported list."
        }
      }
    }
  ],
  "security": [
    {
      "accessToken": []
    },
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/ping": {
      "get": {
        "operationId": "ping",
        "summary": "Verify a credential end to end",
        "description": "Returns the identity behind the presented key without requiring any scope. This is the first call to make when wiring up an integration: a 200 proves the token, the version segment, the rate limiter and your seller's eligibility all line up. A 401 means the token is wrong or revoked; a 403 means the seller cannot currently transact.",
        "x-required-scope": "none",
        "responses": {
          "200": {
            "description": "Verify a credential end to end",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "ping": {
                      "type": "object",
                      "properties": {
                        "ok": {
                          "type": "boolean"
                        },
                        "api_version": {
                          "type": "string"
                        },
                        "mode": {
                          "type": "string"
                        },
                        "seller_id": {
                          "type": "string"
                        },
                        "key_id": {
                          "type": "string"
                        },
                        "scopes": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "request_id": {
                          "type": "string"
                        },
                        "server_time": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "ping": {
                    "ok": true,
                    "api_version": "2026-07",
                    "mode": "live",
                    "seller_id": "68d0000000000000000000aa",
                    "key_id": "ABCDEFGH12345678",
                    "scopes": [
                      "read_listings"
                    ],
                    "request_id": "req_01J8ZC4Q7N2M5V8W1X3Y6Z9B0C",
                    "server_time": "2026-08-02T12:00:00.000Z"
                  }
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/listings.json": {
      "get": {
        "operationId": "products.list",
        "summary": "List your listings",
        "description": "Your marketplace listings, oldest first. A listing is A CARD PLUS SALE TERMS, and the response is shaped that way: the sale terms (price, status, offers, window) sit on the listing, and the card being sold is nested under card — same field names as the write body's card object, with card.id being the card's own id (the /inventory_items.json record) and card.url its page on the site. An ascending walk appends newly created listings at the tail, so a long-running sync never has rows shuffle underneath its cursor. One variant per listing — even for a lot, where only the whole-lot price is a truthful number. Paging is cursor-based and lives entirely in the Link header: follow rel=\"next\" until it stops appearing. There is no offset paging, because over thousands of listings it drifts as rows sell or expire mid-walk. Shopify-shaped clients can use /products.json instead — a permanent alias serving the identical resource under the {\"products\": […]} envelope.",
        "x-required-scope": "read_listings",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Rows per page, 1–250. Defaults to 50.",
            "schema": {
              "type": "integer",
              "example": 10
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated top-level keys to return, as in `id,title,status`. Omit for the full resource.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_at_min",
            "in": "query",
            "required": false,
            "description": "ISO 8601 date or datetime. Only rows updated at or after this moment are returned — the incremental-sync filter. Walk the full catalog once, then poll with the timestamp of your last successful sync instead of re-walking everything.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page_info",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from the previous response's Link header. Send it verbatim and alone — changing a filter mid-walk is rejected with 400 page_info_filter_mismatch.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List your listings",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              },
              "Link": {
                "description": "Pagination cursors as <url>; rel=\"next\" / rel=\"previous\". Absent on the last page. Request the URL verbatim — never construct a page_info cursor.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "listings": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "status": {
                            "type": "string"
                          },
                          "price": {
                            "type": "string"
                          },
                          "card": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "cert_number": {
                                "type": "string"
                              },
                              "grader": {
                                "type": "string"
                              },
                              "grade": {
                                "type": "string"
                              },
                              "year": {
                                "type": "integer"
                              },
                              "set": {
                                "type": "string"
                              },
                              "category": {
                                "type": "string"
                              }
                            }
                          },
                          "is_lot": {
                            "type": "boolean"
                          },
                          "card_count": {
                            "type": "integer"
                          },
                          "accepts_offers": {
                            "type": "boolean"
                          },
                          "created_at": {
                            "type": "string"
                          },
                          "listed_at": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "listings": [
                    {
                      "id": "68d0000000000000000000ff",
                      "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                      "status": "active",
                      "price": "1250.00",
                      "card": {
                        "id": "68d0000000000000000000cd",
                        "title": "2018 PANINI PRIZM LUKA DONCIC",
                        "cert_number": "82736451",
                        "grader": "PSA",
                        "grade": "10",
                        "year": 2018,
                        "set": "Panini Prizm",
                        "category": "basketball"
                      },
                      "is_lot": false,
                      "card_count": 1,
                      "accepts_offers": true,
                      "created_at": "2026-07-30T18:04:11.000Z",
                      "listed_at": "2026-07-30T18:04:11.000Z"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`invalid_page_info` — The page_info cursor is malformed or was not issued by this API. `page_info_sort_mismatch` — The page_info cursor was issued under a different sort order. `page_info_resource_mismatch` — The page_info cursor was issued by a different endpoint. Cursors are only valid on the endpoint that issued them. `page_info_filter_mismatch` — A filter changed mid-walk. Cursors embed a hash of the filter set, so changing a filter between pages is rejected rather than silently skipping rows. slab_error.changed_params names the offending parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "products.create",
        "summary": "List a card for sale",
        "description": "Creates a marketplace listing for one of your cards, with the same options as the seller's listing form in the app. Name the card ONE of two ways: `inventory_item_id` for a card already in your inventory, or `sku` with a grading cert number — we look the cert up with the grader (send grader: PSA, BGS, SGC or CGC when you know it; omit it and we try all four in that order), create the card in your inventory populated with the grader's own data (title, player, year, set, grade, and for PSA the official slab scans), and list it. If the grader cannot resolve the cert (cert_not_found, or the lookup service is down), send card with your own details plus at least one photo in images — the card is created from them and the listing goes to admin review instead of straight live; grader is required in that case. Cert + price is a complete request; everything else is optional and named after the app's form: title and description, images (up to 5 photo URLs we rehost — the app's listing photos), duration_hours (168, 336, 504 or 720; default 720), accepts_offers (default true) with minimum_offer as the dollar floor, accepts_trades, auto_relist (renew at expiry instead of ending), promoted (the app's Promote Listing: featured placement for an extra 3% seller fee when it sells; one-way, like the app), and scheduled_go_live_at (ISO 8601 — a future instant creates the listing paused until then, with the window counted from go-live). eBay cross-listing and multi-card lots stay dashboard-only. PSA and BGS data is grader-verified and the listing goes live immediately; SGC and CGC data is parsed from a description, so those listings are created pending review. Every dashboard rule — seller standing, card availability, counterfeit blocklist, pending-order reservations, duplicate-listing conflicts, tier caps — applies identically here. The original Shopify-flavored spellings are still accepted as aliases — body_html, the slab_-prefixed field names, the variants[0] wrapper, the {\"product\": …} envelope, and the /products.json path all keep working. Send an Idempotency-Key so a retried create replays the original outcome. Requires the write_listings scope on a live key, which needs write approval.",
        "x-required-scope": "write_listings",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "A unique key per logical write, ideally a UUID. Retrying with the same key replays the original outcome instead of writing twice; reusing one with a different body is rejected with 409 idempotency_key_reuse.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "listing": {
                    "type": "object",
                    "properties": {
                      "title": {
                        "type": "string",
                        "description": "OVERRIDE the listing title. Omit it and the title is the grader's card title (e.g. \"2018 PANINI PRIZM LUKA DONCIC\"). Send it to control exactly what buyers see."
                      },
                      "description": {
                        "type": "string",
                        "description": "Listing description shown to buyers — the Description box in the app's listing form: special features, imperfections, damage, provenance. Plain text; defaults to empty. (body_html is still accepted as an alias.)"
                      },
                      "grader": {
                        "type": "string",
                        "description": "Which grader issued the cert in sku. Send it when you know it; omit it and we try PSA, BGS, SGC, CGC in that order. Ignored with inventory_item_id.",
                        "enum": [
                          "PSA",
                          "BGS",
                          "SGC",
                          "CGC"
                        ]
                      },
                      "duration_hours": {
                        "type": "integer",
                        "description": "How long the listing stays live: 7, 14, 21 or 30 days, in hours.",
                        "enum": [
                          168,
                          336,
                          504,
                          720
                        ],
                        "default": 720
                      },
                      "accepts_offers": {
                        "type": "boolean",
                        "description": "Let buyers send offers below the asking price.",
                        "default": true
                      },
                      "minimum_offer": {
                        "type": "string",
                        "description": "Dollar floor hint for offers; offers under it are discouraged in the app. Only meaningful when accepts_offers is true."
                      },
                      "accepts_trades": {
                        "type": "boolean",
                        "description": "Accept trade proposals as well as cash offers.",
                        "default": false
                      },
                      "auto_relist": {
                        "type": "boolean",
                        "description": "Renew automatically when the window ends instead of deactivating.",
                        "default": false
                      },
                      "scheduled_go_live_at": {
                        "type": "string",
                        "description": "Schedule the listing: a future instant creates it paused (status draft, reason scheduled) and it goes live then, with the duration counted from go-live. Omit to go live immediately."
                      },
                      "sku": {
                        "type": "string",
                        "description": "A grading cert number. We look it up with the grader, create the card in your inventory with the grader's data (title, player, year, set, grade, PSA scans) and list it. Send EITHER sku OR inventory_item_id, never both."
                      },
                      "price": {
                        "type": "string",
                        "description": "Asking price in US dollars, 10–1000000, at most 2 decimals. \"1250.00\" or 1250."
                      },
                      "inventory_item_id": {
                        "description": "The id of a card already in your inventory (from GET /inventory_items.json). Alternative to sku.",
                        "type": "string"
                      },
                      "images": {
                        "description": "Listing photos, as [{\"src\": \"https://…\"}] — the photos the app's listing form uploads. The first is the cover. We download and rehost every photo to our storage before anything is created, so a bad URL fails the whole request cleanly. Only meaningful with a sku create — an existing inventory_item_id keeps the photos it has. Required (≥1) when card details are used, since those photos are what admin review looks at.",
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "src": {
                              "description": "Public https URL of a JPEG, PNG, WEBP or HEIC photo, up to 15MB.",
                              "type": "string"
                            }
                          }
                        }
                      },
                      "card": {
                        "description": "Fallback card details for a sku create, used ONLY when the grader lookup cannot resolve the cert (cert_not_found, or the lookup service is down/at quota). The card is created from these details — plus at least one photo in images — and the listing is created PENDING admin review instead of going live. Requires grader (we won't guess which grader stamped an unverifiable slab). Ignored when the lookup succeeds — grader data wins — and rejected alongside inventory_item_id.",
                        "type": "object",
                        "properties": {
                          "title": {
                            "description": "The card's title, e.g. \"2018 Panini Prizm Luka Doncic #280\". The only required field inside card.",
                            "type": "string"
                          },
                          "player": {
                            "description": "Player or character name as printed on the slab label.",
                            "type": "string"
                          },
                          "year": {
                            "description": "The card's release year as printed on the slab label.",
                            "type": "integer"
                          },
                          "set": {
                            "description": "The set name, e.g. \"Panini Prizm\". Defaults to \"Unknown\".",
                            "type": "string"
                          },
                          "variant": {
                            "description": "Parallel or variety, e.g. \"Silver Prizm\". Defaults to \"Base\".",
                            "type": "string"
                          },
                          "grade": {
                            "description": "The grade as printed on the slab, e.g. \"10\" or \"9.5\".",
                            "type": "string"
                          },
                          "category": {
                            "description": "Card category, e.g. basketball, football, baseball, pokemon. Unrecognized values fall back to non-sport.",
                            "type": "string"
                          }
                        },
                        "required": [
                          "title"
                        ]
                      },
                      "promoted": {
                        "description": "The app's Promote Listing: appears in the Featured section for an extra 3% seller fee when the card sells. One-way — once promoted, a listing cannot be un-promoted, exactly like the app.",
                        "default": false,
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "price"
                    ]
                  }
                }
              },
              "example": {
                "listing": {
                  "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                  "description": "Pack-fresh, centered, ships in a one-touch.",
                  "grader": "PSA",
                  "duration_hours": 720,
                  "accepts_offers": true,
                  "minimum_offer": "1000.00",
                  "accepts_trades": false,
                  "auto_relist": true,
                  "scheduled_go_live_at": "2026-09-01T16:00:00Z",
                  "sku": "82736451",
                  "price": "1250.00"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List a card for sale",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "listing": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "description": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "price": {
                          "type": "string"
                        },
                        "card": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "cert_number": {
                              "type": "string"
                            },
                            "grader": {
                              "type": "string"
                            }
                          }
                        },
                        "url": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "listing": {
                    "id": "68d0000000000000000000ff",
                    "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                    "description": "Pack-fresh, centered, ships in a one-touch.",
                    "status": "active",
                    "price": "1250.00",
                    "card": {
                      "id": "68d0000000000000000000cd",
                      "cert_number": "82736451",
                      "grader": "PSA"
                    },
                    "url": "https://slabdynasty.com/marketplace/listing/2018-panini-prizm-luka-doncic-280-psa-10-68d0000000000000000000ff"
                  }
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "409": {
            "description": "`listing_write_conflict` — The write conflicts with current marketplace state: the card is already actively listed, reserved by a pending order, or the listing has sold. `idempotency_key_reuse` — The Idempotency-Key was already used with a DIFFERENT request payload. Keys pin one request's outcome; reusing one for different work is a client bug. `idempotency_request_in_flight` — A request with this Idempotency-Key is still executing. The retry arrived before the first attempt finished.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "422": {
            "description": "`validation_error` — One or more field values are invalid. The errors object is keyed by field, matching Shopify's 422 shape. `invalid_json` — The request body is not valid JSON. `card_not_listable` — The card itself cannot be listed — sold, archived, shipped, in a trade, or awaiting submission review. slab_error.reason carries the same reason code inventory_levels.json publishes. `cert_not_found` — No grader recognizes this cert number (with grader omitted, PSA, BGS, SGC and CGC were all tried). The card was not created and nothing was listed. Retry with card details plus grader and images to list it from your own details, pending admin review.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/listings/{id}.json": {
      "get": {
        "operationId": "products.get",
        "summary": "Fetch one listing",
        "description": "The same listing resource as the collection endpoint, for a single listing. The trailing .json is optional. A listing belonging to another seller returns the same 404 as one that does not exist — distinguishing them would make this route an oracle for which listing ids exist platform-wide. The response's url field is the listing's page on the site — open or share that rather than reconstructing a path from handle. Also served at /products/{id}.json under the {\"product\": …} envelope.",
        "x-required-scope": "read_listings",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The listing id, as returned in a listing's `id` field.",
            "schema": {
              "type": "string",
              "example": "68d0000000000000000000ff"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated top-level keys to return. Omit for the full resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fetch one listing",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "listing": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "price": {
                          "type": "string"
                        },
                        "card": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string"
                            },
                            "title": {
                              "type": "string"
                            },
                            "cert_number": {
                              "type": "string"
                            },
                            "grader": {
                              "type": "string"
                            },
                            "grade": {
                              "type": "string"
                            },
                            "url": {
                              "type": "string"
                            }
                          }
                        },
                        "unavailable_reason": {},
                        "can_reactivate": {
                          "type": "boolean"
                        },
                        "url": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "listing": {
                    "id": "68d0000000000000000000ff",
                    "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                    "status": "active",
                    "price": "1250.00",
                    "card": {
                      "id": "68d0000000000000000000cd",
                      "title": "2018 PANINI PRIZM LUKA DONCIC",
                      "cert_number": "82736451",
                      "grader": "PSA",
                      "grade": "10",
                      "url": "https://slabdynasty.com/card/basketball-2018-luka-doncic-psa-10-82736451-68d0000000000000000000cd"
                    },
                    "unavailable_reason": null,
                    "can_reactivate": false,
                    "url": "https://slabdynasty.com/marketplace/listing/2018-panini-prizm-luka-doncic-280-psa-10-68d0000000000000000000ff"
                  }
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "404": {
            "description": "`not_found` — No such resource. A resource belonging to another seller returns the same 404 as one that does not exist. `unknown_api_version` — The version segment in the path is not a supported API version. The response body lists every supported version with its status and sunset date.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      },
      "put": {
        "operationId": "products.update",
        "summary": "Edit a listing",
        "description": "Updates price, title, description, status, the listing window (duration_hours), a pending schedule (scheduled_go_live_at), or the offer/trade/relist/promotion settings (accepts_offers, minimum_offer, accepts_trades, auto_relist, promoted). Send only the fields you want to change — omitted fields keep their current values. Status uses Shopify's vocabulary: \"draft\" takes the listing off the marketplace (soft and reversible), \"active\" relists it — re-running the full reactivation rules with a fresh listing window. A listing that has not gone live yet can be rescheduled with a new scheduled_go_live_at, or released immediately with scheduled_go_live_at: null. Content edits to a listing backed by a user-submitted card re-enter review exactly like a dashboard edit; the listing stays live while reviewed. A sold listing can no longer be edited (409). The original Shopify-flavored spellings are still accepted as aliases — body_html, the slab_-prefixed field names, the variants[0] wrapper, the {\"product\": …} envelope, and the /products/{id}.json path all keep working.",
        "x-required-scope": "write_listings",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The listing id, as returned in a listing's `id` field.",
            "schema": {
              "type": "string",
              "example": "68d0000000000000000000ff"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "A unique key per logical write, ideally a UUID. Retrying with the same key replays the original outcome instead of writing twice; reusing one with a different body is rejected with 409 idempotency_key_reuse.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "listing": {
                    "type": "object",
                    "properties": {
                      "title": {
                        "type": "string",
                        "description": "Replace the listing title. Content edits re-enter review; the listing stays live meanwhile."
                      },
                      "accepts_offers": {
                        "type": "boolean",
                        "description": "Turn buyer offers on or off. Turning them off also clears any minimum_offer floor."
                      },
                      "minimum_offer": {
                        "type": "string",
                        "description": "New dollar floor hint for offers, at most the asking price; null clears it. Ignored while offers are off. Cleared automatically if a price edit drops the price below it."
                      },
                      "price": {
                        "type": "string",
                        "description": "New asking price in dollars, 10–1000000, at most 2 decimals."
                      },
                      "description": {
                        "description": "Replace the description shown to buyers. (body_html is still accepted as an alias.)",
                        "type": "string"
                      },
                      "status": {
                        "description": "\"draft\" takes the listing off the marketplace (soft, reversible). \"active\" relists it with a fresh window, re-running every reactivation rule.",
                        "enum": [
                          "active",
                          "draft"
                        ],
                        "type": "string"
                      },
                      "duration_hours": {
                        "description": "New window length in hours. With status active it sizes the fresh window; otherwise it extends the current listing.",
                        "enum": [
                          168,
                          336,
                          504,
                          720
                        ],
                        "type": "integer"
                      },
                      "accepts_trades": {
                        "description": "Accept or stop accepting trade proposals alongside cash offers.",
                        "type": "boolean"
                      },
                      "auto_relist": {
                        "description": "Renew automatically when the window ends instead of deactivating.",
                        "type": "boolean"
                      },
                      "promoted": {
                        "description": "Opt the listing into the app's Promote Listing placement (extra 3% seller fee when it sells). One-way, exactly like the app: sending false for an already-promoted listing changes nothing.",
                        "type": "boolean"
                      },
                      "scheduled_go_live_at": {
                        "description": "For a listing that has not gone live yet: a new future instant reschedules it (the window re-counts from the new go-live); null releases it right now. Rejected once the listing is live — and rejected alongside status, since both decide when the listing is live.",
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "example": {
                "listing": {
                  "title": "2018 Panini Prizm Luka Doncic #280 PSA 10 — PRICE DROP",
                  "accepts_offers": true,
                  "minimum_offer": "950.00",
                  "price": "1195.00"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Edit a listing",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "listing": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "price": {
                          "type": "string"
                        },
                        "minimum_offer": {
                          "type": "string"
                        },
                        "accepts_offers": {
                          "type": "boolean"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "listing": {
                    "id": "68d0000000000000000000ff",
                    "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                    "status": "active",
                    "price": "1195.00",
                    "minimum_offer": "950.00",
                    "accepts_offers": true
                  }
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "404": {
            "description": "`not_found` — No such resource. A resource belonging to another seller returns the same 404 as one that does not exist. `unknown_api_version` — The version segment in the path is not a supported API version. The response body lists every supported version with its status and sunset date.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "409": {
            "description": "`listing_write_conflict` — The write conflicts with current marketplace state: the card is already actively listed, reserved by a pending order, or the listing has sold. `idempotency_key_reuse` — The Idempotency-Key was already used with a DIFFERENT request payload. Keys pin one request's outcome; reusing one for different work is a client bug. `idempotency_request_in_flight` — A request with this Idempotency-Key is still executing. The retry arrived before the first attempt finished.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "422": {
            "description": "`validation_error` — One or more field values are invalid. The errors object is keyed by field, matching Shopify's 422 shape. `invalid_json` — The request body is not valid JSON. `card_not_listable` — The card itself cannot be listed — sold, archived, shipped, in a trade, or awaiting submission review. slab_error.reason carries the same reason code inventory_levels.json publishes. `cert_not_found` — No grader recognizes this cert number (with grader omitted, PSA, BGS, SGC and CGC were all tried). The card was not created and nothing was listed. Retry with card details plus grader and images to list it from your own details, pending admin review.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "products.delete",
        "summary": "Take a listing off the marketplace",
        "description": "A SOFT deactivation, deliberately: the listing reads deactivated_by_seller with can_reactivate true, and PUT {\"listing\": {\"status\": \"active\"}} puts it back with a fresh window. Nothing is destroyed and your card stays in your inventory. Idempotent — deleting an already-inactive listing succeeds. Works on a pending-approval listing too (it is withdrawn). Responds with the listing as it now stands so you can confirm the change — status archived, unavailable_reason deactivated_by_seller.",
        "x-required-scope": "write_listings",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The listing id, as returned in a listing's `id` field.",
            "schema": {
              "type": "string",
              "example": "68d0000000000000000000ff"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "A unique key per logical write, ideally a UUID. Retrying with the same key replays the original outcome instead of writing twice; reusing one with a different body is rejected with 409 idempotency_key_reuse.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Take a listing off the marketplace",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "listing": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "status": {
                          "type": "string"
                        },
                        "unavailable_reason": {
                          "type": "string"
                        },
                        "can_reactivate": {
                          "type": "boolean"
                        },
                        "price": {
                          "type": "string"
                        }
                      }
                    }
                  }
                },
                "example": {
                  "listing": {
                    "id": "68d0000000000000000000ff",
                    "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                    "status": "archived",
                    "unavailable_reason": "deactivated_by_seller",
                    "can_reactivate": true,
                    "price": "1250.00"
                  }
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "404": {
            "description": "`not_found` — No such resource. A resource belonging to another seller returns the same 404 as one that does not exist. `unknown_api_version` — The version segment in the path is not a supported API version. The response body lists every supported version with its status and sunset date.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/orders.json": {
      "get": {
        "operationId": "orders.list",
        "summary": "List your sales as orders",
        "description": "Every sale, in Shopify's order shape, oldest first. This is where a sold listing's story lives: listings.json keeps the listing itself (status archived, slab_unavailable_reason sold), while the order carries the SD-XXXXXX code, what the buyer paid, and how far the sale has progressed — financial_status moves authorized → paid → (partially_)refunded or voided, fulfillment_status flips to fulfilled when the card ships to the buyer, and slab_seller_shipment is YOUR leg: ship_by, tracking, whether our hub has received it and slab_authentication its verification result. One line item per order; a lot is one line priced as a whole, with every member card in slab_inventory_item_ids. Nothing about the buyer is included — you ship to our hub, never to them. Same Link-header cursor walk and updated_at_min delta sync as every other collection.",
        "x-required-scope": "read_orders",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Rows per page, 1–250. Defaults to 50.",
            "schema": {
              "type": "integer",
              "example": 10
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated top-level keys to return, as in `id,title,status`. Omit for the full resource.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_at_min",
            "in": "query",
            "required": false,
            "description": "ISO 8601 date or datetime. Only rows updated at or after this moment are returned — the incremental-sync filter. Walk the full catalog once, then poll with the timestamp of your last successful sync instead of re-walking everything.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page_info",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from the previous response's Link header. Send it verbatim and alone — changing a filter mid-walk is rejected with 400 page_info_filter_mismatch.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "`open`, `closed`, `cancelled` or `any`. Defaults to `any` — unlike Shopify, whose default of `open` would hide every completed sale from an endpoint that exists to show them. `open` is sold and in progress; `closed` is paid out or delivered; `cancelled` covers seller, buyer and timeout cancellations.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List your sales as orders",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              },
              "Link": {
                "description": "Pagination cursors as <url>; rel=\"next\" / rel=\"previous\". Absent on the last page. Request the URL verbatim — never construct a page_info cursor.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "orders": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "order_number": {
                            "type": "integer"
                          },
                          "created_at": {
                            "type": "string"
                          },
                          "closed_at": {},
                          "cancelled_at": {},
                          "financial_status": {
                            "type": "string"
                          },
                          "fulfillment_status": {},
                          "currency": {
                            "type": "string"
                          },
                          "subtotal_price": {
                            "type": "string"
                          },
                          "total_tax": {
                            "type": "string"
                          },
                          "total_price": {
                            "type": "string"
                          },
                          "total_refunded": {
                            "type": "string"
                          },
                          "test": {
                            "type": "boolean"
                          },
                          "line_items": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string"
                                },
                                "product_id": {
                                  "type": "string"
                                },
                                "title": {
                                  "type": "string"
                                },
                                "sku": {
                                  "type": "string"
                                },
                                "quantity": {
                                  "type": "integer"
                                },
                                "price": {
                                  "type": "string"
                                },
                                "inventory_item_id": {
                                  "type": "string"
                                },
                                "slab_inventory_item_ids": {
                                  "type": "array",
                                  "items": {
                                    "type": "string"
                                  }
                                },
                                "slab_is_lot": {
                                  "type": "boolean"
                                }
                              }
                            }
                          },
                          "slab_order_code": {
                            "type": "string"
                          },
                          "slab_sold_at": {
                            "type": "string"
                          },
                          "slab_sale_channel": {
                            "type": "string"
                          },
                          "slab_delivery_method": {
                            "type": "string"
                          },
                          "slab_seller_shipment": {
                            "type": "object",
                            "properties": {
                              "status": {
                                "type": "string"
                              },
                              "tracking_number": {},
                              "ship_by": {
                                "type": "string"
                              },
                              "cancel_after": {
                                "type": "string"
                              },
                              "label_url": {}
                            }
                          },
                          "slab_authentication": {
                            "type": "object",
                            "properties": {
                              "status": {
                                "type": "string"
                              },
                              "completed_at": {}
                            }
                          },
                          "slab_payout": {
                            "type": "object",
                            "properties": {
                              "status": {
                                "type": "string"
                              },
                              "amount": {},
                              "paid_at": {}
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "orders": [
                    {
                      "id": "68d00000000000000000ab01",
                      "name": "SD-7K3M9Q",
                      "order_number": 158892939,
                      "created_at": "2026-08-01T09:15:03.000Z",
                      "closed_at": null,
                      "cancelled_at": null,
                      "financial_status": "authorized",
                      "fulfillment_status": null,
                      "currency": "USD",
                      "subtotal_price": "1250.00",
                      "total_tax": "0.00",
                      "total_price": "1262.50",
                      "total_refunded": "0.00",
                      "test": false,
                      "line_items": [
                        {
                          "id": "li_68d00000000000000000ab01",
                          "product_id": "68d0000000000000000000ff",
                          "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                          "sku": "82736451",
                          "quantity": 1,
                          "price": "1250.00",
                          "inventory_item_id": "68d0000000000000000000cd",
                          "slab_inventory_item_ids": [
                            "68d0000000000000000000cd"
                          ],
                          "slab_is_lot": false
                        }
                      ],
                      "slab_order_code": "SD-7K3M9Q",
                      "slab_sold_at": "2026-08-01T09:15:03.000Z",
                      "slab_sale_channel": "marketplace",
                      "slab_delivery_method": "ship",
                      "slab_seller_shipment": {
                        "status": "pending_shipment",
                        "tracking_number": null,
                        "ship_by": "2026-08-04T09:15:03.000Z",
                        "cancel_after": "2026-08-06T09:15:03.000Z",
                        "label_url": null
                      },
                      "slab_authentication": {
                        "status": "pending",
                        "completed_at": null
                      },
                      "slab_payout": {
                        "status": "pending",
                        "amount": null,
                        "paid_at": null
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`invalid_page_info` — The page_info cursor is malformed or was not issued by this API. `page_info_sort_mismatch` — The page_info cursor was issued under a different sort order. `page_info_resource_mismatch` — The page_info cursor was issued by a different endpoint. Cursors are only valid on the endpoint that issued them. `page_info_filter_mismatch` — A filter changed mid-walk. Cursors embed a hash of the filter set, so changing a filter between pages is rejected rather than silently skipping rows. slab_error.changed_params names the offending parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/orders/{id}.json": {
      "get": {
        "operationId": "orders.get",
        "summary": "Fetch one order",
        "description": "One sale, by order id or by its SD-XXXXXX code — the code is what is printed on the packing slip, so it is accepted directly rather than forcing a list-and-search. An order that belongs to another seller returns the same 404 as one that does not exist.",
        "x-required-scope": "read_orders",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The order id as returned in an order's `id` field, or its `SD-XXXXXX` order code (the `name` field).",
            "schema": {
              "type": "string",
              "example": "SD-7K3M9Q"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated top-level keys to return. Omit for the full resource.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fetch one order",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "order": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "name": {
                          "type": "string"
                        },
                        "order_number": {
                          "type": "integer"
                        },
                        "created_at": {
                          "type": "string"
                        },
                        "closed_at": {
                          "type": "string"
                        },
                        "cancelled_at": {},
                        "financial_status": {
                          "type": "string"
                        },
                        "fulfillment_status": {
                          "type": "string"
                        },
                        "currency": {
                          "type": "string"
                        },
                        "subtotal_price": {
                          "type": "string"
                        },
                        "total_price": {
                          "type": "string"
                        },
                        "total_refunded": {
                          "type": "string"
                        },
                        "test": {
                          "type": "boolean"
                        },
                        "line_items": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "product_id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string"
                              },
                              "sku": {
                                "type": "string"
                              },
                              "quantity": {
                                "type": "integer"
                              },
                              "price": {
                                "type": "string"
                              },
                              "fulfillment_status": {
                                "type": "string"
                              }
                            }
                          }
                        },
                        "slab_order_code": {
                          "type": "string"
                        },
                        "slab_seller_shipment": {
                          "type": "object",
                          "properties": {
                            "status": {
                              "type": "string"
                            },
                            "tracking_number": {
                              "type": "string"
                            },
                            "carrier_code": {
                              "type": "string"
                            },
                            "shipped_at": {
                              "type": "string"
                            },
                            "delivered_to_hub_at": {
                              "type": "string"
                            }
                          }
                        },
                        "slab_authentication": {
                          "type": "object",
                          "properties": {
                            "status": {
                              "type": "string"
                            },
                            "completed_at": {
                              "type": "string"
                            }
                          }
                        },
                        "slab_buyer_delivery": {
                          "type": "object",
                          "properties": {
                            "status": {
                              "type": "string"
                            },
                            "shipped_at": {
                              "type": "string"
                            },
                            "delivered_at": {
                              "type": "string"
                            }
                          }
                        },
                        "slab_payout": {
                          "type": "object",
                          "properties": {
                            "status": {
                              "type": "string"
                            },
                            "amount": {
                              "type": "string"
                            },
                            "platform_fee": {
                              "type": "string"
                            },
                            "paid_at": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "order": {
                    "id": "68d00000000000000000ab01",
                    "name": "SD-7K3M9Q",
                    "order_number": 158892939,
                    "created_at": "2026-08-01T09:15:03.000Z",
                    "closed_at": "2026-08-09T16:40:00.000Z",
                    "cancelled_at": null,
                    "financial_status": "paid",
                    "fulfillment_status": "fulfilled",
                    "currency": "USD",
                    "subtotal_price": "1250.00",
                    "total_price": "1262.50",
                    "total_refunded": "0.00",
                    "test": false,
                    "line_items": [
                      {
                        "id": "li_68d00000000000000000ab01",
                        "product_id": "68d0000000000000000000ff",
                        "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                        "sku": "82736451",
                        "quantity": 1,
                        "price": "1250.00",
                        "fulfillment_status": "fulfilled"
                      }
                    ],
                    "slab_order_code": "SD-7K3M9Q",
                    "slab_seller_shipment": {
                      "status": "delivered",
                      "tracking_number": "9400111899223197428490",
                      "carrier_code": "usps",
                      "shipped_at": "2026-08-02T14:02:11.000Z",
                      "delivered_to_hub_at": "2026-08-05T18:30:00.000Z"
                    },
                    "slab_authentication": {
                      "status": "passed",
                      "completed_at": "2026-08-06T10:12:45.000Z"
                    },
                    "slab_buyer_delivery": {
                      "status": "delivered",
                      "shipped_at": "2026-08-06T20:00:00.000Z",
                      "delivered_at": "2026-08-09T16:40:00.000Z"
                    },
                    "slab_payout": {
                      "status": "paid",
                      "amount": "1137.50",
                      "platform_fee": "112.50",
                      "paid_at": "2026-08-09T16:40:00.000Z"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "404": {
            "description": "`not_found` — No such resource. A resource belonging to another seller returns the same 404 as one that does not exist. `unknown_api_version` — The version segment in the path is not a supported API version. The response body lists every supported version with its status and sunset date.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/inventory_items.json": {
      "get": {
        "operationId": "inventory_items.list",
        "summary": "List your cards as inventory items",
        "description": "The card is the counted unit here, and its grading cert is the sku — so an existing inventory reconciler can point at this endpoint essentially unchanged. Every item is tracked and requires shipping. A card appears whether or not it is currently listed; ask inventory_levels.json whether it is actually sellable.",
        "x-required-scope": "read_inventory",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Rows per page, 1–250. Defaults to 50.",
            "schema": {
              "type": "integer",
              "example": 10
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated top-level keys to return, as in `id,title,status`. Omit for the full resource.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_at_min",
            "in": "query",
            "required": false,
            "description": "ISO 8601 date or datetime. Only rows updated at or after this moment are returned — the incremental-sync filter. Walk the full catalog once, then poll with the timestamp of your last successful sync instead of re-walking everything.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page_info",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from the previous response's Link header. Send it verbatim and alone — changing a filter mid-walk is rejected with 400 page_info_filter_mismatch.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List your cards as inventory items",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              },
              "Link": {
                "description": "Pagination cursors as <url>; rel=\"next\" / rel=\"previous\". Absent on the last page. Request the URL verbatim — never construct a page_info cursor.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "inventory_items": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "sku": {
                            "type": "string"
                          },
                          "cost": {
                            "type": "string"
                          },
                          "tracked": {
                            "type": "boolean"
                          },
                          "requires_shipping": {
                            "type": "boolean"
                          },
                          "created_at": {
                            "type": "string"
                          },
                          "slab_cert_number": {
                            "type": "string"
                          },
                          "slab_grader": {
                            "type": "string"
                          },
                          "slab_grade": {
                            "type": "string"
                          },
                          "slab_player": {
                            "type": "string"
                          },
                          "slab_year": {
                            "type": "string"
                          },
                          "slab_card_set": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "inventory_items": [
                    {
                      "id": "68d0000000000000000000cd",
                      "sku": "82736451",
                      "cost": "900.00",
                      "tracked": true,
                      "requires_shipping": true,
                      "created_at": "2026-06-02T15:22:40.000Z",
                      "slab_cert_number": "82736451",
                      "slab_grader": "PSA",
                      "slab_grade": "10",
                      "slab_player": "Luka Doncic",
                      "slab_year": "2018",
                      "slab_card_set": "Panini Prizm"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`invalid_page_info` — The page_info cursor is malformed or was not issued by this API. `page_info_sort_mismatch` — The page_info cursor was issued under a different sort order. `page_info_resource_mismatch` — The page_info cursor was issued by a different endpoint. Cursors are only valid on the endpoint that issued them. `page_info_filter_mismatch` — A filter changed mid-walk. Cursors embed a hash of the filter set, so changing a filter between pages is rejected rather than silently skipping rows. slab_error.changed_params names the offending parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/inventory_levels.json": {
      "get": {
        "operationId": "inventory_levels.list",
        "summary": "Per-card availability, with the reason",
        "description": "The endpoint a channel reconciler polls. `available` is 0 or 1, and because a zero is lossy — sold, expired, seller-deactivated, flagged, shipped and pulled-into-a-pack all look identical — it always travels with slab_unavailable_reason, slab_reason_detail and slab_can_reactivate. Without those you cannot tell \"gone forever\" from \"relist it\". Lot members are resolved even when the sibling card falls on another page.",
        "x-required-scope": "read_inventory",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Rows per page, 1–250. Defaults to 50.",
            "schema": {
              "type": "integer",
              "example": 10
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated top-level keys to return, as in `id,title,status`. Omit for the full resource.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "updated_at_min",
            "in": "query",
            "required": false,
            "description": "ISO 8601 date or datetime. Only rows updated at or after this moment are returned — the incremental-sync filter. Walk the full catalog once, then poll with the timestamp of your last successful sync instead of re-walking everything.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page_info",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from the previous response's Link header. Send it verbatim and alone — changing a filter mid-walk is rejected with 400 page_info_filter_mismatch.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Per-card availability, with the reason",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              },
              "Link": {
                "description": "Pagination cursors as <url>; rel=\"next\" / rel=\"previous\". Absent on the last page. Request the URL verbatim — never construct a page_info cursor.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "inventory_levels": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "inventory_item_id": {
                            "type": "string"
                          },
                          "location_id": {
                            "type": "string"
                          },
                          "available": {
                            "type": "integer"
                          },
                          "updated_at": {
                            "type": "string"
                          },
                          "slab_unavailable_reason": {
                            "type": "string"
                          },
                          "slab_reason_detail": {
                            "type": "string"
                          },
                          "slab_can_reactivate": {
                            "type": "boolean"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "inventory_levels": [
                    {
                      "inventory_item_id": "68d0000000000000000000cd",
                      "location_id": "loc_vault",
                      "available": 0,
                      "updated_at": "2026-08-01T09:15:03.000Z",
                      "slab_unavailable_reason": "sold",
                      "slab_reason_detail": "Sold on 2026-08-01.",
                      "slab_can_reactivate": false
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "`invalid_page_info` — The page_info cursor is malformed or was not issued by this API. `page_info_sort_mismatch` — The page_info cursor was issued under a different sort order. `page_info_resource_mismatch` — The page_info cursor was issued by a different endpoint. Cursors are only valid on the endpoint that issued them. `page_info_filter_mismatch` — A filter changed mid-walk. Cursors embed a hash of the filter set, so changing a filter between pages is rejected rather than silently skipping rows. slab_error.changed_params names the offending parameters.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/locations.json": {
      "get": {
        "operationId": "locations.list",
        "summary": "The two places a card can be",
        "description": "Reads no database: locations are a pure function of who is asking. A card is either in your hands or at our hub, so unlike Shopify — where locations are merchant-created — neither is writable. connect, set, adjust and DELETE all return 422, and every location says so in slab_writable rather than leaving you to discover it by trying. No addresses are published for either.",
        "x-required-scope": "read_inventory",
        "responses": {
          "200": {
            "description": "The two places a card can be",
            "headers": {
              "X-SlabDynasty-Api-Call-Limit": {
                "description": "Rate-limit usage as used/capacity, in Shopify's shape.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Version": {
                "description": "The API version that served the request.",
                "schema": {
                  "type": "string"
                }
              },
              "X-SlabDynasty-Api-Mode": {
                "description": "live or test, matching the key's environment.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "live",
                    "test"
                  ]
                }
              },
              "X-Request-Id": {
                "description": "Unique request id — quote it when contacting support.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "locations": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "active": {
                            "type": "boolean"
                          },
                          "slab_location_type": {
                            "type": "string"
                          },
                          "slab_seller_controlled": {
                            "type": "boolean"
                          },
                          "slab_writable": {
                            "type": "boolean"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "locations": [
                    {
                      "id": "loc_seller_68d0000000000000000000aa",
                      "name": "Seller Inventory",
                      "active": true,
                      "slab_location_type": "seller",
                      "slab_seller_controlled": true,
                      "slab_writable": false
                    },
                    {
                      "id": "loc_vault",
                      "name": "Slab Dynasty Vault",
                      "country_code": "US",
                      "active": true,
                      "slab_location_type": "vault",
                      "slab_seller_controlled": false,
                      "slab_writable": false
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "`invalid_api_key` — The token is missing, malformed, revoked, expired, or was sent in the query string. Every authentication failure returns this one code — distinguishing them would let a caller probe which keys exist.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "`insufficient_scope` — The key is valid but was not granted the scope this endpoint requires. `test_mode_forbidden` — A test-mode key called a write endpoint on production, where test mode is read-only. `seller_not_approved` — The seller account behind the key has not completed approval, so it cannot transact yet. `seller_frozen` — The seller account behind the key is temporarily frozen. `seller_banned` — The seller account behind the key is not permitted to use the Partner API. `seller_not_found` — The account behind this API key no longer exists. `seller_not_eligible` — The seller account behind the key cannot use the Partner API right now. `seller_paused` — Partner API access for this seller account is temporarily paused by Slab Dynasty. Keys are intact and access resumes automatically when the pause is lifted. `listing_write_forbidden` — The seller account cannot perform this listing write right now — paused, frozen, restricted, capped, or the card is blocklisted. The message carries the specific rule.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "`rate_limited` — The leaky bucket for this credential is full. The bucket is charged before anything else, so hot retry loops keep themselves throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    }
  },
  "webhooks": {
    "products/create": {
      "post": {
        "summary": "Product created",
        "description": "A listing went up — created through the API, the dashboard, or an import. Payload is the product resource as GET /products/{id}.json returns it. Verify the X-SlabDynasty-Webhook-Signature header (t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">) before trusting the payload, and deduplicate on X-SlabDynasty-Webhook-Id — retries reuse it.",
        "parameters": [
          {
            "name": "X-SlabDynasty-Webhook-Topic",
            "in": "header",
            "schema": {
              "type": "string",
              "const": "products/create"
            }
          },
          {
            "name": "X-SlabDynasty-Webhook-Signature",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "t=<unix-seconds>,v1=<hex>"
          },
          {
            "name": "X-SlabDynasty-Webhook-Id",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Stable event id (evt_…) — the receiver's dedupe key."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string"
                  },
                  "vendor": {
                    "type": "string"
                  },
                  "created_at": {
                    "type": "string"
                  },
                  "updated_at": {
                    "type": "string"
                  },
                  "slab_cert_number": {
                    "type": "string"
                  },
                  "slab_grader": {
                    "type": "string"
                  },
                  "slab_grade": {
                    "type": "string"
                  },
                  "slab_unavailable_reason": {},
                  "slab_can_reactivate": {
                    "type": "boolean"
                  },
                  "variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "price": {
                          "type": "string"
                        },
                        "sku": {
                          "type": "string"
                        },
                        "inventory_item_id": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "example": {
                "id": "68d0000000000000000000ff",
                "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                "status": "active",
                "vendor": "68c000000000000000000001",
                "created_at": "2026-08-01T09:15:03.000Z",
                "updated_at": "2026-08-01T09:15:03.000Z",
                "slab_cert_number": "82736451",
                "slab_grader": "PSA",
                "slab_grade": "10",
                "slab_unavailable_reason": null,
                "slab_can_reactivate": false,
                "variants": [
                  {
                    "id": "var_68d0000000000000000000ff",
                    "price": "1250.00",
                    "sku": "82736451",
                    "inventory_item_id": "68d0000000000000000000aa"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged. Return any 2xx within 10 seconds; anything else is retried with backoff."
          }
        }
      }
    },
    "products/update": {
      "post": {
        "summary": "Product updated",
        "description": "A listing changed: price, title, description, offer settings, reactivation, or a status change you didn't make yourself (expiry, admin review). Also fires when a listing sells — status becomes archived with slab_unavailable_reason: \"sold\". Verify the X-SlabDynasty-Webhook-Signature header (t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">) before trusting the payload, and deduplicate on X-SlabDynasty-Webhook-Id — retries reuse it.",
        "parameters": [
          {
            "name": "X-SlabDynasty-Webhook-Topic",
            "in": "header",
            "schema": {
              "type": "string",
              "const": "products/update"
            }
          },
          {
            "name": "X-SlabDynasty-Webhook-Signature",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "t=<unix-seconds>,v1=<hex>"
          },
          {
            "name": "X-SlabDynasty-Webhook-Id",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Stable event id (evt_…) — the receiver's dedupe key."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string"
                  },
                  "vendor": {
                    "type": "string"
                  },
                  "created_at": {
                    "type": "string"
                  },
                  "updated_at": {
                    "type": "string"
                  },
                  "slab_cert_number": {
                    "type": "string"
                  },
                  "slab_grader": {
                    "type": "string"
                  },
                  "slab_grade": {
                    "type": "string"
                  },
                  "slab_unavailable_reason": {},
                  "slab_can_reactivate": {
                    "type": "boolean"
                  },
                  "variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "price": {
                          "type": "string"
                        },
                        "sku": {
                          "type": "string"
                        },
                        "inventory_item_id": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "example": {
                "id": "68d0000000000000000000ff",
                "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                "status": "active",
                "vendor": "68c000000000000000000001",
                "created_at": "2026-08-01T09:15:03.000Z",
                "updated_at": "2026-08-02T11:00:00.000Z",
                "slab_cert_number": "82736451",
                "slab_grader": "PSA",
                "slab_grade": "10",
                "slab_unavailable_reason": null,
                "slab_can_reactivate": false,
                "variants": [
                  {
                    "id": "var_68d0000000000000000000ff",
                    "price": "1250.00",
                    "sku": "82736451",
                    "inventory_item_id": "68d0000000000000000000aa"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged. Return any 2xx within 10 seconds; anything else is retried with backoff."
          }
        }
      }
    },
    "products/delete": {
      "post": {
        "summary": "Product deactivated",
        "description": "A listing was taken off the marketplace (soft deactivation — the same thing DELETE /products/{id}.json does). The payload still serializes the full resource so you can see its final state. Verify the X-SlabDynasty-Webhook-Signature header (t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">) before trusting the payload, and deduplicate on X-SlabDynasty-Webhook-Id — retries reuse it.",
        "parameters": [
          {
            "name": "X-SlabDynasty-Webhook-Topic",
            "in": "header",
            "schema": {
              "type": "string",
              "const": "products/delete"
            }
          },
          {
            "name": "X-SlabDynasty-Webhook-Signature",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "t=<unix-seconds>,v1=<hex>"
          },
          {
            "name": "X-SlabDynasty-Webhook-Id",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Stable event id (evt_…) — the receiver's dedupe key."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "status": {
                    "type": "string"
                  },
                  "vendor": {
                    "type": "string"
                  },
                  "created_at": {
                    "type": "string"
                  },
                  "updated_at": {
                    "type": "string"
                  },
                  "slab_cert_number": {
                    "type": "string"
                  },
                  "slab_grader": {
                    "type": "string"
                  },
                  "slab_grade": {
                    "type": "string"
                  },
                  "slab_unavailable_reason": {
                    "type": "string"
                  },
                  "slab_can_reactivate": {
                    "type": "boolean"
                  },
                  "variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "price": {
                          "type": "string"
                        },
                        "sku": {
                          "type": "string"
                        },
                        "inventory_item_id": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              },
              "example": {
                "id": "68d0000000000000000000ff",
                "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                "status": "draft",
                "vendor": "68c000000000000000000001",
                "created_at": "2026-08-01T09:15:03.000Z",
                "updated_at": "2026-08-01T09:15:03.000Z",
                "slab_cert_number": "82736451",
                "slab_grader": "PSA",
                "slab_grade": "10",
                "slab_unavailable_reason": "deactivated_by_seller",
                "slab_can_reactivate": true,
                "variants": [
                  {
                    "id": "var_68d0000000000000000000ff",
                    "price": "1250.00",
                    "sku": "82736451",
                    "inventory_item_id": "68d0000000000000000000aa"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged. Return any 2xx within 10 seconds; anything else is retried with backoff."
          }
        }
      }
    },
    "orders/create": {
      "post": {
        "summary": "Order created",
        "description": "A buyer bought one of your cards — marketplace checkout, accepted offer, or any other sale path. Payload is the order resource as GET /orders/{id}.json returns it. Verify the X-SlabDynasty-Webhook-Signature header (t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">) before trusting the payload, and deduplicate on X-SlabDynasty-Webhook-Id — retries reuse it.",
        "parameters": [
          {
            "name": "X-SlabDynasty-Webhook-Topic",
            "in": "header",
            "schema": {
              "type": "string",
              "const": "orders/create"
            }
          },
          {
            "name": "X-SlabDynasty-Webhook-Signature",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "t=<unix-seconds>,v1=<hex>"
          },
          {
            "name": "X-SlabDynasty-Webhook-Id",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Stable event id (evt_…) — the receiver's dedupe key."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "order_number": {
                    "type": "integer"
                  },
                  "created_at": {
                    "type": "string"
                  },
                  "cancelled_at": {},
                  "financial_status": {
                    "type": "string"
                  },
                  "fulfillment_status": {},
                  "currency": {
                    "type": "string"
                  },
                  "subtotal_price": {
                    "type": "string"
                  },
                  "total_price": {
                    "type": "string"
                  },
                  "test": {
                    "type": "boolean"
                  },
                  "line_items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "product_id": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "sku": {
                          "type": "string"
                        },
                        "quantity": {
                          "type": "integer"
                        },
                        "price": {
                          "type": "string"
                        },
                        "fulfillment_status": {}
                      }
                    }
                  },
                  "slab_order_code": {
                    "type": "string"
                  }
                }
              },
              "example": {
                "id": "68d00000000000000000ab01",
                "name": "SD-7K3M9Q",
                "order_number": 158892939,
                "created_at": "2026-08-01T09:15:03.000Z",
                "cancelled_at": null,
                "financial_status": "paid",
                "fulfillment_status": null,
                "currency": "USD",
                "subtotal_price": "1250.00",
                "total_price": "1262.50",
                "test": false,
                "line_items": [
                  {
                    "id": "li_68d00000000000000000ab01",
                    "product_id": "68d0000000000000000000ff",
                    "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                    "sku": "82736451",
                    "quantity": 1,
                    "price": "1250.00",
                    "fulfillment_status": null
                  }
                ],
                "slab_order_code": "SD-7K3M9Q"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged. Return any 2xx within 10 seconds; anything else is retried with backoff."
          }
        }
      }
    },
    "orders/updated": {
      "post": {
        "summary": "Order updated",
        "description": "An order's lifecycle moved: shipped to the hub, authenticated, shipped to the buyer, delivered, refunded, payout released. Fires on every status transition, so consume it idempotently. Verify the X-SlabDynasty-Webhook-Signature header (t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">) before trusting the payload, and deduplicate on X-SlabDynasty-Webhook-Id — retries reuse it.",
        "parameters": [
          {
            "name": "X-SlabDynasty-Webhook-Topic",
            "in": "header",
            "schema": {
              "type": "string",
              "const": "orders/updated"
            }
          },
          {
            "name": "X-SlabDynasty-Webhook-Signature",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "t=<unix-seconds>,v1=<hex>"
          },
          {
            "name": "X-SlabDynasty-Webhook-Id",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Stable event id (evt_…) — the receiver's dedupe key."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "order_number": {
                    "type": "integer"
                  },
                  "created_at": {
                    "type": "string"
                  },
                  "cancelled_at": {},
                  "financial_status": {
                    "type": "string"
                  },
                  "fulfillment_status": {
                    "type": "string"
                  },
                  "currency": {
                    "type": "string"
                  },
                  "subtotal_price": {
                    "type": "string"
                  },
                  "total_price": {
                    "type": "string"
                  },
                  "test": {
                    "type": "boolean"
                  },
                  "line_items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "product_id": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "sku": {
                          "type": "string"
                        },
                        "quantity": {
                          "type": "integer"
                        },
                        "price": {
                          "type": "string"
                        },
                        "fulfillment_status": {}
                      }
                    }
                  },
                  "slab_order_code": {
                    "type": "string"
                  },
                  "slab_seller_shipment": {
                    "type": "object",
                    "properties": {
                      "status": {
                        "type": "string"
                      },
                      "tracking_number": {
                        "type": "string"
                      },
                      "carrier_code": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "example": {
                "id": "68d00000000000000000ab01",
                "name": "SD-7K3M9Q",
                "order_number": 158892939,
                "created_at": "2026-08-01T09:15:03.000Z",
                "cancelled_at": null,
                "financial_status": "paid",
                "fulfillment_status": "fulfilled",
                "currency": "USD",
                "subtotal_price": "1250.00",
                "total_price": "1262.50",
                "test": false,
                "line_items": [
                  {
                    "id": "li_68d00000000000000000ab01",
                    "product_id": "68d0000000000000000000ff",
                    "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                    "sku": "82736451",
                    "quantity": 1,
                    "price": "1250.00",
                    "fulfillment_status": null
                  }
                ],
                "slab_order_code": "SD-7K3M9Q",
                "slab_seller_shipment": {
                  "status": "delivered",
                  "tracking_number": "9400111899223197428490",
                  "carrier_code": "usps"
                }
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged. Return any 2xx within 10 seconds; anything else is retried with backoff."
          }
        }
      }
    },
    "orders/cancelled": {
      "post": {
        "summary": "Order cancelled",
        "description": "An order was cancelled or failed — buyer cancellation, admin cancellation, or payment failure. cancelled_at is set and financial_status reflects the refund state. Verify the X-SlabDynasty-Webhook-Signature header (t=<unix>,v1=<hex HMAC-SHA256 of \"t.rawBody\">) before trusting the payload, and deduplicate on X-SlabDynasty-Webhook-Id — retries reuse it.",
        "parameters": [
          {
            "name": "X-SlabDynasty-Webhook-Topic",
            "in": "header",
            "schema": {
              "type": "string",
              "const": "orders/cancelled"
            }
          },
          {
            "name": "X-SlabDynasty-Webhook-Signature",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "t=<unix-seconds>,v1=<hex>"
          },
          {
            "name": "X-SlabDynasty-Webhook-Id",
            "in": "header",
            "schema": {
              "type": "string"
            },
            "description": "Stable event id (evt_…) — the receiver's dedupe key."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "order_number": {
                    "type": "integer"
                  },
                  "created_at": {
                    "type": "string"
                  },
                  "cancelled_at": {
                    "type": "string"
                  },
                  "financial_status": {
                    "type": "string"
                  },
                  "fulfillment_status": {},
                  "currency": {
                    "type": "string"
                  },
                  "subtotal_price": {
                    "type": "string"
                  },
                  "total_price": {
                    "type": "string"
                  },
                  "test": {
                    "type": "boolean"
                  },
                  "line_items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "product_id": {
                          "type": "string"
                        },
                        "title": {
                          "type": "string"
                        },
                        "sku": {
                          "type": "string"
                        },
                        "quantity": {
                          "type": "integer"
                        },
                        "price": {
                          "type": "string"
                        },
                        "fulfillment_status": {}
                      }
                    }
                  },
                  "slab_order_code": {
                    "type": "string"
                  }
                }
              },
              "example": {
                "id": "68d00000000000000000ab01",
                "name": "SD-7K3M9Q",
                "order_number": 158892939,
                "created_at": "2026-08-01T09:15:03.000Z",
                "cancelled_at": "2026-08-02T11:00:00.000Z",
                "financial_status": "refunded",
                "fulfillment_status": null,
                "currency": "USD",
                "subtotal_price": "1250.00",
                "total_price": "1262.50",
                "test": false,
                "line_items": [
                  {
                    "id": "li_68d00000000000000000ab01",
                    "product_id": "68d0000000000000000000ff",
                    "title": "2018 Panini Prizm Luka Doncic #280 PSA 10",
                    "sku": "82736451",
                    "quantity": 1,
                    "price": "1250.00",
                    "fulfillment_status": null
                  }
                ],
                "slab_order_code": "SD-7K3M9Q"
              }
            }
          }
        },
        "responses": {
          "2XX": {
            "description": "Acknowledged. Return any 2xx within 10 seconds; anything else is retried with backoff."
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "accessToken": {
        "type": "apiKey",
        "in": "header",
        "name": "x-slabdynasty-access-token",
        "description": "API key from the Developers tab of an approved seller account. Mirrors Shopify's X-Shopify-Access-Token. Never send credentials in the query string — they are rejected with 401."
      },
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "The same API key as a bearer token."
      }
    },
    "schemas": {
      "ErrorEnvelope": {
        "type": "object",
        "description": "Shopify's two error shapes — a bare string for auth/not-found, a field map for validation — plus an additive slab_error object. Branch on slab_error.code, never on the message.",
        "properties": {
          "errors": {
            "description": "A message string, or a map of field name to messages.",
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            ]
          },
          "slab_error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable code.",
                "enum": [
                  "invalid_api_key",
                  "insufficient_scope",
                  "test_mode_forbidden",
                  "seller_not_approved",
                  "seller_frozen",
                  "seller_banned",
                  "seller_not_found",
                  "seller_not_eligible",
                  "seller_paused",
                  "not_found",
                  "unknown_api_version",
                  "invalid_page_info",
                  "page_info_sort_mismatch",
                  "page_info_resource_mismatch",
                  "page_info_filter_mismatch",
                  "validation_error",
                  "invalid_json",
                  "body_too_large",
                  "listing_write_forbidden",
                  "listing_write_conflict",
                  "card_not_listable",
                  "cert_not_found",
                  "cert_lookup_unavailable",
                  "idempotency_key_reuse",
                  "idempotency_request_in_flight",
                  "rate_limited",
                  "partner_api_writes_disabled",
                  "partner_api_disabled",
                  "internal_error"
                ]
              },
              "request_id": {
                "type": "string",
                "description": "Quote this when contacting support."
              }
            }
          }
        }
      }
    }
  }
}