{
  "openapi": "3.1.0",
  "info": {
    "title": "CS2Cap",
    "description": "CS2Cap aggregates and analyzes Counter-Strike 2 marketplace data across multiple providers via a unified REST API.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.cs2c.app",
      "description": "Production"
    }
  ],
  "paths": {
    "/v1/prices": {
      "get": {
        "tags": [
          "Prices"
        ],
        "summary": "List Prices",
        "description": "Return current lowest ask listings.\n\nParameters:\n- `item_id`: Exact item ID (recommended when known).\n- `market_hash_name`: Exact market name.\n- `phase`: Optional Doppler phase filter.\n- `providers`: Optional provider-key enum list (repeat `providers` to pass multiple values).\n- `currency`: Quote currency for prices (default `USD`).\n- `limit`, `offset`: Offset pagination controls.\n\nBehavior:\n- If no filters are provided, returns a broad paginated listing.\n- If `market_hash_name` is Doppler and `phase` is omitted, results aggregate across phases per provider.\n- If `market_hash_name` and `phase` are both provided, only that exact phase is returned.\n- If the item exists in the catalog but none of the queried providers currently has a\n  listing, returns `200` with an empty `items` array.\n\nResponse:\n- `meta`: Applied filters, requested providers, returned providers, currency.\n- `items`: Per-provider lowest ask entries.\n- `pagination`: `limit`, `offset`, `total`, `has_next`, `has_prev`.\n\nRequirements:\n- Valid API key with access to `/v1/prices`.\n- `limit` is capped by your tier.",
        "operationId": "listPrices",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Item ID (fastest lookup). Use /v1/items to search for IDs.",
              "title": "Item Id"
            },
            "description": "Item ID (fastest lookup). Use /v1/items to search for IDs."
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact item name. For Doppler items without phase, aggregates all phases (sums quantities, min price).",
              "title": "Market Hash Name"
            },
            "description": "Exact item name. For Doppler items without phase, aggregates all phases (sums quantities, min price)."
          },
          {
            "name": "phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/PhaseName"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Doppler phase (Phase 1-4, Black Pearl, Emerald, Sapphire, Ruby). Works with or without market_hash_name.",
              "title": "Phase"
            },
            "description": "Doppler phase (Phase 1-4, Black Pearl, Emerald, Sapphire, Ruby). Works with or without market_hash_name."
          },
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AllProviders"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Provider keys to include (enum values). Repeat the query parameter to pass multiple providers, e.g. providers=steam&providers=skinport.",
              "title": "Providers"
            },
            "description": "Provider keys to include (enum values). Repeat the query parameter to pass multiple providers, e.g. providers=steam&providers=skinport."
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Results per page. Defaults to the effective tier cap.",
              "title": "Limit"
            },
            "description": "Results per page. Defaults to the effective tier cap."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Pagination offset",
              "default": 0,
              "title": "Offset"
            },
            "description": "Pagination offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricesPaginatedResponse_MarketItem_"
                },
                "example": {
                  "meta": {
                    "currency": "USD",
                    "filters": {},
                    "providers_queried": [
                      "avanmarket"
                    ]
                  },
                  "items": [
                    {
                      "provider": "avanmarket",
                      "item_id": 2,
                      "market_hash_name": "'Blueberries' Buckshot | NSWC SEAL",
                      "lowest_ask": 2464,
                      "quantity": 7,
                      "link": "https://cs2c.app/r/avanmarket/2",
                      "url": "https://avan.market/en/market/cs/blueberries-buckshot-nswc-seal",
                      "timestamp": "2026-03-04T22:19:37.184309Z",
                      "last_updated": "2026-03-05T05:33:52.037775Z"
                    }
                  ],
                  "pagination": {
                    "limit": 1,
                    "offset": 0,
                    "total": 604373,
                    "has_next": true,
                    "has_prev": false
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                },
                "examples": {
                  "invalidProviderEnum": {
                    "summary": "Unsupported provider key",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "enum",
                          "loc": [
                            "query",
                            "providers",
                            0
                          ],
                          "msg": "Input should be one of the allowed provider keys",
                          "input": "not-a-provider",
                          "ctx": {
                            "expected": "'steam', 'skinport', 'buff163', ..."
                          }
                        }
                      ]
                    }
                  },
                  "limitTooHigh": {
                    "summary": "Limit exceeds maximum",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "less_than_equal",
                          "loc": [
                            "query",
                            "limit"
                          ],
                          "msg": "Input should be less than or equal to 1000",
                          "input": 5000,
                          "ctx": {
                            "le": 1000
                          }
                        }
                      ]
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          },
          "503": {
            "description": "Price data is temporarily unavailable; retry shortly.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Prices data is temporarily unavailable. Try again shortly."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Prices"
        ],
        "summary": "Stream Full Prices Snapshot",
        "description": "Return the full live prices snapshot as an NDJSON stream.\n\nBehavior:\n- pro and quant tiers only\n- requires an API key (not a session token)\n- optional `providers` filter; omit to stream all providers\n- fixed USD output\n- `lowest_ask` values are returned in USD minor units\n- one JSON object per line using the `MarketItem` field set\n- per-API-key rolling 24h quota of successful stream starts (pro: 50, quant: 300, per endpoint)\n- max 1 concurrent stream per API key for this endpoint (409 otherwise)",
        "operationId": "streamFullPricesSnapshot",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AllProviders"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "title": "Providers"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "NDJSON stream of the full live prices snapshot in USD.",
            "headers": {
              "X-Snapshot-Timestamp": {
                "description": "UTC timestamp when the snapshot stream started.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "X-Snapshot-Currency": {
                "description": "Fixed response currency for every streamed row.",
                "schema": {
                  "type": "string",
                  "example": "USD"
                }
              },
              "X-Snapshot-Total": {
                "description": "Total rows in the stream at start, when known.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Limit": {
                "description": "Daily quota of successful stream starts for this endpoint.",
                "schema": {
                  "type": "integer",
                  "example": 300
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining stream starts in the rolling 24h window.",
                "schema": {
                  "type": "integer",
                  "example": 299
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the oldest counted start leaves the window.",
                "schema": {
                  "type": "integer",
                  "example": 86400
                }
              }
            },
            "content": {
              "application/x-ndjson": {
                "schema": {
                  "type": "string"
                },
                "example": "{\"provider\":\"steam\",\"item_id\":1,\"market_hash_name\":\"AK-47 | Redline (Field-Tested)\",\"phase\":null,\"lowest_ask\":2550,\"quantity\":3,\"link\":\"https://cs2c.app/r/steam/1\",\"url\":\"https://steamcommunity.com/market/listings/730/AK-47\",\"timestamp\":\"2026-03-18T12:00:00Z\",\"last_updated\":\"2026-03-18T12:01:00Z\"}\n"
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Bulk snapshot access requires a tier with bulk snapshot capability.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Bulk snapshot access for /v1/prices is not enabled for this tier."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "A streaming request is already active for this API key.",
            "headers": {
              "Retry-After": {
                "description": "Suggested seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "code": "STREAM_ALREADY_ACTIVE",
                  "detail": "A streaming request is already active for this API key."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                },
                "examples": {
                  "invalidProviderEnum": {
                    "summary": "Unsupported provider key",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "enum",
                          "loc": [
                            "query",
                            "providers",
                            0
                          ],
                          "msg": "Input should be one of the allowed provider keys",
                          "input": "not-a-provider",
                          "ctx": {
                            "expected": "'steam', 'skinport', 'buff163', ..."
                          }
                        }
                      ]
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Daily bulk stream quota exhausted for this API key.",
            "headers": {
              "Retry-After": {
                "description": "Seconds until this API key may start another prices stream.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Limit": {
                "description": "Daily quota of successful stream starts for this endpoint.",
                "schema": {
                  "type": "integer",
                  "example": 300
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining stream starts in the rolling 24h window.",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the oldest counted start leaves the window.",
                "schema": {
                  "type": "integer",
                  "example": 1800
                }
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "code": "RATE_LIMIT_STREAM_QUOTA_EXCEEDED",
                  "detail": "Bulk stream quota exhausted for /v1/prices. Limit 300 per 24 hours."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Price data is temporarily unavailable; retry shortly.",
            "content": {
              "application/json": {
                "example": {
                  "code": "PRICES_INDEX_UNAVAILABLE",
                  "detail": "Prices data is temporarily unavailable. Try again shortly."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/prices/history": {
      "get": {
        "tags": [
          "Prices"
        ],
        "summary": "Get Price History",
        "description": "Return historical price snapshots.\n\nParameters:\n- Filters: `item_id`, `market_hash_name`, `phase`, `provider` (singular string key).\n- Time window: `start`, `end` (ISO 8601). If `start` is omitted, the\n  endpoint defaults to the last 14 days of raw history.\n- `currency`: Quote currency (default `USD`).\n- `limit`: Items per page.\n- `cursor`: Opaque cursor from `next_cursor` for the next page.\n\nResponse:\n- `items`: Historical snapshots ordered newest first.\n- `meta`: Applied filters and time window.\n- `pagination`: Standardized pagination footer with cursor state.\n\nRequirements:\n- Valid API key with access to `/v1/prices/history`.\n- `start`/`end` must be valid ISO 8601 timestamps.\n- Requested time range must be within the endpoint retention window.\n- `limit` is capped by your tier.",
        "operationId": "getPriceHistory",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by item ID",
              "title": "Item Id"
            },
            "description": "Filter by item ID"
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by market hash name",
              "title": "Market Hash Name"
            },
            "description": "Filter by market hash name"
          },
          {
            "name": "phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/PhaseName"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by phase (e.g., Phase 1, Ruby, Sapphire)",
              "title": "Phase"
            },
            "description": "Filter by phase (e.g., Phase 1, Ruby, Sapphire)"
          },
          {
            "name": "provider",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AllProviders"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Single provider key for provider-scoped historical snapshots. Use repeated `providers` on `/v1/prices` for live snapshot filtering; `/v1/prices/candles` is composite and intentionally has no provider filter.",
              "title": "Provider"
            },
            "description": "Single provider key for provider-scoped historical snapshots. Use repeated `providers` on `/v1/prices` for live snapshot filtering; `/v1/prices/candles` is composite and intentionally has no provider filter."
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601 timestamp",
              "title": "Start"
            },
            "description": "ISO 8601 timestamp"
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601 timestamp",
              "title": "End"
            },
            "description": "ISO 8601 timestamp"
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Maximum number of results to return. Defaults to the effective tier cap.",
              "title": "Limit"
            },
            "description": "Maximum number of results to return. Defaults to the effective tier cap."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor for keyset pagination. Use next_cursor from previous response. When provided, offset is ignored and keyset pagination is used for O(1) seek.",
              "title": "Cursor"
            },
            "description": "Cursor for keyset pagination. Use next_cursor from previous response. When provided, offset is ignored and keyset pagination is used for O(1) seek."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceSnapshotPage"
                },
                "example": {
                  "meta": {
                    "currency": "USD",
                    "filters": {
                      "item_id": 156,
                      "market_hash_name": "AK-47 | Redline (Field-Tested)",
                      "provider": "steam",
                      "start": "2026-01-20T00:00:00Z",
                      "end": "2026-01-21T00:00:00Z"
                    },
                    "result_count": 2
                  },
                  "items": [
                    {
                      "time": "2026-01-20T12:00:00Z",
                      "item_id": 156,
                      "market_hash_name": "AK-47 | Redline (Field-Tested)",
                      "provider": "Steam Community Market",
                      "price": 2550,
                      "currency": "USD",
                      "quantity": 142
                    },
                    {
                      "time": "2026-01-20T11:55:00Z",
                      "item_id": 156,
                      "market_hash_name": "AK-47 | Redline (Field-Tested)",
                      "provider": "Skinport",
                      "price": 2490,
                      "currency": "USD",
                      "quantity": 37
                    }
                  ],
                  "pagination": {
                    "limit": 100,
                    "has_next": true,
                    "has_prev": false,
                    "next_cursor": "MjAyNi0wMS0yMFQxMTo1NTowMFo%3D"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid timestamp filters or retention window violations.",
            "content": {
              "application/json": {
                "examples": {
                  "invalidStart": {
                    "summary": "Invalid start format",
                    "value": {
                      "detail": "start must be a valid ISO 8601 timestamp"
                    }
                  },
                  "invalidEnd": {
                    "summary": "Invalid end format",
                    "value": {
                      "detail": "end must be a valid ISO 8601 timestamp"
                    }
                  },
                  "startTimeTooOld": {
                    "summary": "start outside retention window",
                    "value": {
                      "detail": "start must be within the last 730 days"
                    }
                  },
                  "endTimeTooOld": {
                    "summary": "end outside retention window",
                    "value": {
                      "detail": "end must be within the last 730 days"
                    }
                  },
                  "endBeforeStart": {
                    "summary": "end precedes start",
                    "value": {
                      "detail": "end must be after start"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/prices/candles": {
      "get": {
        "tags": [
          "Prices"
        ],
        "summary": "Get Price Candles",
        "description": "Return composite OHLCV candle data for a single item across all providers.\n\nParameters:\n- Item filter: `item_id` or `market_hash_name` (one is required).\n- Optional filter: `phase`.\n- Time window: `start`/`end` (ISO 8601) or `lookback` (for example `7d` or `7`).\n- `interval`: `5m`, `1h`, or `1d`.\n- `fill`: Include empty buckets with carry-forward prices when `true`.\n- `currency`: Quote currency (default `USD`).\n\nNotes:\n- If `lookback` is sent with `start` or `end`, `lookback` takes precedence.\n  Lookback requests are aligned to completed candle buckets; `1h` lookback\n  windows use a 15-minute freshness buffer before flooring to the hour.\n- Maximum lookback depends on `interval`:\n  `5m` up to 7 days, `1h` up to 30 days, `1d` up to 365 days.\n- Free tiers are additionally capped by their tier restrictions and default\n  to the maximum allowed window when no explicit lookback is supplied.\n\nResponse:\n- `meta`: Item, provider scope, interval, phase, currency, and effective query-window\n  start/end timestamps.\n- `data`: Candle buckets in oldest-to-newest order\n  (`t`, `o`, `h`, `l`, `c`, `v`, `q`, `providers`).\n  `o`/`c` are the best ask prices at the start/end of the bucket, `l` is the\n  lowest ask, `h` is the highest ask (capped to reduce the impact of outliers), `v`\n  is the estimated trade volume derived from inventory changes, and `q` is the total\n  active listings at bucket end when available. `providers.o`, `providers.h`,\n  `providers.l`, and `providers.c` identify the provider keys contributing the\n  returned open/high/low/close values. For `1d` requests starting more than 30 days\n  back, `v` uses an alternate volume estimate and `q` is `null`.\n\nRequirements:\n- Valid API key with access to `/v1/prices/candles`.\n- `item_id` or `market_hash_name` is required.\n- `start`/`end` must be valid ISO 8601 timestamps.",
        "operationId": "getPriceCandles",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by item ID",
              "title": "Item Id"
            },
            "description": "Filter by item ID"
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by market hash name",
              "title": "Market Hash Name"
            },
            "description": "Filter by market hash name"
          },
          {
            "name": "phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/PhaseName"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by phase (e.g., Phase 1, Ruby, Sapphire)",
              "title": "Phase"
            },
            "description": "Filter by phase (e.g., Phase 1, Ruby, Sapphire)"
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Start timestamp (ISO 8601, inclusive)",
              "title": "Start"
            },
            "description": "Start timestamp (ISO 8601, inclusive)"
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "End timestamp (ISO 8601, exclusive)",
              "title": "End"
            },
            "description": "End timestamp (ISO 8601, exclusive)"
          },
          {
            "name": "lookback",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Lookback window in days. Use `7d` or plain `7`; both mean 7 days and select a completed candle-bucket window. Free tiers cap this at 30 days.",
              "title": "Lookback"
            },
            "description": "Lookback window in days. Use `7d` or plain `7`; both mean 7 days and select a completed candle-bucket window. Free tiers cap this at 30 days.",
            "examples": {
              "stringDays": {
                "summary": "String shorthand",
                "value": "7d"
              },
              "integerDays": {
                "summary": "Plain day count",
                "value": 7
              }
            }
          },
          {
            "name": "interval",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Time bucket interval (default: `1d`)",
              "enum": [
                "1d",
                "1h",
                "5m"
              ],
              "default": "1d",
              "title": "Interval"
            },
            "description": "Time bucket interval (default: `1d`)"
          },
          {
            "name": "fill",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Fill gaps with forward-filled data (default: false for sparse data)",
              "default": false,
              "title": "Fill"
            },
            "description": "Fill gaps with forward-filled data (default: false for sparse data)"
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PriceCandlesPage"
                },
                "example": {
                  "meta": {
                    "item_id": 156,
                    "market_hash_name": "AK-47 | Redline (Field-Tested)",
                    "provider": "All Providers",
                    "currency": "USD",
                    "interval": "1d",
                    "start": "2026-01-20T00:00:00Z",
                    "end": "2026-01-21T00:00:00Z"
                  },
                  "data": [
                    {
                      "t": 1768867200,
                      "o": 2508,
                      "h": 2535,
                      "l": 2460,
                      "c": 2516,
                      "v": 24,
                      "q": 179,
                      "providers": {
                        "o": "csfloat",
                        "h": "steam",
                        "l": "csfloat",
                        "c": "csfloat"
                      }
                    },
                    {
                      "t": 1768953600,
                      "o": 2522,
                      "h": 2560,
                      "l": 2490,
                      "c": 2544,
                      "v": 18,
                      "q": 176,
                      "providers": {
                        "o": "skinport",
                        "h": "skinport",
                        "l": "steam",
                        "c": "skinport"
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid filters, interval, or time window violations.",
            "content": {
              "application/json": {
                "examples": {
                  "missingItemFilter": {
                    "summary": "Missing item filter",
                    "value": {
                      "detail": "item_id or market_hash_name required"
                    }
                  },
                  "invalidInterval": {
                    "summary": "Unsupported interval",
                    "value": {
                      "detail": "interval must be one of: 1d, 1h, 5m"
                    }
                  },
                  "invalidStart": {
                    "summary": "Invalid start timestamp",
                    "value": {
                      "detail": "start must be a valid ISO 8601 timestamp"
                    }
                  },
                  "invalidEnd": {
                    "summary": "Invalid end timestamp",
                    "value": {
                      "detail": "end must be a valid ISO 8601 timestamp"
                    }
                  },
                  "invalidLookback": {
                    "summary": "Invalid lookback format",
                    "value": {
                      "detail": "lookback must be a duration (e.g. '7d', '30d')"
                    }
                  },
                  "startOutsideRetention": {
                    "summary": "Start outside retention window",
                    "value": {
                      "detail": "start must be within last 30 days for 1h interval"
                    }
                  },
                  "endBeforeStart": {
                    "summary": "End precedes start",
                    "value": {
                      "detail": "end must be after start"
                    }
                  },
                  "removedCursor": {
                    "summary": "Removed cursor parameter",
                    "value": {
                      "detail": "cursor parameter has been removed; /v1/prices/candles no longer supports pagination"
                    }
                  },
                  "removedLimit": {
                    "summary": "Removed limit parameter",
                    "value": {
                      "detail": "limit parameter has been removed; /v1/prices/candles no longer supports pagination"
                    }
                  },
                  "legacyProvider": {
                    "summary": "Removed provider parameter",
                    "value": {
                      "detail": "provider parameter has been removed; /v1/prices/candles now returns composite candles across all providers"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/prices/batch": {
      "post": {
        "tags": [
          "Prices"
        ],
        "summary": "Batch Price Lookup",
        "description": "Retrieve current prices for multiple items in a single request.\n\nMaximum 100 items per request. Returns per-item price quotes from each queried provider.\n\nPrices are in minor units of the requested currency (e.g. USD cents when `currency=USD`). Divide by 100 for display.",
        "operationId": "batchPriceLookup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchPricesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchPricesResponse"
                },
                "example": {
                  "meta": {
                    "currency": "USD",
                    "requested_item_count": 2,
                    "found_item_count": 2,
                    "providers_queried": [
                      "steam",
                      "buff163"
                    ],
                    "generated_at": "2026-03-22T12:00:00Z"
                  },
                  "items": [
                    {
                      "item_id": 1,
                      "market_hash_name": "AK-47 | Redline (Field-Tested)",
                      "quotes": [
                        {
                          "provider": "steam",
                          "lowest_ask": 2550,
                          "quantity": 14,
                          "timestamp": "2026-03-22T11:55:00Z",
                          "last_updated": "2026-03-22T11:58:00Z"
                        }
                      ]
                    }
                  ],
                  "items_not_found": []
                }
              }
            }
          },
          "400": {
            "description": "Batch size exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/bids": {
      "get": {
        "tags": [
          "Bids"
        ],
        "summary": "List Bids",
        "description": "Return current highest bids from providers that support buy orders.\n\nFilters:\n- `item_id` or `market_hash_name`\n- optional `phase`\n- `providers` limited to buy-order-capable provider keys\n- `currency`, `limit`, and `offset`\n\nBehavior:\n- requesting a provider that does not support buy orders returns `400`\n\nResponse:\n- `meta` with filters and providers queried\n- flattened per-provider bid rows\n- offset pagination metadata",
        "operationId": "listBids",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by item ID. When provided, canonical market_hash_name and phase from catalog are used and take precedence over request market_hash_name/phase.",
              "title": "Item Id"
            },
            "description": "Filter by item ID. When provided, canonical market_hash_name and phase from catalog are used and take precedence over request market_hash_name/phase."
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional market_hash_name to filter for specific item. Ignored when item_id is provided.",
              "title": "Market Hash Name"
            },
            "description": "Optional market_hash_name to filter for specific item. Ignored when item_id is provided."
          },
          {
            "name": "phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/PhaseName"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional phase to filter (global or combined with market_hash_name). Ignored when item_id is provided.",
              "title": "Phase"
            },
            "description": "Optional phase to filter (global or combined with market_hash_name). Ignored when item_id is provided."
          },
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BuyOrderProvider"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Providers to include (provider-key enum values that support buy orders). Repeat `providers` to pass multiple values.",
              "title": "Providers"
            },
            "description": "Providers to include (provider-key enum values that support buy orders). Repeat `providers` to pass multiple values."
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "description": "Maximum number of results to return.",
              "default": 1000,
              "title": "Limit"
            },
            "description": "Maximum number of results to return."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Number of results to skip for pagination.",
              "default": 0,
              "title": "Offset"
            },
            "description": "Number of results to skip for pagination."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BidsResponse"
                },
                "example": {
                  "meta": {
                    "currency": "USD",
                    "filters": {
                      "phase": "Phase 1",
                      "requested_providers": [
                        "csfloat",
                        "buff163"
                      ]
                    },
                    "providers_queried": [
                      "buff163",
                      "csfloat"
                    ]
                  },
                  "items": [
                    {
                      "provider": "csfloat",
                      "item_id": 32,
                      "market_hash_name": "★ Gut Knife | Doppler (Factory New)",
                      "phase": "Phase 1",
                      "highest_bid": 2550,
                      "num_bids": 5,
                      "timestamp": "2025-12-20T11:00:09.943625+00:00",
                      "last_updated": "2025-12-20T11:05:09.943625+00:00"
                    },
                    {
                      "provider": "buff163",
                      "item_id": 32,
                      "market_hash_name": "★ Gut Knife | Doppler (Factory New)",
                      "phase": "Phase 1",
                      "highest_bid": 2480,
                      "num_bids": 12,
                      "timestamp": "2025-12-20T11:02:15.123456+00:00",
                      "last_updated": "2025-12-20T11:07:15.123456+00:00"
                    }
                  ],
                  "pagination": {
                    "limit": 100,
                    "offset": 0,
                    "total": 5000,
                    "has_next": true,
                    "has_prev": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Providers were specified that do not support buy orders.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Providers do not support buy orders: avanmarket"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                },
                "examples": {
                  "invalidProviderEnum": {
                    "summary": "Unsupported provider key",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "enum",
                          "loc": [
                            "query",
                            "providers",
                            0
                          ],
                          "msg": "Input should be one of the allowed provider keys",
                          "input": "not-a-provider",
                          "ctx": {
                            "expected": "'steam', 'skinport', 'buff163', ..."
                          }
                        }
                      ]
                    }
                  },
                  "limitTooHigh": {
                    "summary": "Limit exceeds maximum",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "less_than_equal",
                          "loc": [
                            "query",
                            "limit"
                          ],
                          "msg": "Input should be less than or equal to 1000",
                          "input": 5000,
                          "ctx": {
                            "le": 1000
                          }
                        }
                      ]
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          },
          "503": {
            "description": "Bid data is temporarily unavailable; retry shortly.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Bids data is temporarily unavailable. Try again shortly."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Bids"
        ],
        "summary": "Stream Full Bids Snapshot",
        "description": "Return the full live bids snapshot as an NDJSON stream.\n\nBehavior:\n- pro and quant tiers only\n- requires an API key (not a session token)\n- optional `providers` filter; omit to stream all providers\n- fixed USD output\n- `highest_bid` values are returned in USD minor units\n- one JSON object per line using the `BuyOrderItem` field set\n- per-API-key rolling 24h quota of successful stream starts (pro: 50, quant: 300, per endpoint)\n- max 1 concurrent stream per API key for this endpoint (409 otherwise)",
        "operationId": "streamFullBidsSnapshot",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BuyOrderProvider"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "title": "Providers"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "NDJSON stream of the full live bids snapshot in USD.",
            "headers": {
              "X-Snapshot-Timestamp": {
                "description": "UTC timestamp when the snapshot stream started.",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "X-Snapshot-Currency": {
                "description": "Fixed response currency for every streamed row.",
                "schema": {
                  "type": "string",
                  "example": "USD"
                }
              },
              "X-Snapshot-Total": {
                "description": "Total rows in the stream at start, when known.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Limit": {
                "description": "Daily quota of successful stream starts for this endpoint.",
                "schema": {
                  "type": "integer",
                  "example": 300
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining stream starts in the rolling 24h window.",
                "schema": {
                  "type": "integer",
                  "example": 299
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the oldest counted start leaves the window.",
                "schema": {
                  "type": "integer",
                  "example": 86400
                }
              }
            },
            "content": {
              "application/x-ndjson": {
                "schema": {
                  "type": "string"
                },
                "example": "{\"provider\":\"buff163\",\"item_id\":120,\"market_hash_name\":\"AK-47 | Redline (Field-Tested)\",\"phase\":null,\"highest_bid\":2450,\"num_bids\":5,\"timestamp\":\"2026-03-18T12:00:00Z\",\"last_updated\":\"2026-03-18T12:01:00Z\"}\n"
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Bulk snapshot access requires a tier with bulk snapshot capability.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Bulk snapshot access for /v1/bids is not enabled for this tier."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "A streaming request is already active for this API key.",
            "headers": {
              "Retry-After": {
                "description": "Suggested seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "code": "STREAM_ALREADY_ACTIVE",
                  "detail": "A streaming request is already active for this API key."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                },
                "examples": {
                  "invalidProviderEnum": {
                    "summary": "Unsupported provider key",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "enum",
                          "loc": [
                            "query",
                            "providers",
                            0
                          ],
                          "msg": "Input should be one of the allowed provider keys",
                          "input": "not-a-provider",
                          "ctx": {
                            "expected": "'steam', 'skinport', 'buff163', ..."
                          }
                        }
                      ]
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Daily bulk stream quota exhausted for this API key.",
            "headers": {
              "Retry-After": {
                "description": "Seconds until this API key may start another bids stream.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Limit": {
                "description": "Daily quota of successful stream starts for this endpoint.",
                "schema": {
                  "type": "integer",
                  "example": 300
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining stream starts in the rolling 24h window.",
                "schema": {
                  "type": "integer",
                  "example": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the oldest counted start leaves the window.",
                "schema": {
                  "type": "integer",
                  "example": 1800
                }
              }
            },
            "content": {
              "application/json": {
                "example": {
                  "code": "RATE_LIMIT_STREAM_QUOTA_EXCEEDED",
                  "detail": "Bulk stream quota exhausted for /v1/bids. Limit 300 per 24 hours."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Bid data is temporarily unavailable; retry shortly.",
            "content": {
              "application/json": {
                "example": {
                  "code": "BIDS_INDEX_UNAVAILABLE",
                  "detail": "Bids data is temporarily unavailable. Try again shortly."
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/bids/batch": {
      "post": {
        "tags": [
          "Bids"
        ],
        "summary": "Batch Bid Lookup",
        "description": "Retrieve current bids (buy orders) for multiple items in a single request.\n\nMaximum 100 items per request. Returns per-item bid quotes from each queried provider.\n\nPrices are in minor units of the requested currency (e.g. USD cents when `currency=USD`). Divide by 100 for display.",
        "operationId": "batchBidLookup",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchBidsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchBidsResponse"
                },
                "example": {
                  "meta": {
                    "currency": "USD",
                    "requested_item_count": 2,
                    "found_item_count": 2,
                    "providers_queried": [
                      "steam",
                      "buff163"
                    ],
                    "generated_at": "2026-03-22T12:00:00Z"
                  },
                  "items": [
                    {
                      "item_id": 1,
                      "market_hash_name": "AK-47 | Redline (Field-Tested)",
                      "quotes": [
                        {
                          "provider": "steam",
                          "highest_bid": 2200,
                          "num_bids": 42,
                          "timestamp": "2026-03-22T11:55:00Z",
                          "last_updated": "2026-03-22T11:58:00Z"
                        }
                      ]
                    }
                  ],
                  "items_not_found": []
                }
              }
            }
          },
          "400": {
            "description": "Batch size exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/feed/prices": {
      "get": {
        "tags": [
          "Feed"
        ],
        "summary": "Subscribe to Price Changes",
        "description": "Server-Sent Events stream of price changes. An event fires when a provider refresh detects added, updated, or removed listings — granularity follows each provider's refresh cadence (typically minutes).\n\nDelivery is fire-and-forget: events during a disconnect are not replayed. On reconnect, fetch current state from `/v1/prices`, then resume the stream.\n\nPrices are in USD minor units (2550 = $25.50).",
        "operationId": "subscribeToPriceChanges",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AllProviders"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Providers to stream. Repeatable, e.g. providers=steam&providers=csfloat. Omit to stream all providers.",
              "title": "Providers"
            },
            "description": "Providers to stream. Repeatable, e.g. providers=steam&providers=csfloat. Omit to stream all providers."
          },
          {
            "name": "item_ids",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "integer"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional exact catalog item_id filter (repeatable). Prefer this over `market_hash_names` for phased items (Dopplers, Gammas), where one market_hash_name covers every phase but each phase has its own item_id.",
              "title": "Item Ids"
            },
            "description": "Optional exact catalog item_id filter (repeatable). Prefer this over `market_hash_names` for phased items (Dopplers, Gammas), where one market_hash_name covers every phase but each phase has its own item_id."
          },
          {
            "name": "market_hash_names",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional market_hash_name filter (repeatable). For a phased item this matches every phase; use `item_ids` to select one. Combined with `item_ids`, at most 100 values per connection.",
              "title": "Market Hash Names"
            },
            "description": "Optional market_hash_name filter (repeatable). For a phased item this matches every phase; use `item_ids` to select one. Combined with `item_ids`, at most 100 values per connection."
          }
        ],
        "responses": {
          "200": {
            "description": "Server-Sent Events stream. Emits a `ready` event on connect, then `prices.changed`/`bids.changed` events with changed items, plus `: ping` heartbeat comments roughly every 20 seconds.",
            "content": {
              "application/json": {
                "schema": {}
              },
              "text/event-stream": {
                "schema": {
                  "type": "string"
                },
                "example": "event: ready\ndata: {\"providers\":[\"csfloat\"],\"item_ids_filter_count\":0,\"market_hash_names_filter_count\":0}\n\nevent: prices.changed\ndata: {\"provider\":\"csfloat\",\"seen_at\":\"2026-07-12T14:03:22+00:00\",\"items\":[{\"item_id\":4821,\"market_hash_name\":\"AK-47 | Redline (Field-Tested)\",\"price\":2550,\"qty\":3,\"phase\":null,\"change\":\"updated\"}]}\n\n"
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/feed/bids": {
      "get": {
        "tags": [
          "Feed"
        ],
        "summary": "Subscribe to Bid Changes",
        "description": "Server-Sent Events stream of buy-order (bid) changes. Same contract as `/v1/feed/prices`: fire-and-forget delivery, provider-cadence granularity, USD minor units. On reconnect, fetch current state from `/v1/bids`.",
        "operationId": "subscribeToBidChanges",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AllProviders"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Providers to stream. Repeatable, e.g. providers=steam&providers=csfloat. Omit to stream all providers.",
              "title": "Providers"
            },
            "description": "Providers to stream. Repeatable, e.g. providers=steam&providers=csfloat. Omit to stream all providers."
          },
          {
            "name": "item_ids",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "integer"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional exact catalog item_id filter (repeatable). Prefer this over `market_hash_names` for phased items (Dopplers, Gammas), where one market_hash_name covers every phase but each phase has its own item_id.",
              "title": "Item Ids"
            },
            "description": "Optional exact catalog item_id filter (repeatable). Prefer this over `market_hash_names` for phased items (Dopplers, Gammas), where one market_hash_name covers every phase but each phase has its own item_id."
          },
          {
            "name": "market_hash_names",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional market_hash_name filter (repeatable). For a phased item this matches every phase; use `item_ids` to select one. Combined with `item_ids`, at most 100 values per connection.",
              "title": "Market Hash Names"
            },
            "description": "Optional market_hash_name filter (repeatable). For a phased item this matches every phase; use `item_ids` to select one. Combined with `item_ids`, at most 100 values per connection."
          }
        ],
        "responses": {
          "200": {
            "description": "Server-Sent Events stream. Emits a `ready` event on connect, then `prices.changed`/`bids.changed` events with changed items, plus `: ping` heartbeat comments roughly every 20 seconds.",
            "content": {
              "application/json": {
                "schema": {}
              },
              "text/event-stream": {
                "schema": {
                  "type": "string"
                },
                "example": "event: ready\ndata: {\"providers\":[\"csfloat\"],\"item_ids_filter_count\":0,\"market_hash_names_filter_count\":0}\n\nevent: prices.changed\ndata: {\"provider\":\"csfloat\",\"seen_at\":\"2026-07-12T14:03:22+00:00\",\"items\":[{\"item_id\":4821,\"market_hash_name\":\"AK-47 | Redline (Field-Tested)\",\"price\":2550,\"qty\":3,\"phase\":null,\"change\":\"updated\"}]}\n\n"
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/sales": {
      "get": {
        "tags": [
          "Sales"
        ],
        "summary": "List Recent Sales",
        "description": "Return recent sales across providers with recent-sales support, newest first.\n\nWith no filters, returns the global recent-sales feed ordered by sale time (most recent first). Optional filters narrow the results:\n- `item_id` — restrict to one catalog item (its canonical market_hash_name and phase are used)\n- `market_hash_name` (+ optional `phase`) — restrict to one item by name\n- `min_float` / `max_float` — restrict to a float-value range\n- `paint_seed` — restrict to an exact paint seed\n- `stickers` — restrict to sales containing every requested sticker name\n- `charms` — restrict to sales containing one requested charm name\n- `providers` — restrict to specific sales-capable provider keys\n- `currency` — convert values to the target currency\n\nPagination:\n- `limit` sets the page size (max 100 for Pro, 1000 for Quant)\n- pass `cursor` from the previous response's `pagination.next_cursor` to page through results; `pagination.total` is `-1` (count intentionally skipped)\n\nBehavior:\n- recent-sales data refreshes roughly once every 24 hours, so results may be up to a day old\n\nResponse:\n- request metadata, providers queried, and a cursor pagination footer\n- sales records with sticker, charm, and inspect metadata when available",
        "operationId": "listRecentSales",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by item ID. When provided, canonical market_hash_name and phase from catalog are used and take precedence over request market_hash_name/phase.",
              "title": "Item Id"
            },
            "description": "Filter by item ID. When provided, canonical market_hash_name and phase from catalog are used and take precedence over request market_hash_name/phase."
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional market_hash_name to filter for specific item. Ignored when item_id is provided.",
              "title": "Market Hash Name"
            },
            "description": "Optional market_hash_name to filter for specific item. Ignored when item_id is provided."
          },
          {
            "name": "phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/PhaseName"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional phase to filter (global or combined with market_hash_name). Ignored when item_id is provided.",
              "title": "Phase"
            },
            "description": "Optional phase to filter (global or combined with market_hash_name). Ignored when item_id is provided."
          },
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RecentSalesProvider"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Providers to include (provider-key enum values that support recent sales). Repeat `providers` to pass multiple values.",
              "title": "Providers"
            },
            "description": "Providers to include (provider-key enum values that support recent sales). Repeat `providers` to pass multiple values."
          },
          {
            "name": "min_float",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive minimum item float value to include.",
              "title": "Min Float"
            },
            "description": "Inclusive minimum item float value to include."
          },
          {
            "name": "max_float",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "number",
                  "maximum": 1,
                  "minimum": 0
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive maximum item float value to include.",
              "title": "Max Float"
            },
            "description": "Inclusive maximum item float value to include."
          },
          {
            "name": "paint_seed",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "maximum": 1000,
                  "minimum": 0
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact paint seed value to include.",
              "title": "Paint Seed"
            },
            "description": "Exact paint seed value to include."
          },
          {
            "name": "stickers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Sticker names to require on returned sales. Repeat `stickers` to require multiple names.",
              "title": "Stickers"
            },
            "description": "Sticker names to require on returned sales. Repeat `stickers` to require multiple names."
          },
          {
            "name": "charms",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Charm/keychain name to require on returned sales. Only one `charms` value is allowed.",
              "title": "Charms"
            },
            "description": "Charm/keychain name to require on returned sales. Only one `charms` value is allowed."
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency. Any ISO 4217 code supported by `/v1/fx` (see `/v1/fx` for the full list). Invalid codes return a 422 validation error."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Maximum number of results to return. Defaults to the effective tier cap.",
              "title": "Limit"
            },
            "description": "Maximum number of results to return. Defaults to the effective tier cap."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Cursor for keyset pagination. Use next_cursor from previous response. When provided, offset is ignored and keyset pagination is used for O(1) seek.",
              "title": "Cursor"
            },
            "description": "Cursor for keyset pagination. Use next_cursor from previous response. When provided, offset is ignored and keyset pagination is used for O(1) seek."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesHistoryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid cursor or unsupported provider selection.",
            "content": {
              "application/json": {
                "examples": {
                  "invalidCursor": {
                    "summary": "Invalid pagination cursor",
                    "value": {
                      "code": "BAD_REQUEST",
                      "detail": "invalid cursor format"
                    }
                  },
                  "unsupportedSalesProvider": {
                    "summary": "Unsupported sales provider",
                    "value": {
                      "code": "BAD_REQUEST",
                      "detail": "Providers do not support Recent Sales: avanmarket"
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested item could not be resolved.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Item not found: AK-47 | Redline (Field-Tested)"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                },
                "examples": {
                  "invalidProviderEnum": {
                    "summary": "Unsupported provider key",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "enum",
                          "loc": [
                            "query",
                            "providers",
                            0
                          ],
                          "msg": "Input should be one of the allowed provider keys",
                          "input": "not-a-provider",
                          "ctx": {
                            "expected": "'steam', 'skinport', 'buff163', ..."
                          }
                        }
                      ]
                    }
                  },
                  "limitTooHigh": {
                    "summary": "Limit exceeds maximum",
                    "value": {
                      "code": "VALIDATION_ERROR",
                      "detail": [
                        {
                          "type": "less_than_equal",
                          "loc": [
                            "query",
                            "limit"
                          ],
                          "msg": "Input should be less than or equal to 50",
                          "input": 5000,
                          "ctx": {
                            "le": 50
                          }
                        }
                      ]
                    }
                  }
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/fx": {
      "get": {
        "tags": [
          "Foreign Exchange"
        ],
        "summary": "Get FX Rates",
        "description": "Return latest foreign exchange rates.\n\nParameters:\n- None.\n\nResponse:\n- `timestamp`: ISO timestamp for the rates snapshot.\n- `rates`: Map of currency code to value relative to 1 USD (USD -> X).\n\nRequirements:\n- Valid API key with access to `/v1/fx`.",
        "operationId": "getFxRates",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FXRatesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/items": {
      "get": {
        "tags": [
          "Items"
        ],
        "summary": "List Items",
        "description": "Search the normalized CS2 item catalog with exact-match metadata filters and simple result limiting.\n\nFilters:\n- exact catalog fields such as `item_type`, `collection`, `rarity_name`, and `phase`\n- `q` for case-insensitive substring search on `market_hash_name`\n- `item_id` for direct lookup\n\nResult limiting:\n- provide `limit` to cap the number of returned items (still tier-capped, endpoint max 1000)\n- omit `limit` to return all matched items in one response, for any tier\n\nResponse:\n- item records with canonical identifiers and item metadata\n- optional `supply` values when available\n\nUse this endpoint to resolve canonical `item_id` values before calling prices, bids, sales, or market analytics.",
        "operationId": "listItems",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Search by name substring (case-insensitive)",
              "title": "Q"
            },
            "description": "Search by name substring (case-insensitive)"
          },
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact item ID match",
              "title": "Item Id"
            },
            "description": "Exact item ID match"
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact market hash name match (case-insensitive)",
              "title": "Market Hash Name"
            },
            "description": "Exact market hash name match (case-insensitive)"
          },
          {
            "name": "item_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact item type match (case-insensitive). Options: Weapon, Sticker, Sticker Slab, Graffiti, Charm, Crate, Music Kit, Patch, Collectible, Agent, Key, Tool.",
              "enum": [
                "Agent",
                "Charm",
                "Collectible",
                "Crate",
                "Graffiti",
                "Key",
                "Music Kit",
                "Patch",
                "Sticker",
                "Sticker Slab",
                "Tool",
                "Weapon"
              ],
              "title": "Item Type"
            },
            "description": "Exact item type match (case-insensitive). Options: Weapon, Sticker, Sticker Slab, Graffiti, Charm, Crate, Music Kit, Patch, Collectible, Agent, Key, Tool."
          },
          {
            "name": "item_subtype",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact item subtype match (case-insensitive). Options depend on item_type (for example Equipment, Gloves, Rifles, Autograph, Team, Capsule Key).",
              "enum": [
                "Counter-Terrorist",
                "Terrorist",
                "Normal",
                "Highlight Reel",
                "Operation Pass",
                "Tournament Pass",
                "Pin",
                "Autograph Capsule",
                "Collection Package",
                "Gift",
                "Graffiti Box",
                "Music Kit Box",
                "Patch Capsule",
                "Pins Capsule",
                "Souvenir Highlight",
                "Souvenir Package",
                "Sticker Capsule",
                "Weapon Case",
                "Event",
                "Other",
                "Team",
                "Capsule Key",
                "Case Key",
                "StatTrak",
                "Autograph",
                "Equipment",
                "Gloves",
                "Heavy",
                "Knives",
                "Pistols",
                "Rifles",
                "SMGs"
              ],
              "title": "Item Subtype"
            },
            "description": "Exact item subtype match (case-insensitive). Options depend on item_type (for example Equipment, Gloves, Rifles, Autograph, Team, Capsule Key)."
          },
          {
            "name": "weapon_type",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact weapon type match (case-insensitive)",
              "enum": [
                "Wearable",
                "Knife",
                "Assault Rifle",
                "Sniper Rifle",
                "Shotgun",
                "Machinegun",
                "SMG",
                "Pistol"
              ],
              "title": "Weapon Type"
            },
            "description": "Exact weapon type match (case-insensitive)"
          },
          {
            "name": "base_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact base name match (case-insensitive)",
              "title": "Base Name"
            },
            "description": "Exact base name match (case-insensitive)"
          },
          {
            "name": "skin_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact skin name match (case-insensitive)",
              "title": "Skin Name"
            },
            "description": "Exact skin name match (case-insensitive)"
          },
          {
            "name": "wear_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact wear name match (case-insensitive)",
              "enum": [
                "Factory New",
                "Minimal Wear",
                "Field-Tested",
                "Well-Worn",
                "Battle-Scarred"
              ],
              "title": "Wear Name"
            },
            "description": "Exact wear name match (case-insensitive)"
          },
          {
            "name": "phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact phase match (case-insensitive)",
              "enum": [
                "Phase 1",
                "Phase 2",
                "Phase 3",
                "Phase 4",
                "Ruby",
                "Sapphire",
                "Black Pearl",
                "Emerald"
              ],
              "title": "Phase"
            },
            "description": "Exact phase match (case-insensitive)"
          },
          {
            "name": "collection",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact collection match (case-insensitive)",
              "enum": [
                "2025 Community Sticker Collection",
                "Antwerp 2022 Stickers",
                "Atlanta 2017 Graffiti",
                "Atlanta 2017 Stickers",
                "Austin 2025 Highlight",
                "Austin 2025 Stickers",
                "Berlin 2019 Stickers",
                "Boston 2018 Graffiti",
                "Boston 2018 Stickers",
                "Broken Fang Agents",
                "Budapest 2025 Highlight",
                "Budapest 2025 Stickers",
                "Character Craft Sticker Pack",
                "Cluj-Napoca 2015 Stickers",
                "Cologne 2014 Stickers",
                "Cologne 2015 Stickers",
                "Cologne 2016 Stickers",
                "Community Sticker Series 2",
                "Community Sticker Series 3",
                "Community Sticker Series 4",
                "Community Sticker Series 5",
                "Community Stickers Halloween 2014",
                "Copenhagen 2024 Stickers",
                "CS:GO Graffiti #2 Collection",
                "CS:GO Graffiti #3 Collection",
                "CS:GO Graffiti Collection",
                "Dr Boom Charm Collection",
                "DreamHack 2014 Stickers",
                "Elemental Craft Sticker Pack",
                "Katowice 2014 Stickers",
                "Katowice 2015 Stickers",
                "Katowice 2019 Stickers",
                "Krakow 2017 Graffiti",
                "Krakow 2017 Stickers",
                "Limited Edition Item",
                "London 2018 Graffiti",
                "London 2018 Stickers",
                "Metal Skill Group Patch Collection",
                "Missing Link Charm Collection",
                "Missing Link Community Charm Collection",
                "MLG Columbus 2016 Stickers",
                "Operation Riptide Agents",
                "Operation Riptide Patch Collection",
                "Paris 2023 Stickers",
                "Rio 2022 Stickers",
                "Shanghai 2024 Stickers",
                "Shattered Web Agents",
                "Small Arms Charm Collection",
                "Stockholm 2021 Stickers",
                "Sugarface 2 Sticker Collection",
                "The 2018 Inferno Collection",
                "The 2018 Nuke Collection",
                "The 2021 Dust 2 Collection",
                "The 2021 Mirage Collection",
                "The 2021 Train Collection",
                "The 2021 Vertigo Collection",
                "The Achroma Collection",
                "The Alpha Collection",
                "The Ancient Collection",
                "The Anubis Collection",
                "The Arms Deal 2 Collection",
                "The Arms Deal 3 Collection",
                "The Arms Deal Collection",
                "The Ascent Collection",
                "The Assault Collection",
                "The Aztec Collection",
                "The Baggage Collection",
                "The Bank Collection",
                "The Blacksite Collection",
                "The Boreal Collection",
                "The Bravo Collection",
                "The Breakout Collection",
                "The Cache Collection",
                "The Canals Collection",
                "The Chop Shop Collection",
                "The Chroma 2 Collection",
                "The Chroma 3 Collection",
                "The Chroma Collection",
                "The Clutch Collection",
                "The Cobblestone Collection",
                "The Control Collection",
                "The CS20 Collection",
                "The Danger Zone Collection",
                "The Dreams & Nightmares Collection",
                "The Dust 2 Collection",
                "The Dust Collection",
                "The eSports 2013 Collection",
                "The eSports 2013 Winter Collection",
                "The eSports 2014 Summer Collection",
                "The Falchion Collection",
                "The Fever Collection",
                "The Fracture Collection",
                "The Gallery Collection",
                "The Gamma 2 Collection",
                "The Gamma Collection",
                "The Genesis Collection",
                "The Glove Collection",
                "The Gods and Monsters Collection",
                "The Graphic Design Collection",
                "The Harlequin Collection",
                "The Havoc Collection",
                "The Horizon Collection",
                "The Huntsman Collection",
                "The Inferno Collection",
                "The Italy Collection",
                "The Kilowatt Collection",
                "The Lake Collection",
                "The Militia Collection",
                "The Mirage Collection",
                "The Norse Collection",
                "The Nuke Collection",
                "The Office Collection",
                "The Operation Broken Fang Collection",
                "The Operation Hydra Collection",
                "The Operation Riptide Collection",
                "The Overpass 2024 Collection",
                "The Overpass Collection",
                "The Phoenix Collection",
                "The Prisma 2 Collection",
                "The Prisma Collection",
                "The Radiant Collection",
                "The Recoil Collection",
                "The Revolution Collection",
                "The Revolver Case Collection",
                "The Rising Sun Collection",
                "The Safehouse Collection",
                "The Shadow Collection",
                "The Shattered Web Collection",
                "The Snakebite Collection",
                "The Spectrum 2 Collection",
                "The Spectrum Collection",
                "The Sport & Field Collection",
                "The St. Marc Collection",
                "The Train 2025 Collection",
                "The Train Collection",
                "The Vanguard Collection",
                "The Vertigo Collection",
                "The Wildfire Collection",
                "The Winter Offensive Collection",
                "The X-Ray Collection",
                "Trolling Graffiti Collection"
              ],
              "title": "Collection"
            },
            "description": "Exact collection match (case-insensitive)"
          },
          {
            "name": "crates",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by crate names (matches any provided value)",
              "title": "Crates"
            },
            "description": "Filter by crate names (matches any provided value)"
          },
          {
            "name": "rarity_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact rarity name match (case-insensitive)",
              "enum": [
                "Base Grade",
                "Consumer Grade",
                "Industrial Grade",
                "Mil-Spec Grade",
                "High Grade",
                "Distinguished",
                "Restricted",
                "Remarkable",
                "Exceptional",
                "Classified",
                "Exotic",
                "Superior",
                "Covert",
                "Extraordinary",
                "Master",
                "Contraband"
              ],
              "title": "Rarity Name"
            },
            "description": "Exact rarity name match (case-insensitive)"
          },
          {
            "name": "rarity_color",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact rarity color match (case-insensitive)",
              "enum": [
                "b0c3d9",
                "5e98d9",
                "4b69ff",
                "8847ff",
                "d32ce6",
                "eb4b4b",
                "e4ae39",
                "white",
                "light blue",
                "blue",
                "purple",
                "pink",
                "red",
                "yellow"
              ],
              "title": "Rarity Color"
            },
            "description": "Exact rarity color match (case-insensitive)"
          },
          {
            "name": "style_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact style name match (case-insensitive)",
              "enum": [
                "Anodized",
                "Anodized Airbrushed",
                "Anodized Multicolored",
                "Case Hardening",
                "Custom Paint Job",
                "Gunsmith",
                "Hydrographic",
                "Patina",
                "Solid Color",
                "Spray-Paint",
                "None"
              ],
              "title": "Style Name"
            },
            "description": "Exact style name match (case-insensitive)"
          },
          {
            "name": "is_stattrak",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by StatTrak items",
              "title": "Is Stattrak"
            },
            "description": "Filter by StatTrak items"
          },
          {
            "name": "is_souvenir",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Filter by Souvenir items",
              "title": "Is Souvenir"
            },
            "description": "Filter by Souvenir items"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Maximum number of items to return. Omit to return all matched items in one response.",
              "title": "Limit"
            },
            "description": "Maximum number of items to return. Omit to return all matched items in one response."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0
                },
                {
                  "type": "null"
                }
              ],
              "description": "Number of items to skip before returning results.",
              "title": "Offset"
            },
            "description": "Number of items to skip before returning results."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsPaginatedResponse_ItemOut_"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/items/metadata": {
      "get": {
        "tags": [
          "Items"
        ],
        "summary": "Get Item Catalog Metadata",
        "description": "Return catalog counts and filter option values for frontend search controls.",
        "operationId": "getItemCatalogMetadata",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ItemsMetadataResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/providers": {
      "get": {
        "tags": [
          "Providers"
        ],
        "summary": "List Providers",
        "description": "List supported marketplace providers with capability, fee, currency, and health metadata.\n\nUse the optional `provider` query parameter to fetch a single provider by key.",
        "operationId": "listProviders",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "provider",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional provider key filter (e.g. \"skinport\"). Omit to return all providers.",
              "title": "Provider"
            },
            "description": "Optional provider key filter (e.g. \"skinport\"). Omit to return all providers."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "$ref": "#/components/schemas/ProviderInfo"
                  },
                  "title": "ListProvidersResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "The requested provider key does not exist.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Provider not found: does-not-exist"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/images": {
      "get": {
        "tags": [
          "Images"
        ],
        "summary": "List Game Images",
        "description": "Return a directory of CS2 catalog display names mapped to their image URLs on the CS2Cap CDN. Names that map to multiple distinct images return all URLs.",
        "operationId": "listGameImages",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "png",
                "webp"
              ],
              "type": "string",
              "description": "Image URL format. Defaults to png; webp rewrites .png URL suffixes.",
              "default": "png",
              "title": "Format"
            },
            "description": "Image URL format. Defaults to png; webp rewrites .png URL suffixes."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "title": "ListGameImagesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/sub-keys": {
      "get": {
        "tags": [
          "Account / API Keys"
        ],
        "summary": "List Sub Keys",
        "description": "List active child API keys.",
        "operationId": "listSubKeys",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Requested page size. Values are clamped to the range 1..100.",
              "default": 25,
              "title": "Limit"
            },
            "description": "Requested page size. Values are clamped to the range 1..100."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Zero-based starting position for this page.",
              "default": 0,
              "title": "Offset"
            },
            "description": "Zero-based starting position for this page."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChildAPIKeyListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Account / API Keys"
        ],
        "summary": "Create Sub Key",
        "description": "Create one child API key under the active root key.",
        "operationId": "createSubKey",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChildAPIKeyCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChildAPIKeyCreateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/sub-keys/{key_id}": {
      "get": {
        "tags": [
          "Account / API Keys"
        ],
        "summary": "Get Sub Key",
        "description": "Get one active child API key.",
        "operationId": "getSubKey",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Child API key ID.",
              "title": "Key Id"
            },
            "description": "Child API key ID."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChildAPIKeyDetailResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "patch": {
        "tags": [
          "Account / API Keys"
        ],
        "summary": "Update Sub Key",
        "description": "Update one active child API key.",
        "operationId": "updateSubKey",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Child API key ID.",
              "title": "Key Id"
            },
            "description": "Child API key ID."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChildAPIKeyUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChildAPIKeyDetailResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Account / API Keys"
        ],
        "summary": "Delete Sub Key",
        "description": "Revoke one active child API key.",
        "operationId": "deleteSubKey",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Child API key ID.",
              "title": "Key Id"
            },
            "description": "Child API key ID."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true,
                  "title": "DeleteSubKeyResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/sub-keys/{key_id}/reissue": {
      "post": {
        "tags": [
          "Account / API Keys"
        ],
        "summary": "Reissue Sub Key",
        "description": "Rotate one active child API key.",
        "operationId": "reissueSubKey",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "key_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "description": "Child API key ID.",
              "title": "Key Id"
            },
            "description": "Child API key ID."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChildAPIKeyCreateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/watchlist": {
      "get": {
        "tags": [
          "Account / Watchlist"
        ],
        "summary": "List Watchlist",
        "description": "List saved watchlist items for the authenticated user.\n\nBehavior:\n- accepts either a real API key or a session JWT bearer token\n- offset pagination ordered by newest saved first\n- `search` matches exact numeric `item_id` or case-insensitive item-name substring\n- response pagination includes a real `total` count",
        "operationId": "listWatchlist",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Requested page size. Values are clamped to the range 1..200.",
              "default": 50,
              "title": "Limit"
            },
            "description": "Requested page size. Values are clamped to the range 1..200."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Zero-based starting position for this page.",
              "default": 0,
              "title": "Offset"
            },
            "description": "Zero-based starting position for this page."
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact numeric item_id match or case-insensitive market_hash_name substring.",
              "title": "Search"
            },
            "description": "Exact numeric item_id match or case-insensitive market_hash_name substring."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WatchlistResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Account / Watchlist"
        ],
        "summary": "Create Watchlist Entries",
        "description": "Save one or more normalized catalog items to the authenticated user's default watchlist.\n\nRules:\n- accepts either a real API key or a session JWT bearer token\n- send either `item_id` for a single add or `item_ids` for a batch add\n- every item ID must exist in the API item catalog\n- watchlist access and max saved items depend on the user's tier\n- batch creates are all-or-nothing\n- duplicate saves return `409`",
        "operationId": "createWatchlistEntries",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WatchlistCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WatchlistCreateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/watchlist/{item_id}": {
      "delete": {
        "tags": [
          "Account / Watchlist"
        ],
        "summary": "Delete Watchlist Entry",
        "description": "Remove one saved watchlist entry by normalized `item_id`.\n\nThis path uses the catalog item ID, not the watchlist entry UUID.",
        "operationId": "deleteWatchlistEntry",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "title": "Item Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/alerts": {
      "get": {
        "tags": [
          "Account / Alerts"
        ],
        "summary": "List Alerts",
        "description": "List configured item alerts for the authenticated user.\n\nBehavior:\n- accepts either a real API key or a session JWT bearer token\n- offset pagination ordered by newest created first\n- `search` matches exact numeric `item_id` or case-insensitive item-name substring\n- response pagination includes a real `total` count",
        "operationId": "listAlerts",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Requested page size. Values are clamped to the range 1..200.",
              "default": 50,
              "title": "Limit"
            },
            "description": "Requested page size. Values are clamped to the range 1..200."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Zero-based starting position for this page.",
              "default": 0,
              "title": "Offset"
            },
            "description": "Zero-based starting position for this page."
          },
          {
            "name": "search",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact numeric item_id match or case-insensitive market_hash_name substring.",
              "title": "Search"
            },
            "description": "Exact numeric item_id match or case-insensitive market_hash_name substring."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Account / Alerts"
        ],
        "summary": "Create Alert",
        "description": "Create a new item-scoped account alert.\n\nSupported kinds:\n- `price_below`: trigger when the current best ask is at or below the threshold\n- `price_above`: trigger when the current best ask is at or above the threshold\n- `spread_exceeds`: trigger when `((best_ask - best_bid) / best_ask) * 100` meets or exceeds the threshold\n\nRules:\n- accepts either a real API key or a session JWT bearer token\n- `spread_exceeds` ignores `threshold_currency`\n- price alerts default `threshold_currency` to the account preferred currency when omitted; accounts that have not set a preference use USD\n- enabled alerts require at least one configured delivery channel (verified email delivery or an active webhook destination)\n- the active enabled-alert cap is tier-controlled",
        "operationId": "createAlert",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertDefinition"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/alerts/batch": {
      "post": {
        "tags": [
          "Account / Alerts"
        ],
        "summary": "Create Alerts Batch",
        "description": "Create multiple item-scoped account alerts in one request.\n\nRules:\n- accepts either a real API key or a session JWT bearer token\n- maximum 100 alerts per request\n- gated by the `batch_alert_creation_access` feature flag\n- enabled alerts are preflight-checked against the tier active-alert cap before inserts\n- exact duplicate alert payloads in the same request are rejected inline\n- the response preserves request order and reports per-item created/error status\n- the request consumes one API call regardless of batch size",
        "operationId": "createAlertsBatch",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertBatchCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Batch processed successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertBatchCreateResponse"
                },
                "example": {
                  "created": 2,
                  "failed": 1,
                  "results": [
                    {
                      "index": 0,
                      "status": "created",
                      "alert_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
                    },
                    {
                      "index": 1,
                      "status": "created",
                      "alert_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
                    },
                    {
                      "index": 2,
                      "status": "error",
                      "code": "ITEM_NOT_FOUND",
                      "message": "Item not found: 999999"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Batch size exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "402": {
            "description": "Enabled-alert cap would be exceeded by this batch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Batch alert creation is not available for this tier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/account/alerts/{alert_id}": {
      "patch": {
        "tags": [
          "Account / Alerts"
        ],
        "summary": "Update Alert",
        "description": "Update threshold fields or enabled state for an existing alert.\n\nAt least one of `threshold_value`, `threshold_currency`, or `is_enabled` must be provided. Enabling an alert re-applies tier, configured-delivery-channel, and enabled-alert-limit checks.",
        "operationId": "updateAlert",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "alert_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Alert Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AlertUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertDefinition"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Account / Alerts"
        ],
        "summary": "Delete Alert",
        "description": "Delete one alert definition owned by the authenticated user.",
        "operationId": "deleteAlert",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "alert_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Alert Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/alerts/events": {
      "get": {
        "tags": [
          "Account / Alerts"
        ],
        "summary": "List Alert Events",
        "description": "List recent alert trigger events and delivery attempts for the authenticated user.\n\nBehavior:\n- accepts either a real API key or a session JWT bearer token\n- offset pagination ordered by newest event first\n- delivery rows currently reflect email delivery attempts",
        "operationId": "listAlertEvents",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Requested page size. Values are clamped to the range 1..100.",
              "default": 50,
              "title": "Limit"
            },
            "description": "Requested page size. Values are clamped to the range 1..100."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Requested offset into the event history.",
              "default": 0,
              "title": "Offset"
            },
            "description": "Requested offset into the event history."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlertEventsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/webhooks": {
      "get": {
        "tags": [
          "Account / Webhooks"
        ],
        "summary": "List Webhooks",
        "description": "List outbound webhook destinations configured for the authenticated account.",
        "operationId": "listWebhooks",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Account / Webhooks"
        ],
        "summary": "Create Webhook",
        "description": "Create one outbound webhook destination and return its signing secret once.",
        "operationId": "createWebhook",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSecretResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/account/webhooks/deliveries": {
      "get": {
        "tags": [
          "Account / Webhooks"
        ],
        "summary": "List Webhook Deliveries",
        "description": "List outbound webhook delivery jobs for the authenticated account.",
        "operationId": "listWebhookDeliveries",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "description": "Requested page size. Values are clamped to the range 1..100.",
              "default": 50,
              "title": "Limit"
            },
            "description": "Requested page size. Values are clamped to the range 1..100."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Requested offset into delivery history.",
              "default": 0,
              "title": "Offset"
            },
            "description": "Requested offset into delivery history."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDeliveriesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/webhooks/deliveries/{delivery_id}": {
      "get": {
        "tags": [
          "Account / Webhooks"
        ],
        "summary": "Get Webhook Delivery",
        "description": "Fetch one outbound webhook delivery job with its attempt history.",
        "operationId": "getWebhookDelivery",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "delivery_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Delivery Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookDeliveryDetail"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/webhooks/{webhook_id}": {
      "patch": {
        "tags": [
          "Account / Webhooks"
        ],
        "summary": "Update Webhook",
        "description": "Update mutable outbound webhook destination fields.",
        "operationId": "updateWebhook",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Webhook Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookEndpointSummary"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Account / Webhooks"
        ],
        "summary": "Delete Webhook",
        "description": "Delete one outbound webhook destination owned by the authenticated account.",
        "operationId": "deleteWebhook",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Webhook Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/account/webhooks/{webhook_id}/rotate-secret": {
      "post": {
        "tags": [
          "Account / Webhooks"
        ],
        "summary": "Rotate Webhook Secret",
        "description": "Rotate one webhook destination signing secret and return the new secret once.",
        "operationId": "rotateWebhookSecret",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "webhook_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Webhook Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSecretResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/market/arbitrage": {
      "get": {
        "tags": [
          "Market Intelligence"
        ],
        "summary": "Get Arbitrage Opportunities",
        "description": "Scan providers for cross-market arbitrage opportunities.\n\nFilters:\n- `min_spread_pct`\n- `providers_buy` and `providers_sell` (sell-side limited to buy-order providers)\n- offset pagination via `offset`\n\nResponse:\n- opportunities ranked by estimated net profit in USD with buy-side and sell-side provider context\n- pagination total reflects every matching item across the market\n\nTier: Quant-only.",
        "operationId": "getArbitrageOpportunities",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Maximum number of results to return. Defaults to the effective tier cap.",
              "title": "Limit"
            },
            "description": "Maximum number of results to return. Defaults to the effective tier cap."
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "description": "Requested offset into the ranked opportunity list.",
              "default": 0,
              "title": "Offset"
            },
            "description": "Requested offset into the ranked opportunity list."
          },
          {
            "name": "min_spread_pct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 0,
              "description": "Minimum gross spread percentage between buy and sell prices.",
              "default": 1,
              "title": "Min Spread Pct"
            },
            "description": "Minimum gross spread percentage between buy and sell prices."
          },
          {
            "name": "providers_buy",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AllProviders"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Buy-side provider key enum filters (plural parameter). Repeat `providers_buy` to pass multiple values.",
              "title": "Providers Buy"
            },
            "description": "Buy-side provider key enum filters (plural parameter). Repeat `providers_buy` to pass multiple values."
          },
          {
            "name": "providers_sell",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/BuyOrderProvider"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Sell-side provider key enum filters for providers with buy orders (plural parameter). Repeat `providers_sell` to pass multiple values.",
              "title": "Providers Sell"
            },
            "description": "Sell-side provider key enum filters for providers with buy orders (plural parameter). Repeat `providers_sell` to pass multiple values."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketArbitrageResponse"
                },
                "example": {
                  "meta": {
                    "generated_at": "2026-01-20T12:05:56Z",
                    "data_source": "live",
                    "freshness_sec": 33
                  },
                  "data": {
                    "items": [
                      {
                        "item_id": 32,
                        "market_hash_name": "Gut Knife | Doppler (Factory New)",
                        "phase": "Phase 1",
                        "buy_provider": "buff163",
                        "sell_provider": "steam",
                        "buy_price_usd": "245.00",
                        "sell_price_usd": "285.50",
                        "gross_spread_pct": 16.53,
                        "estimated_fees_usd": "14.68",
                        "net_profit_usd": "25.82",
                        "last_updated": "2026-01-20T12:05:55Z"
                      }
                    ]
                  },
                  "pagination": {
                    "limit": 100,
                    "offset": 0,
                    "total": 1,
                    "has_next": false,
                    "has_prev": false
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid cursor or unsupported cursor parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Analytics tier required to access this endpoint.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Analytics access requires indie tier or higher"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          },
          "503": {
            "description": "FX rates or analytics database capacity are temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/market/items": {
      "get": {
        "tags": [
          "Market Intelligence"
        ],
        "summary": "Get Market Analytics Snapshot",
        "description": "Return the full market as a summary-only snapshot.\n\nIncludes:\n- one row per catalog item with the same summary fields exposed by the detail route\n- no pagination and no provider-level payloads\n- rank-ordered output using `rank asc, item_id asc`\n\nLiquidity reflects the 24h horizon; trade windows are 24h, 7d, and 30d.\n\nTier: Pro and Quant.",
        "operationId": "getMarketAnalyticsSnapshot",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketItemsSnapshotResponse"
                },
                "example": {
                  "meta": {
                    "generated_at": "2026-01-20T12:06:10Z",
                    "data_source": "cache",
                    "freshness_sec": 18,
                    "window": {
                      "timeframe": "24h"
                    }
                  },
                  "data": {
                    "items": [
                      {
                        "item_id": 156,
                        "market_hash_name": "AK-47 | Redline (Field-Tested)",
                        "summary": {
                          "provider_count": 3,
                          "best_ask_usd": "24.90",
                          "best_bid_usd": "24.90",
                          "avg_spread_pct": 2.35,
                          "total_volume_24h": 107,
                          "liquidity": 78,
                          "supply": 9060,
                          "rank": 1292,
                          "marketcap": "225594.00",
                          "price_rate_24h": 3.75,
                          "price_diff_24h": "0.90",
                          "price_rate_7d": 8.26,
                          "price_diff_7d": "1.90",
                          "price_rate_30d": -2.73,
                          "price_diff_30d": "-0.70",
                          "sales_1d": 107,
                          "sales_7d": 687,
                          "sales_30d": 2096,
                          "steam_sales_7d": 34,
                          "steam_sales_30d": 587,
                          "listing_score": 12,
                          "gap_score": 7,
                          "volume_score": 24,
                          "liquidity_last_updated": "2026-01-20T12:06:10Z"
                        }
                      },
                      {
                        "item_id": 42,
                        "market_hash_name": "AWP | Asiimov (Field-Tested)",
                        "summary": {
                          "provider_count": 3,
                          "best_ask_usd": "112.50",
                          "best_bid_usd": "108.10",
                          "avg_spread_pct": 4.11,
                          "total_volume_24h": 18,
                          "liquidity": 64,
                          "supply": 3120,
                          "rank": 2441,
                          "marketcap": "351000.00",
                          "price_rate_24h": -1.23,
                          "price_diff_24h": "-1.40",
                          "price_rate_7d": 2.18,
                          "price_diff_7d": "2.40",
                          "price_rate_30d": 6.64,
                          "price_diff_30d": "7.00",
                          "sales_1d": 18,
                          "sales_7d": 91,
                          "sales_30d": 301,
                          "steam_sales_7d": 16,
                          "steam_sales_30d": 73,
                          "listing_score": 9,
                          "gap_score": 5,
                          "volume_score": 18,
                          "liquidity_last_updated": "2026-01-20T12:06:02Z"
                        }
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Analytics tier required to access this endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Analytics access requires indie tier or higher"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Market data is temporarily unavailable; retry shortly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/market/items/{item_id}": {
      "get": {
        "tags": [
          "Market Intelligence"
        ],
        "summary": "Get Item Analytics",
        "description": "Return per-item market analytics across providers.\n\nIncludes:\n- best ask, best bid, and spread summary\n- item-level liquidity summary and provider-level price/depth/volume metrics\n- coverage diagnostics showing which providers contributed data\n\nLiquidity is always scored against the 24h horizon.\nProvider volume fields are trailing 24h and 7d totals.\n\nTier: Pro and Quant.",
        "operationId": "getItemAnalytics",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "description": "Item ID.",
              "title": "Item Id"
            },
            "description": "Item ID."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketItemAnalyticsResponse"
                },
                "example": {
                  "meta": {
                    "generated_at": "2026-01-20T12:06:10Z",
                    "data_source": "live",
                    "freshness_sec": 0,
                    "window": {
                      "timeframe": "24h"
                    }
                  },
                  "data": {
                    "item_id": 156,
                    "market_hash_name": "AK-47 | Redline (Field-Tested)",
                    "summary": {
                      "provider_count": 3,
                      "best_ask_usd": "24.90",
                      "best_bid_usd": "24.90",
                      "avg_spread_pct": 2.35,
                      "total_volume_24h": 107,
                      "liquidity": 78,
                      "supply": 9060,
                      "rank": 1292,
                      "marketcap": "225594.00",
                      "price_rate_24h": 3.75,
                      "price_diff_24h": "0.90",
                      "price_rate_7d": 8.26,
                      "price_diff_7d": "1.90",
                      "price_rate_30d": -2.73,
                      "price_diff_30d": "-0.70",
                      "sales_1d": 107,
                      "sales_7d": 687,
                      "sales_30d": 2096,
                      "steam_sales_7d": 34,
                      "steam_sales_30d": 587,
                      "listing_score": 12,
                      "gap_score": 7,
                      "volume_score": 24,
                      "liquidity_last_updated": "2026-01-20T12:06:10Z"
                    },
                    "providers": [
                      {
                        "provider": "steam",
                        "ask_usd": "25.50",
                        "bid_usd": "24.90",
                        "spread_usd": "0.60",
                        "spread_pct": 2.35,
                        "ask_depth": 142,
                        "bid_depth": 88,
                        "volume_24h": 520,
                        "volume_7d": 3120,
                        "total_value_24h_usd": "13260.00",
                        "price_rate_24h": 3.75,
                        "price_diff_24h": "0.90",
                        "price_rate_7d": 8.26,
                        "price_diff_7d": "1.90",
                        "price_rate_30d": -2.73,
                        "price_diff_30d": "-0.70",
                        "bid_anomaly": false
                      },
                      {
                        "provider": "skinport",
                        "ask_usd": "24.90",
                        "ask_depth": 96,
                        "volume_24h": 107,
                        "volume_7d": 687,
                        "total_value_24h_usd": "2664.30",
                        "price_rate_24h": 3.75,
                        "price_diff_24h": "0.90"
                      }
                    ],
                    "coverage": {
                      "provider_count": 3,
                      "providers_with_volume": 2,
                      "providers_with_bid_side": 1
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Analytics tier required to access this endpoint.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Analytics access requires indie tier or higher"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "No analytics data exists for the provided item_id.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Item not found"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/market/indexes": {
      "get": {
        "tags": [
          "Market Intelligence"
        ],
        "summary": "Get Market Cap Indexes",
        "description": "Aggregate the 24h market into category-level indexes.\n\nSupports grouping by `item_type` or `weapon_type`.\nItems are excluded from market cap totals when bid/ask/marketcap data is incomplete or spread exceeds the minimum threshold.\n\nResponse:\n- no pagination\n- groups sorted by `marketcap_usd desc`\n- totals computed from the same filtered item set\n\nTier: Quant-only.",
        "operationId": "getMarketCapIndexes",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "group_by",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "item_type",
                "weapon_type"
              ],
              "type": "string",
              "description": "Catalog dimension used to group snapshot items.",
              "default": "item_type",
              "title": "Group By"
            },
            "description": "Catalog dimension used to group snapshot items."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketIndexesResponse"
                },
                "example": {
                  "meta": {
                    "generated_at": "2026-01-20T12:06:10Z",
                    "data_source": "cache",
                    "freshness_sec": 18,
                    "window": {
                      "timeframe": "24h"
                    },
                    "group_by": "item_type"
                  },
                  "data": {
                    "total_marketcap_usd": "576594.00",
                    "groups": [
                      {
                        "group": "weapon",
                        "marketcap_usd": "576594.00",
                        "item_count": 2,
                        "included_count": 2,
                        "excluded_count": 0
                      },
                      {
                        "group": "wearable",
                        "marketcap_usd": "0.00",
                        "item_count": 1,
                        "included_count": 0,
                        "excluded_count": 1
                      }
                    ]
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Analytics tier required to access this endpoint.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Analytics access requires indie tier or higher"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          },
          "503": {
            "description": "Market data is temporarily unavailable; retry shortly.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/market/indicators": {
      "get": {
        "tags": [
          "Market Intelligence"
        ],
        "summary": "Get Indicators",
        "description": "Compute technical analysis indicators for one item from OHLCV candle data.\n\n**Indicators:**\n\n- **Momentum**: RSI(14), MACD(12/26/9), SMA(20/50/200), EMA(12/26), Bollinger Bands(20,2σ)\n- **Volatility**: ATR(14), Historical Volatility(20), Keltner Channels(20/10/2)\n- **Volume**: VWAP, OBV, Volume SMA(20)\n\n**Tier**: Quant-only.",
        "operationId": "getIndicators",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Item ID for live indicator computation.",
              "title": "Item Id"
            },
            "description": "Item ID for live indicator computation."
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Market hash name (alternative to item_id).",
              "title": "Market Hash Name"
            },
            "description": "Market hash name (alternative to item_id)."
          },
          {
            "name": "phase",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Doppler phase filter.",
              "title": "Phase"
            },
            "description": "Doppler phase filter."
          },
          {
            "name": "interval",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "1h",
                "1d"
              ],
              "type": "string",
              "description": "Candle interval for indicator computation.",
              "default": "1d",
              "title": "Interval"
            },
            "description": "Candle interval for indicator computation."
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency for price-level indicators (e.g. ``USD``, ``EUR``). Provider-native prices are converted via FX rates. Default: ``USD``.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency for price-level indicators (e.g. ``USD``, ``EUR``). Provider-native prices are converted via FX rates. Default: ``USD``."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketIndicatorsItemResponse"
                },
                "example": {
                  "meta": {
                    "generated_at": "2026-02-21T14:00:00Z",
                    "data_source": "live",
                    "freshness_sec": 0,
                    "interval": "1d",
                    "provider": "All Providers"
                  },
                  "data": {
                    "item_id": 156,
                    "market_hash_name": "AK-47 | Redline (Field-Tested)",
                    "provider": "All Providers",
                    "interval": "1d",
                    "close_price_usd": "25.50",
                    "momentum": {
                      "rsi_14": 62.5,
                      "macd_line": 0.45,
                      "macd_signal": 0.32,
                      "macd_histogram": 0.13,
                      "sma_20": 25.3,
                      "sma_50": 24.8,
                      "sma_200": 23.5,
                      "ema_12": 25.45,
                      "ema_26": 25,
                      "bb_upper": 27.1,
                      "bb_middle": 25.3,
                      "bb_lower": 23.5
                    },
                    "volatility": {
                      "atr_14": 1.25,
                      "historical_volatility_20": 0.35,
                      "kc_upper": 27.95,
                      "kc_middle": 25.45,
                      "kc_lower": 22.95
                    },
                    "volume": {
                      "vwap": 25.15,
                      "obv": 12500,
                      "volume_sma_20": 520
                    },
                    "signals": {
                      "rsi": "neutral",
                      "macd": "bullish",
                      "trend": "bullish",
                      "bollinger": "neutral",
                      "volatility": "normal",
                      "composite_score": 0.55
                    },
                    "coverage": {
                      "candle_count": 250,
                      "first_bucket": "2025-06-26T00:00:00Z",
                      "last_bucket": "2026-02-20T00:00:00Z",
                      "sufficient_for": [
                        "rsi_14",
                        "macd",
                        "sma_20",
                        "sma_50",
                        "sma_200",
                        "bollinger_bands",
                        "atr_14",
                        "historical_volatility",
                        "keltner_channels",
                        "vwap",
                        "obv",
                        "volume_sma_20"
                      ],
                      "insufficient_for": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Analytics tier required to access this endpoint.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Analytics access requires indie tier or higher"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Insufficient candle data for indicator computation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/market/history/chart": {
      "get": {
        "tags": [
          "Market Intelligence"
        ],
        "summary": "Get Deep Price History Chart",
        "description": "Per-provider daily price history.\n\nReturns one price point per provider per UTC day, spanning years of history\nup to the present. Prices are in minor units of the response currency;\n``qty`` is nullable.\n\nProviders that have shut down are excluded by default; pass\n``include_defunct=true`` to include their historical series.\n\n**Tier**: Quant-only.",
        "operationId": "getDeepPriceHistoryChart",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "item_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Normalized catalog item ID (or use market_hash_name).",
              "title": "Item Id"
            },
            "description": "Normalized catalog item ID (or use market_hash_name)."
          },
          {
            "name": "market_hash_name",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Market hash name (alternative to item_id).",
              "title": "Market Hash Name"
            },
            "description": "Market hash name (alternative to item_id)."
          },
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Provider key(s). Repeatable. Omit for all providers with data.",
              "title": "Providers"
            },
            "description": "Provider key(s). Repeatable. Omit for all providers with data."
          },
          {
            "name": "start",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601 UTC start of the window.",
              "title": "Start"
            },
            "description": "ISO 8601 UTC start of the window."
          },
          {
            "name": "end",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date-time"
                },
                {
                  "type": "null"
                }
              ],
              "description": "ISO 8601 UTC end of the window.",
              "title": "End"
            },
            "description": "ISO 8601 UTC end of the window."
          },
          {
            "name": "lookback",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Window length in days; overrides start.",
              "title": "Lookback"
            },
            "description": "Window length in days; overrides start."
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency for returned prices. Default: USD.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency for returned prices. Default: USD."
          },
          {
            "name": "include_defunct",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "description": "Include providers that have shut down but still have historical data (e.g. GamerPay, BitSkins). Defaults to false.",
              "default": false,
              "title": "Include Defunct"
            },
            "description": "Include providers that have shut down but still have historical data (e.g. GamerPay, BitSkins). Defaults to false."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketHistoryChartResponse"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Analytics tier required to access this endpoint.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Analytics access requires indie tier or higher"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Item not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/inventory/steam": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "summary": "Get Steam Inventory",
        "description": "Fetch the authenticated user's live CS2 inventory from Steam. Requires a linked Steam account. No data is persisted — use the portfolio import endpoint to add items to a portfolio.",
        "operationId": "getSteamInventory",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SteamInventoryResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "No linked Steam account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Steam inventory unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/inventory/steam/lookup": {
      "get": {
        "tags": [
          "Inventory"
        ],
        "summary": "Get Steam Inventory by Steam ID",
        "description": "Fetch the CS2 inventory for any Steam account by Steam64ID or vanity URL. Accepts a 17-digit Steam64ID (e.g. `76561197964243909`) or a custom URL name (e.g. `dadscap`). Vanity URL resolution requires a Steam Web API key to be configured. No data is persisted.",
        "operationId": "getSteamInventoryBySteamId",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "steam_id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Steam64ID (17-digit) or vanity URL name (e.g. 'dadscap').",
              "title": "Steam Id"
            },
            "description": "Steam64ID (17-digit) or vanity URL name (e.g. 'dadscap')."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SteamInventoryResponse"
                }
              }
            }
          },
          "400": {
            "description": "Steam ID could not be resolved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          },
          "503": {
            "description": "Steam inventory unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/value": {
      "post": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Value Portfolio",
        "description": "Value an inventory of CS2 items at live market prices.\n\nSend a list of `{item_id, quantity}` pairs and receive per-item valuation based on the best ask price across queried providers, plus a rolled-up total.\n\nMaximum 100 distinct items per request.\n\nAll money values are in minor units of the requested currency (e.g. USD cents when `currency=USD`). Divide by 100 for display.",
        "operationId": "valuePortfolio",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PortfolioRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioResponse"
                },
                "example": {
                  "meta": {
                    "currency": "USD",
                    "generated_at": "2026-03-22T12:00:00Z",
                    "providers_queried": [
                      "steam",
                      "buff163"
                    ]
                  },
                  "data": {
                    "line_items": [
                      {
                        "item_id": 1,
                        "market_hash_name": "AK-47 | Redline (Field-Tested)",
                        "quantity": 3,
                        "best_ask": 2550,
                        "item_value": 7650,
                        "providers": [
                          {
                            "provider": "steam",
                            "lowest_ask": 2550,
                            "quantity": 14,
                            "timestamp": "2026-03-22T11:55:00Z",
                            "last_updated": "2026-03-22T11:58:00Z"
                          }
                        ]
                      }
                    ],
                    "total_value": 7650,
                    "items_valued": 1,
                    "items_not_found": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "Batch size exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/portfolio": {
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "List Portfolios",
        "description": "List all named portfolios belonging to the authenticated user.",
        "operationId": "listPortfolios",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioListResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Access denied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      },
      "post": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Create Portfolio",
        "description": "Create a new named portfolio. The maximum number of portfolios depends on your tier. Portfolios store items persistently and can be valued at any time.",
        "operationId": "createPortfolio",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PortfolioCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioOut"
                }
              }
            }
          },
          "400": {
            "description": "Portfolio limit reached.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                }
              }
            }
          },
          "403": {
            "description": "Access denied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "BearerAuth": []
          }
        ]
      }
    },
    "/v1/portfolio/{portfolio_id}": {
      "delete": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Delete Portfolio",
        "description": "Delete a portfolio and all its items.",
        "operationId": "deletePortfolio",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/{portfolio_id}/import": {
      "post": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Import Steam Inventory",
        "description": "Import items from the user's Steam inventory into a portfolio. Optionally supply `asset_ids` to import only specific items. Items already present (by Steam asset ID) are skipped. Items not matched in the CS2C catalog are returned in `unresolved` and are not stored.",
        "operationId": "importSteamInventory",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PortfolioImportRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioImportResult"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "No linked Steam account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          },
          "503": {
            "description": "Steam inventory unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/{portfolio_id}/items": {
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "List Portfolio Items",
        "description": "List all items in a saved portfolio.",
        "operationId": "listPortfolioItems",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PortfolioItemOut"
                  },
                  "title": "ListPortfolioItemsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Add Item to Portfolio",
        "description": "Add a single item to a portfolio by `item_id` or `market_hash_name`. Use this for manual entry without a Steam inventory import.",
        "operationId": "addItemToPortfolio",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PortfolioAddItemRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioItemOut"
                }
              }
            }
          },
          "400": {
            "description": "Missing item identifier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio or item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/{portfolio_id}/items/{entry_id}": {
      "delete": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Remove Item from Portfolio",
        "description": "Remove a specific item entry from a portfolio.",
        "operationId": "removeItemFromPortfolio",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          },
          {
            "name": "entry_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Entry Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio or item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/{portfolio_id}/value": {
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Get Portfolio Value",
        "description": "Value all items in a saved portfolio at live market prices. Items without price data appear in `items_not_found`. All money values are in minor units (e.g. USD cents). Divide by 100 for display.",
        "operationId": "getPortfolioValue",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency code.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency code."
          },
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Provider keys to include. Repeat to pass multiple, e.g. providers=steam&providers=skinport. Omit for all providers.",
              "title": "Providers"
            },
            "description": "Provider keys to include. Repeat to pass multiple, e.g. providers=steam&providers=skinport. Omit for all providers."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/{portfolio_id}/history": {
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Get Portfolio Value History",
        "description": "Replay saved-portfolio holdings from the transaction ledger and return daily historical valuation points priced from stored daily market closes. This endpoint is daily-only because portfolio transactions are date-granular.",
        "operationId": "getPortfolioValueHistory",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          },
          {
            "name": "start_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive UTC start date (YYYY-MM-DD).",
              "title": "Start Date"
            },
            "description": "Inclusive UTC start date (YYYY-MM-DD)."
          },
          {
            "name": "end_date",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "date"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Inclusive UTC end date (YYYY-MM-DD). Defaults to today.",
              "title": "End Date"
            },
            "description": "Inclusive UTC end date (YYYY-MM-DD). Defaults to today."
          },
          {
            "name": "lookback",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Optional lookback in days, e.g. `30d`. Overrides start_date.",
              "title": "Lookback"
            },
            "description": "Optional lookback in days, e.g. `30d`. Overrides start_date."
          },
          {
            "name": "currency",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "description": "Target currency code.",
              "default": "USD",
              "title": "Currency"
            },
            "description": "Target currency code."
          },
          {
            "name": "providers",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                {
                  "type": "null"
                }
              ],
              "description": "Provider keys to include. Repeat to pass multiple, e.g. providers=steam&providers=skinport. Omit for all providers.",
              "title": "Providers"
            },
            "description": "Provider keys to include. Repeat to pass multiple, e.g. providers=steam&providers=skinport. Omit for all providers."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 1
                },
                {
                  "type": "null"
                }
              ],
              "description": "Maximum number of daily points to return.",
              "title": "Limit"
            },
            "description": "Maximum number of daily points to return."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `pagination.next_cursor`.",
              "title": "Cursor"
            },
            "description": "Opaque cursor from `pagination.next_cursor`."
          },
          {
            "name": "basis",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "ledger",
                "holdings"
              ],
              "type": "string",
              "description": "Holdings basis. `ledger` (default) replays holdings from the transaction ledger and requires recorded transactions. `holdings` values the portfolio's current holdings flat across the window, so history is available without any transactions.",
              "default": "ledger",
              "title": "Basis"
            },
            "description": "Holdings basis. `ledger` (default) replays holdings from the transaction ledger and requires recorded transactions. `holdings` values the portfolio's current holdings flat across the window, so history is available without any transactions."
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioHistoryPage"
                }
              }
            }
          },
          "400": {
            "description": "Invalid window, invalid cursor, or no ledger history available.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/{portfolio_id}/transactions": {
      "post": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Add Transaction",
        "description": "Record a buy or sell transaction for an item in this portfolio.",
        "operationId": "addTransaction",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionCreateRequest"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionOut"
                }
              }
            }
          },
          "400": {
            "description": "Missing item identifier.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio or item not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Portfolio"
        ],
        "summary": "List Transactions",
        "description": "List all transactions in a portfolio, newest first.",
        "operationId": "listTransactions",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TransactionOut"
                  },
                  "title": "ListTransactionsResponse"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    },
    "/v1/portfolio/{portfolio_id}/transactions/{transaction_id}": {
      "patch": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Update Transaction",
        "description": "Partially update a transaction.",
        "operationId": "updateTransaction",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          },
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Transaction Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionUpdateRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionOut"
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio or transaction not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Portfolio"
        ],
        "summary": "Delete Transaction",
        "description": "Delete a transaction from a portfolio.",
        "operationId": "deleteTransaction",
        "security": [
          {
            "BearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "portfolio_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Portfolio Id"
            }
          },
          {
            "name": "transaction_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "title": "Transaction Id"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid authentication credentials.",
            "content": {
              "application/json": {
                "example": {
                  "code": "UNAUTHORIZED",
                  "detail": "Missing Authorization header"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated but not permitted to access this resource.",
            "content": {
              "application/json": {
                "example": {
                  "code": "FORBIDDEN",
                  "detail": "Account is disabled"
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Portfolio or transaction not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Request validation failed. The detail list contains field-specific validation errors.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationErrorResponse"
                }
              }
            },
            "headers": {
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code when available.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (burst or monthly quota).",
            "content": {
              "application/json": {
                "examples": {
                  "burstRateLimit": {
                    "summary": "Per-window rate limit exceeded",
                    "value": {
                      "code": "RATE_LIMIT_EXCEEDED",
                      "detail": "Too Many Requests"
                    }
                  },
                  "monthlyQuotaExceeded": {
                    "summary": "Monthly quota exhausted",
                    "value": {
                      "code": "RATE_LIMIT_MONTHLY_QUOTA_EXCEEDED",
                      "detail": "Monthly quota exceeded (500000/500000 requests)."
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying when present.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-RateLimit-Tier": {
                "description": "Authenticated caller tier code.",
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Request limit for the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Remaining requests in the rate-limit window that was exceeded.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-RateLimit-Reset": {
                "description": "Seconds until the rate-limit window resets.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "APIKeyInfo": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique identifier for this resource."
          },
          "key_prefix": {
            "type": "string",
            "title": "Key Prefix",
            "description": "Non-sensitive API key prefix used for identification."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "User-visible label for this API key."
          },
          "root_key_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Root Key Id",
            "description": "Root API key identifier for this key tree."
          },
          "is_root_key": {
            "type": "boolean",
            "title": "Is Root Key",
            "description": "Whether this API key is a root key.",
            "default": true
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "description": "Whether this resource is active."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when this record was created."
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Used At",
            "description": "ISO 8601 UTC timestamp when this API key was last used."
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Expires At",
            "description": "ISO 8601 UTC timestamp when this resource expires, if applicable."
          },
          "quota_requests_per_month_override": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quota Requests Per Month Override",
            "description": "Optional child-key monthly quota override."
          },
          "rate_requests_per_minute_override": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Requests Per Minute Override",
            "description": "Optional child-key requests-per-minute override."
          },
          "effective_quota_requests_per_month": {
            "type": "integer",
            "title": "Effective Quota Requests Per Month",
            "description": "Effective monthly quota cap for this key.",
            "default": 0
          },
          "effective_rate_requests_per_minute": {
            "type": "integer",
            "title": "Effective Rate Requests Per Minute",
            "description": "Effective requests-per-minute cap for this key.",
            "default": 0
          }
        },
        "type": "object",
        "required": [
          "id",
          "key_prefix",
          "is_active",
          "created_at"
        ],
        "title": "APIKeyInfo",
        "description": "Active API key information (without full key material)."
      },
      "AccountMutationResponse": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok",
            "description": "Boolean success indicator for this operation."
          }
        },
        "type": "object",
        "required": [
          "ok"
        ],
        "title": "AccountMutationResponse"
      },
      "AlertBatchCreateRequest": {
        "properties": {
          "alerts": {
            "items": {
              "$ref": "#/components/schemas/AlertCreateRequest"
            },
            "type": "array",
            "minItems": 1,
            "title": "Alerts",
            "description": "Alert definitions to create in a single request."
          }
        },
        "type": "object",
        "required": [
          "alerts"
        ],
        "title": "AlertBatchCreateRequest"
      },
      "AlertBatchCreateResponse": {
        "properties": {
          "created": {
            "type": "integer",
            "title": "Created",
            "description": "Number of alerts created successfully."
          },
          "failed": {
            "type": "integer",
            "title": "Failed",
            "description": "Number of batch items that failed inline validation."
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/AlertBatchCreateResult"
            },
            "type": "array",
            "title": "Results",
            "description": "Ordered per-item outcomes matching the request payload order."
          }
        },
        "type": "object",
        "required": [
          "created",
          "failed",
          "results"
        ],
        "title": "AlertBatchCreateResponse"
      },
      "AlertBatchCreateResult": {
        "properties": {
          "index": {
            "type": "integer",
            "title": "Index",
            "description": "Zero-based index of the original request item."
          },
          "status": {
            "type": "string",
            "enum": [
              "created",
              "error"
            ],
            "title": "Status",
            "description": "Per-item processing status."
          },
          "alert_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Alert Id",
            "description": "Created alert identifier when status=`created`."
          },
          "code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code",
            "description": "Machine-readable error code when status=`error`."
          },
          "message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Message",
            "description": "Human-readable validation message when status=`error`."
          }
        },
        "type": "object",
        "required": [
          "index",
          "status"
        ],
        "title": "AlertBatchCreateResult"
      },
      "AlertCreateRequest": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID to monitor."
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "Alert kind: price_below, price_above, or spread_exceeds."
          },
          "threshold_value": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Threshold Value",
            "description": "Threshold value in alert units."
          },
          "threshold_currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold Currency",
            "description": "Currency code for price alerts; omitting it uses the account's preferred currency, falling back to USD. Omit for spread alerts."
          },
          "is_enabled": {
            "type": "boolean",
            "title": "Is Enabled",
            "description": "Whether the alert should be enabled immediately.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "kind",
          "threshold_value"
        ],
        "title": "AlertCreateRequest"
      },
      "AlertDefinition": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique alert identifier."
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "Alert kind."
          },
          "threshold_value": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Threshold Value",
            "description": "Threshold value in configured units."
          },
          "threshold_currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold Currency",
            "description": "Currency code for price alerts; null for spread alerts."
          },
          "is_enabled": {
            "type": "boolean",
            "title": "Is Enabled",
            "description": "Whether the alert is enabled."
          },
          "last_triggered_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Triggered At",
            "description": "ISO 8601 UTC timestamp of the most recent trigger."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when the alert was created."
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At",
            "description": "ISO 8601 UTC timestamp when the alert was last updated."
          },
          "item": {
            "$ref": "#/components/schemas/AlertItemSummary",
            "description": "Item metadata for the alert target."
          }
        },
        "type": "object",
        "required": [
          "id",
          "kind",
          "threshold_value",
          "is_enabled",
          "created_at",
          "updated_at",
          "item"
        ],
        "title": "AlertDefinition",
        "description": "Configured alert rule."
      },
      "AlertDeliverySummary": {
        "properties": {
          "channel": {
            "type": "string",
            "title": "Channel",
            "description": "Delivery channel key."
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "Delivery status."
          },
          "delivery_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Delivery Id",
            "description": "Unique delivery identifier when available."
          },
          "endpoint_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Endpoint Id",
            "description": "Webhook destination identifier when this row represents a webhook delivery."
          },
          "endpoint_label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Endpoint Label",
            "description": "Webhook destination label when this row represents a webhook delivery."
          },
          "platform": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Platform",
            "description": "Delivery platform key for webhook-backed deliveries."
          },
          "attempt_count": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attempt Count",
            "description": "Number of attempts recorded for this delivery when available."
          },
          "last_http_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Http Status",
            "description": "Last HTTP response status observed for webhook deliveries."
          },
          "next_attempt_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Attempt At",
            "description": "Next scheduled retry timestamp for retrying webhook deliveries."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Failure message when delivery fails."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when this delivery row was created."
          }
        },
        "type": "object",
        "required": [
          "channel",
          "status",
          "created_at"
        ],
        "title": "AlertDeliverySummary",
        "description": "Outbound delivery result for one alert event."
      },
      "AlertEventSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique event identifier."
          },
          "alert_id": {
            "type": "string",
            "title": "Alert Id",
            "description": "Alert identifier that triggered."
          },
          "kind": {
            "type": "string",
            "title": "Kind",
            "description": "Alert kind."
          },
          "item": {
            "$ref": "#/components/schemas/AlertItemSummary",
            "description": "Item metadata for the triggered alert."
          },
          "triggered_value": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Triggered Value",
            "description": "Observed value that triggered the alert."
          },
          "triggered_currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Triggered Currency",
            "description": "Currency code for observed price values; null for spread alerts."
          },
          "reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason",
            "description": "Human-readable trigger reason."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when the event was created."
          },
          "deliveries": {
            "items": {
              "$ref": "#/components/schemas/AlertDeliverySummary"
            },
            "type": "array",
            "title": "Deliveries",
            "description": "Delivery attempts for this event."
          }
        },
        "type": "object",
        "required": [
          "id",
          "alert_id",
          "kind",
          "item",
          "triggered_value",
          "created_at",
          "deliveries"
        ],
        "title": "AlertEventSummary",
        "description": "Recent alert trigger event."
      },
      "AlertEventsResponse": {
        "properties": {
          "events": {
            "items": {
              "$ref": "#/components/schemas/AlertEventSummary"
            },
            "type": "array",
            "title": "Events",
            "description": "Recent alert trigger events."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "events",
          "pagination"
        ],
        "title": "AlertEventsResponse",
        "description": "Paginated alert event history."
      },
      "AlertItemSummary": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name"
        ],
        "title": "AlertItemSummary",
        "description": "Item metadata attached to an alert."
      },
      "AlertListResponse": {
        "properties": {
          "alerts": {
            "items": {
              "$ref": "#/components/schemas/AlertDefinition"
            },
            "type": "array",
            "title": "Alerts",
            "description": "Configured alert rules."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "alerts",
          "pagination"
        ],
        "title": "AlertListResponse",
        "description": "Paginated response for configured alerts."
      },
      "AlertUpdateRequest": {
        "properties": {
          "threshold_value": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold Value",
            "description": "Updated threshold value."
          },
          "threshold_currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Threshold Currency",
            "description": "Updated currency code for price alerts."
          },
          "is_enabled": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Enabled",
            "description": "Updated enabled state."
          }
        },
        "type": "object",
        "title": "AlertUpdateRequest"
      },
      "AllProviders": {
        "type": "string",
        "enum": [
          "avanmarket",
          "buff163",
          "buffmarket",
          "c5",
          "csdeals",
          "csfloat",
          "csgo500",
          "csgoempire",
          "csmoney_m",
          "csmoney_t",
          "cstrade",
          "dmarket",
          "dupefi",
          "ecosteam",
          "gameboost",
          "haloskins",
          "itradegg",
          "lisskins",
          "lootfarm",
          "mannco",
          "marketcsgo",
          "pirateswap",
          "rapidskins",
          "shadowpay",
          "skinbaron",
          "skinflow",
          "skinland",
          "skinout",
          "skinplace",
          "skinport",
          "skinscom",
          "skinsmonkey",
          "skinswap",
          "skinswap_t",
          "skinvault",
          "steam",
          "swapgg",
          "tradeit",
          "waxpeer",
          "whitemarket",
          "youpin"
        ],
        "title": "AllProviders",
        "description": "All available provider keys.\n\nMembers are generated from canonical endpoint metadata."
      },
      "BatchBidItem": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "quotes": {
            "items": {
              "$ref": "#/components/schemas/BatchBidQuote"
            },
            "type": "array",
            "title": "Quotes",
            "description": "Per-provider bid quotes."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "quotes"
        ],
        "title": "BatchBidItem",
        "description": "Aggregated bid data for one item across providers."
      },
      "BatchBidQuote": {
        "properties": {
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key."
          },
          "highest_bid": {
            "type": "integer",
            "title": "Highest Bid",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "highest_bid_decimal": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Highest Bid Decimal",
            "description": "Price as a decimal string in the response currency, with precision that scales to magnitude: two decimal places at or above 1.0, eight below it. Use this field for currencies where the integer minor-units field would round to 0 (notably cryptocurrencies such as BTC, for example \"0.00041600\")."
          },
          "num_bids": {
            "type": "integer",
            "title": "Num Bids",
            "description": "Number of active buy orders."
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timestamp",
            "description": "When bid was observed."
          },
          "last_updated": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Updated",
            "description": "When record was last ingested."
          }
        },
        "type": "object",
        "required": [
          "provider",
          "highest_bid",
          "num_bids"
        ],
        "title": "BatchBidQuote",
        "description": "Bid quote from a single provider for one item."
      },
      "BatchBidsMeta": {
        "properties": {
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Currency code for all money values in this response."
          },
          "requested_item_count": {
            "type": "integer",
            "title": "Requested Item Count",
            "description": "Number of item IDs in the request."
          },
          "found_item_count": {
            "type": "integer",
            "title": "Found Item Count",
            "description": "Number of items with at least one bid quote."
          },
          "providers_queried": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers Queried",
            "description": "Provider keys queried."
          },
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At",
            "description": "UTC timestamp when this response was generated."
          }
        },
        "type": "object",
        "required": [
          "currency",
          "requested_item_count",
          "found_item_count",
          "providers_queried",
          "generated_at"
        ],
        "title": "BatchBidsMeta",
        "description": "Response metadata for batch bids."
      },
      "BatchBidsRequest": {
        "properties": {
          "item_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Ids",
            "description": "Normalized catalog item IDs to look up."
          },
          "market_hash_names": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Hash Names",
            "description": "Market hash names to look up. Names resolve to the phaseless catalog entry; for phased Dopplers/Gammas (Phase 1-4, Ruby, Sapphire, Emerald, Black Pearl) use `item_ids` instead to target a specific phase."
          },
          "providers": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Providers",
            "description": "Provider key filters (buy-order providers only). Omit for all."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Target currency code for returned bids.",
            "default": "USD"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "BatchBidsRequest",
        "description": "Request body for POST /v1/bids/batch."
      },
      "BatchBidsResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/BatchBidsMeta",
            "description": "Response metadata."
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/BatchBidItem"
            },
            "type": "array",
            "title": "Items",
            "description": "Per-item bid data."
          },
          "items_not_found": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Items Not Found",
            "description": "Item IDs with no bid data available."
          },
          "names_not_found": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Names Not Found",
            "description": "Market hash names that could not be resolved to a catalog item."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "items",
          "items_not_found"
        ],
        "title": "BatchBidsResponse",
        "description": "Response envelope for POST /v1/bids/batch."
      },
      "BatchPriceItem": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "quotes": {
            "items": {
              "$ref": "#/components/schemas/BatchPriceQuote"
            },
            "type": "array",
            "title": "Quotes",
            "description": "Per-provider price quotes."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "quotes"
        ],
        "title": "BatchPriceItem",
        "description": "Aggregated price data for one item across providers."
      },
      "BatchPriceQuote": {
        "properties": {
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key."
          },
          "lowest_ask": {
            "type": "integer",
            "title": "Lowest Ask",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "lowest_ask_decimal": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lowest Ask Decimal",
            "description": "Price as a decimal string in the response currency, with precision that scales to magnitude: two decimal places at or above 1.0, eight below it. Use this field for currencies where the integer minor-units field would round to 0 (notably cryptocurrencies such as BTC, for example \"0.00041600\")."
          },
          "quantity": {
            "type": "integer",
            "title": "Quantity",
            "description": "Available quantity at this provider."
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timestamp",
            "description": "When price was observed."
          },
          "last_updated": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Updated",
            "description": "When record was last ingested."
          }
        },
        "type": "object",
        "required": [
          "provider",
          "lowest_ask",
          "quantity"
        ],
        "title": "BatchPriceQuote",
        "description": "Price quote from a single provider for one item."
      },
      "BatchPricesMeta": {
        "properties": {
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Currency code for all money values in this response."
          },
          "requested_item_count": {
            "type": "integer",
            "title": "Requested Item Count",
            "description": "Number of item IDs in the request."
          },
          "found_item_count": {
            "type": "integer",
            "title": "Found Item Count",
            "description": "Number of items with at least one price quote."
          },
          "providers_queried": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers Queried",
            "description": "Provider keys queried."
          },
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At",
            "description": "UTC timestamp when this response was generated."
          }
        },
        "type": "object",
        "required": [
          "currency",
          "requested_item_count",
          "found_item_count",
          "providers_queried",
          "generated_at"
        ],
        "title": "BatchPricesMeta",
        "description": "Response metadata for batch prices."
      },
      "BatchPricesRequest": {
        "properties": {
          "item_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "integer"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Ids",
            "description": "Normalized catalog item IDs to look up."
          },
          "market_hash_names": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Hash Names",
            "description": "Market hash names to look up. Names resolve to the phaseless catalog entry; for phased Dopplers/Gammas (Phase 1-4, Ruby, Sapphire, Emerald, Black Pearl) use `item_ids` instead to target a specific phase."
          },
          "providers": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Providers",
            "description": "Provider key filters. Omit for all providers."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Target currency code for returned prices.",
            "default": "USD"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "BatchPricesRequest",
        "description": "Request body for POST /v1/prices/batch."
      },
      "BatchPricesResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/BatchPricesMeta",
            "description": "Response metadata."
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/BatchPriceItem"
            },
            "type": "array",
            "title": "Items",
            "description": "Per-item price data."
          },
          "items_not_found": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Items Not Found",
            "description": "Item IDs with no price data available."
          },
          "names_not_found": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Names Not Found",
            "description": "Market hash names that could not be resolved to a catalog item."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "items",
          "items_not_found"
        ],
        "title": "BatchPricesResponse",
        "description": "Response envelope for POST /v1/prices/batch."
      },
      "BidsResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/PricesMeta",
            "description": "Response metadata for this payload."
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/BuyOrderItem"
            },
            "type": "array",
            "title": "Items",
            "description": "List of returned items."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Offset pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "items",
          "pagination"
        ],
        "title": "BidsResponse",
        "description": "Bids response with metadata and pagination."
      },
      "BuyOrderItem": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key used by this API."
          },
          "highest_bid": {
            "type": "integer",
            "title": "Highest Bid",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "highest_bid_decimal": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Highest Bid Decimal",
            "description": "Price as a decimal string in the response currency, with precision that scales to magnitude: two decimal places at or above 1.0, eight below it. Use this field for currencies where the integer minor-units field would round to 0 (notably cryptocurrencies such as BTC, for example \"0.00041600\")."
          },
          "num_bids": {
            "type": "integer",
            "title": "Num Bids",
            "description": "Num bids value."
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timestamp",
            "description": "Timestamp value."
          },
          "last_updated": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Updated",
            "description": "ISO 8601 UTC timestamp when this record was last ingested or processed."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "provider",
          "highest_bid",
          "num_bids"
        ],
        "title": "BuyOrderItem",
        "description": "Buy order data for a specific item from a provider."
      },
      "BuyOrderProvider": {
        "type": "string",
        "enum": [
          "buff163",
          "buffmarket",
          "c5",
          "csfloat",
          "dmarket",
          "dupefi",
          "ecosteam",
          "marketcsgo",
          "steam",
          "waxpeer",
          "whitemarket",
          "youpin"
        ],
        "title": "BuyOrderProvider",
        "description": "Provider keys that support buy orders."
      },
      "CharmInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name for this entity."
          },
          "pattern_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Pattern Id",
            "description": "Pattern identifier for the charm, when available."
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "CharmInfo",
        "description": "Charm/keychain information."
      },
      "ChildAPIKeyCreateRequest": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "description": "User-visible child-key label."
          },
          "quota_requests_per_month_override": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Quota Requests Per Month Override",
            "description": "Optional child-key monthly quota cap."
          },
          "rate_requests_per_minute_override": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Requests Per Minute Override",
            "description": "Optional child-key requests-per-minute cap."
          }
        },
        "type": "object",
        "required": [
          "name"
        ],
        "title": "ChildAPIKeyCreateRequest",
        "description": "Create one child API key."
      },
      "ChildAPIKeyCreateResponse": {
        "properties": {
          "key": {
            "type": "string",
            "title": "Key",
            "description": "API key value. This is typically shown only once."
          },
          "key_info": {
            "$ref": "#/components/schemas/APIKeyInfo",
            "description": "Metadata for the created child API key."
          },
          "message": {
            "type": "string",
            "title": "Message",
            "description": "Human-readable status message.",
            "default": "Store this key securely. It will not be shown again."
          }
        },
        "type": "object",
        "required": [
          "key",
          "key_info"
        ],
        "title": "ChildAPIKeyCreateResponse",
        "description": "Plaintext child-key creation response."
      },
      "ChildAPIKeyDetailResponse": {
        "properties": {
          "key": {
            "$ref": "#/components/schemas/APIKeyInfo",
            "description": "Child API key metadata."
          },
          "requests_this_month": {
            "type": "integer",
            "title": "Requests This Month",
            "description": "Current-month request count for this child key."
          }
        },
        "type": "object",
        "required": [
          "key",
          "requests_this_month"
        ],
        "title": "ChildAPIKeyDetailResponse",
        "description": "One child key plus current-month usage summary."
      },
      "ChildAPIKeyListResponse": {
        "properties": {
          "keys": {
            "items": {
              "$ref": "#/components/schemas/ChildAPIKeyDetailResponse"
            },
            "type": "array",
            "title": "Keys",
            "description": "Child API keys."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Offset pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "keys",
          "pagination"
        ],
        "title": "ChildAPIKeyListResponse",
        "description": "Paginated child-key listing."
      },
      "ChildAPIKeyUpdateRequest": {
        "properties": {
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Name",
            "description": "User-visible child-key label."
          },
          "quota_requests_per_month_override": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Quota Requests Per Month Override",
            "description": "Optional child-key monthly quota cap; null removes the override."
          },
          "rate_requests_per_minute_override": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Rate Requests Per Minute Override",
            "description": "Optional child-key requests-per-minute cap; null removes the override."
          }
        },
        "type": "object",
        "title": "ChildAPIKeyUpdateRequest",
        "description": "Update mutable child-key fields."
      },
      "ErrorResponse": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code",
            "description": "Stable machine-readable error code"
          },
          "detail": {
            "type": "string",
            "title": "Detail",
            "description": "Human-readable error detail message"
          }
        },
        "type": "object",
        "required": [
          "code",
          "detail"
        ],
        "title": "ErrorResponse",
        "description": "Standard error response payload returned by HTTPException."
      },
      "FXRatesResponse": {
        "properties": {
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timestamp",
            "description": "ISO 8601 UTC timestamp for this record."
          },
          "rates": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object",
            "title": "Rates",
            "description": "Rates value."
          }
        },
        "type": "object",
        "required": [
          "rates"
        ],
        "title": "FXRatesResponse",
        "description": "FX rates response - returns USD to X conversion rates."
      },
      "IndicatorDataCoverage": {
        "properties": {
          "candle_count": {
            "type": "integer",
            "title": "Candle Count",
            "description": "Number of candle buckets used for indicator computation."
          },
          "first_bucket": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "First Bucket",
            "description": "ISO 8601 UTC timestamp of the earliest candle bucket used."
          },
          "last_bucket": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Bucket",
            "description": "ISO 8601 UTC timestamp of the latest candle bucket used."
          },
          "sufficient_for": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Sufficient For",
            "description": "Indicator families with sufficient data coverage."
          },
          "insufficient_for": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Insufficient For",
            "description": "Indicator families with insufficient data coverage."
          }
        },
        "type": "object",
        "required": [
          "candle_count"
        ],
        "title": "IndicatorDataCoverage",
        "description": "Data sufficiency information for computed indicators."
      },
      "IndicatorMomentum": {
        "properties": {
          "rsi_14": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rsi 14",
            "description": "Relative Strength Index value over 14 periods."
          },
          "macd_line": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Macd Line",
            "description": "MACD line value."
          },
          "macd_signal": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Macd Signal",
            "description": "MACD signal line value."
          },
          "macd_histogram": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Macd Histogram",
            "description": "MACD histogram value."
          },
          "sma_20": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sma 20",
            "description": "Simple moving average over 20 periods."
          },
          "sma_50": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sma 50",
            "description": "Simple moving average over 50 periods."
          },
          "sma_200": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sma 200",
            "description": "Simple moving average over 200 periods."
          },
          "ema_12": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ema 12",
            "description": "Exponential moving average over 12 periods."
          },
          "ema_26": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ema 26",
            "description": "Exponential moving average over 26 periods."
          },
          "bb_upper": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bb Upper",
            "description": "Upper Bollinger Band value."
          },
          "bb_middle": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bb Middle",
            "description": "Middle Bollinger Band value."
          },
          "bb_lower": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bb Lower",
            "description": "Lower Bollinger Band value."
          }
        },
        "type": "object",
        "title": "IndicatorMomentum",
        "description": "Momentum indicator values."
      },
      "IndicatorSignals": {
        "properties": {
          "rsi": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rsi",
            "description": "Derived RSI signal label."
          },
          "macd": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Macd",
            "description": "Derived MACD signal label."
          },
          "trend": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trend",
            "description": "Market trend metrics."
          },
          "bollinger": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bollinger",
            "description": "Derived Bollinger Bands signal label."
          },
          "volatility": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volatility",
            "description": "Volatility indicator values."
          },
          "composite_score": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Composite Score",
            "description": "Composite signal score synthesized from indicator signals."
          }
        },
        "type": "object",
        "title": "IndicatorSignals",
        "description": "Derived signal labels from indicator values."
      },
      "IndicatorVolatility": {
        "properties": {
          "atr_14": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Atr 14",
            "description": "Average True Range value over 14 periods."
          },
          "historical_volatility_20": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Historical Volatility 20",
            "description": "Historical volatility value over 20 periods."
          },
          "kc_upper": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kc Upper",
            "description": "Upper Keltner Channel value."
          },
          "kc_middle": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kc Middle",
            "description": "Middle Keltner Channel value."
          },
          "kc_lower": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Kc Lower",
            "description": "Lower Keltner Channel value."
          }
        },
        "type": "object",
        "title": "IndicatorVolatility",
        "description": "Volatility indicator values."
      },
      "IndicatorVolume": {
        "properties": {
          "vwap": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Vwap",
            "description": "Volume-weighted average price value."
          },
          "obv": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Obv",
            "description": "On-balance volume value."
          },
          "volume_sma_20": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume Sma 20",
            "description": "Simple moving average of volume over 20 periods."
          }
        },
        "type": "object",
        "title": "IndicatorVolume",
        "description": "Volume indicator values."
      },
      "InspectInfo": {
        "properties": {
          "in_game": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "In Game",
            "description": "In-game inspect link URL."
          },
          "screenshot_front": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Screenshot Front",
            "description": "Front screenshot URL for the inspected item."
          },
          "screenshot_back": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Screenshot Back",
            "description": "Back screenshot URL for the inspected item."
          }
        },
        "type": "object",
        "title": "InspectInfo",
        "description": "In-game inspect link and screenshot URLs."
      },
      "ItemOut": {
        "properties": {
          "item_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id",
            "description": "Catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phase/variant label for phased finishes when applicable."
          },
          "item_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Type",
            "description": "Top-level item class (for example `weapon`, `gloves`, `sticker`)."
          },
          "item_subtype": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Subtype",
            "description": "Sub-classification within `item_type` (for example weapon family)."
          },
          "weapon_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weapon Type",
            "description": "Weapon-specific classification when applicable."
          },
          "base_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Name",
            "description": "Base weapon/item name without finish or wear qualifiers."
          },
          "skin_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Skin Name",
            "description": "Finish/paint name applied to the base item."
          },
          "wear_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wear Name",
            "description": "Exterior/wear bucket (for example `Factory New`, `Field-Tested`)."
          },
          "def_index": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Def Index",
            "description": "CS2 definition index (`def_index`) identifying the base item type."
          },
          "paint_index": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Paint Index",
            "description": "CS2 paint/finish index (`paint_index`) for the skin variant."
          },
          "collection": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Collection",
            "description": "Collection name the item belongs to, when known."
          },
          "collection_image": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Collection Image",
            "description": "Image URL for the item's collection, when known."
          },
          "crates": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Crates",
            "description": "Case/crate sources associated with the item."
          },
          "crates_images": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Crates Images",
            "description": "Image URLs for the associated cases/crates. Indexes align with the `crates` array."
          },
          "release_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Release Date",
            "description": "Item release date inferred from direct item, collection, or crate metadata."
          },
          "rarity_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rarity Name",
            "description": "Human-readable rarity tier name."
          },
          "rarity_color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rarity Color",
            "description": "Rarity color as a normalized alias/hex value."
          },
          "style_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Style Name",
            "description": "Style classification used for grouped finish families."
          },
          "is_stattrak": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Stattrak",
            "description": "Whether the item is a StatTrak variant."
          },
          "is_souvenir": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Souvenir",
            "description": "Whether the item is a Souvenir variant."
          },
          "min_float": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Float",
            "description": "Minimum possible float value for this item variant."
          },
          "max_float": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Float",
            "description": "Maximum possible float value for this item variant."
          },
          "image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image Url",
            "description": "Image URL for item artwork/icon."
          },
          "supply": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Supply",
            "description": "Total circulating supply (approximate)."
          }
        },
        "type": "object",
        "required": [
          "market_hash_name"
        ],
        "title": "ItemOut",
        "description": "Catalog item metadata returned by `/v1/items`."
      },
      "ItemsCatalogSummary": {
        "properties": {
          "total_items": {
            "type": "integer",
            "title": "Total Items",
            "description": "Total number of catalog items currently available."
          }
        },
        "type": "object",
        "required": [
          "total_items"
        ],
        "title": "ItemsCatalogSummary"
      },
      "ItemsFilterMetadata": {
        "properties": {
          "item_type": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Item Type",
            "description": "Available item type filters."
          },
          "item_subtype": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Item Subtype",
            "description": "Available item subtype filters."
          },
          "weapon_type": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Weapon Type",
            "description": "Available weapon type filters."
          },
          "wear_name": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Wear Name",
            "description": "Available wear filters."
          },
          "phase": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Phase",
            "description": "Available phase filters."
          },
          "collection": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Collection",
            "description": "Available collection filters."
          },
          "rarity_name": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Rarity Name",
            "description": "Available rarity-name filters."
          },
          "rarity_color": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Rarity Color",
            "description": "Available rarity-color filters."
          },
          "style_name": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Style Name",
            "description": "Available style-name filters."
          }
        },
        "type": "object",
        "required": [
          "item_type",
          "item_subtype",
          "weapon_type",
          "wear_name",
          "phase",
          "collection",
          "rarity_name",
          "rarity_color",
          "style_name"
        ],
        "title": "ItemsFilterMetadata"
      },
      "ItemsMetadataResponse": {
        "properties": {
          "catalog": {
            "$ref": "#/components/schemas/ItemsCatalogSummary",
            "description": "Catalog summary information."
          },
          "filters": {
            "$ref": "#/components/schemas/ItemsFilterMetadata",
            "description": "Available filter metadata."
          }
        },
        "type": "object",
        "required": [
          "catalog",
          "filters"
        ],
        "title": "ItemsMetadataResponse"
      },
      "ItemsPaginatedResponse_ItemOut_": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ItemOut"
            },
            "type": "array",
            "title": "Items",
            "description": "List of returned items."
          },
          "pagination": {
            "$ref": "#/components/schemas/ItemsPaginationMeta",
            "description": "Pagination metadata for this `/v1/items` response."
          }
        },
        "type": "object",
        "required": [
          "items",
          "pagination"
        ],
        "title": "ItemsPaginatedResponse[ItemOut]"
      },
      "ItemsPaginationMeta": {
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 0,
            "title": "Limit",
            "description": "Items included in this response window. When `/v1/items` is called without a `limit`, this equals the number of returned items and may exceed 1000."
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "title": "Offset",
            "description": "Starting position"
          },
          "total": {
            "type": "integer",
            "minimum": 0,
            "title": "Total",
            "description": "Total matching catalog items available."
          },
          "has_next": {
            "type": "boolean",
            "title": "Has Next",
            "description": "More items available after current page"
          },
          "has_prev": {
            "type": "boolean",
            "title": "Has Prev",
            "description": "Items available before current page"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Always null for `/v1/items`, which uses offset pagination only."
          }
        },
        "type": "object",
        "required": [
          "limit",
          "offset",
          "total",
          "has_next",
          "has_prev"
        ],
        "title": "ItemsPaginationMeta",
        "description": "Pagination metadata for `/v1/items` full-catalog responses."
      },
      "MarketArbitrageData": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/MarketArbitrageItem"
            },
            "type": "array",
            "title": "Items",
            "description": "List of returned items."
          }
        },
        "type": "object",
        "required": [
          "items"
        ],
        "title": "MarketArbitrageData",
        "description": "Arbitrage endpoint payload."
      },
      "MarketArbitrageItem": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "buy_provider": {
            "type": "string",
            "title": "Buy Provider",
            "description": "Provider offering the best buy-side price for this opportunity."
          },
          "sell_provider": {
            "type": "string",
            "title": "Sell Provider",
            "description": "Provider offering the best sell-side price for this opportunity."
          },
          "buy_price_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Buy Price Usd",
            "description": "Money amount as a decimal string in USD major units (for example \"25.82\")."
          },
          "sell_price_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Sell Price Usd",
            "description": "Money amount as a decimal string in USD major units (for example \"25.82\")."
          },
          "gross_spread_pct": {
            "type": "number",
            "title": "Gross Spread Pct",
            "description": "Gross spread percentage."
          },
          "estimated_fees_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Estimated Fees Usd",
            "description": "Money amount as a decimal string in USD major units (for example \"25.82\")."
          },
          "net_profit_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Net Profit Usd",
            "description": "Money amount as a decimal string in USD major units (for example \"25.82\")."
          },
          "last_updated": {
            "type": "string",
            "format": "date-time",
            "title": "Last Updated",
            "description": "ISO 8601 UTC timestamp when this record was last ingested or processed."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "buy_provider",
          "sell_provider",
          "buy_price_usd",
          "sell_price_usd",
          "gross_spread_pct",
          "estimated_fees_usd",
          "net_profit_usd",
          "last_updated"
        ],
        "title": "MarketArbitrageItem",
        "description": "Arbitrage opportunity payload."
      },
      "MarketArbitrageMeta": {
        "properties": {
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At",
            "description": "ISO 8601 UTC timestamp when this response was generated."
          },
          "data_source": {
            "type": "string",
            "enum": [
              "cache",
              "live",
              "mixed"
            ],
            "title": "Data Source",
            "description": "Primary data source used to build this response."
          },
          "freshness_sec": {
            "type": "integer",
            "minimum": 0,
            "title": "Freshness Sec",
            "description": "Estimated freshness of source data in seconds."
          },
          "window": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketTimeWindowMeta"
              },
              {
                "type": "null"
              }
            ],
            "description": "Effective analytics time window metadata."
          }
        },
        "type": "object",
        "required": [
          "generated_at",
          "data_source",
          "freshness_sec"
        ],
        "title": "MarketArbitrageMeta",
        "description": "Metadata for arbitrage endpoint."
      },
      "MarketArbitrageResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/MarketArbitrageMeta",
            "description": "Response metadata for this payload."
          },
          "data": {
            "$ref": "#/components/schemas/MarketArbitrageData",
            "description": "Primary data payload for this response."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Cursor pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data",
          "pagination"
        ],
        "title": "MarketArbitrageResponse",
        "description": "Response envelope for /v1/market/arbitrage."
      },
      "MarketHistoryChartMeta": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical market hash name for the item."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Target currency code for returned prices."
          },
          "start": {
            "type": "string",
            "format": "date-time",
            "title": "Start",
            "description": "ISO 8601 UTC start of the returned window."
          },
          "end": {
            "type": "string",
            "format": "date-time",
            "title": "End",
            "description": "ISO 8601 UTC end of the returned window."
          },
          "providers": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers",
            "description": "Provider keys actually returned (those with >=1 point in range)."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "currency",
          "start",
          "end"
        ],
        "title": "MarketHistoryChartMeta",
        "description": "Metadata for /v1/market/history/chart."
      },
      "MarketHistoryChartPoint": {
        "properties": {
          "t": {
            "type": "integer",
            "title": "T",
            "description": "UTC day bucket as a Unix timestamp (seconds, midnight)."
          },
          "price": {
            "type": "integer",
            "title": "Price",
            "description": "Closing price in minor units of the response currency."
          },
          "qty": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Qty",
            "description": "Listings/volume snapshot for the day. Semantics vary by provider (listings count or sales volume) and may be null."
          }
        },
        "type": "object",
        "required": [
          "t",
          "price"
        ],
        "title": "MarketHistoryChartPoint",
        "description": "One daily price point for a provider series."
      },
      "MarketHistoryChartResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/MarketHistoryChartMeta",
            "description": "Response metadata for this payload."
          },
          "series": {
            "items": {
              "$ref": "#/components/schemas/MarketHistoryChartSeries"
            },
            "type": "array",
            "title": "Series",
            "description": "Per-provider daily price-point series."
          }
        },
        "type": "object",
        "required": [
          "meta"
        ],
        "title": "MarketHistoryChartResponse",
        "description": "Response envelope for GET /v1/market/history/chart (Quant only)."
      },
      "MarketHistoryChartSeries": {
        "properties": {
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key."
          },
          "data": {
            "items": {
              "$ref": "#/components/schemas/MarketHistoryChartPoint"
            },
            "type": "array",
            "title": "Data",
            "description": "Daily points ordered by ascending bucket."
          }
        },
        "type": "object",
        "required": [
          "provider"
        ],
        "title": "MarketHistoryChartSeries",
        "description": "Per-provider daily price-point series."
      },
      "MarketIndexGroup": {
        "properties": {
          "group": {
            "type": "string",
            "title": "Group",
            "description": "Catalog category label for this group."
          },
          "marketcap_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Marketcap Usd",
            "description": "Money amount as a decimal string in USD major units (for example \"25.82\")."
          },
          "item_count": {
            "type": "integer",
            "title": "Item Count",
            "description": "Snapshot items in this category with a group label."
          },
          "included_count": {
            "type": "integer",
            "title": "Included Count",
            "description": "Items included in market cap aggregation after validation filters."
          },
          "excluded_count": {
            "type": "integer",
            "title": "Excluded Count",
            "description": "Items excluded because price/bid/marketcap data was incomplete or spread was too high."
          }
        },
        "type": "object",
        "required": [
          "group",
          "marketcap_usd",
          "item_count",
          "included_count",
          "excluded_count"
        ],
        "title": "MarketIndexGroup",
        "description": "Single group row for /v1/market/indexes."
      },
      "MarketIndexesData": {
        "properties": {
          "total_marketcap_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Total Marketcap Usd",
            "description": "Money amount as a decimal string in USD major units (for example \"25.82\")."
          },
          "groups": {
            "items": {
              "$ref": "#/components/schemas/MarketIndexGroup"
            },
            "type": "array",
            "title": "Groups",
            "description": "Category groups sorted by market cap descending."
          }
        },
        "type": "object",
        "required": [
          "total_marketcap_usd",
          "groups"
        ],
        "title": "MarketIndexesData",
        "description": "Payload for /v1/market/indexes."
      },
      "MarketIndexesMeta": {
        "properties": {
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At",
            "description": "ISO 8601 UTC timestamp when this response was generated."
          },
          "data_source": {
            "type": "string",
            "enum": [
              "cache",
              "live",
              "mixed"
            ],
            "title": "Data Source",
            "description": "Primary data source used to build this response."
          },
          "freshness_sec": {
            "type": "integer",
            "minimum": 0,
            "title": "Freshness Sec",
            "description": "Estimated freshness of source data in seconds."
          },
          "window": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketTimeWindowMeta"
              },
              {
                "type": "null"
              }
            ],
            "description": "Effective analytics time window metadata."
          },
          "group_by": {
            "type": "string",
            "enum": [
              "item_type",
              "weapon_type"
            ],
            "title": "Group By",
            "description": "Catalog dimension used to group market items."
          }
        },
        "type": "object",
        "required": [
          "generated_at",
          "data_source",
          "freshness_sec",
          "group_by"
        ],
        "title": "MarketIndexesMeta",
        "description": "Metadata for /v1/market/indexes."
      },
      "MarketIndexesResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/MarketIndexesMeta",
            "description": "Response metadata for this payload."
          },
          "data": {
            "$ref": "#/components/schemas/MarketIndexesData",
            "description": "Primary data payload for this response."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data"
        ],
        "title": "MarketIndexesResponse",
        "description": "Response envelope for /v1/market/indexes."
      },
      "MarketIndicatorsItemData": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key used by this API."
          },
          "interval": {
            "type": "string",
            "title": "Interval",
            "description": "Interval value."
          },
          "close_price_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Close Price Usd",
            "description": "USD-denominated value for close price."
          },
          "momentum": {
            "$ref": "#/components/schemas/IndicatorMomentum",
            "description": "Momentum value."
          },
          "volatility": {
            "$ref": "#/components/schemas/IndicatorVolatility",
            "description": "Volatility value."
          },
          "volume": {
            "$ref": "#/components/schemas/IndicatorVolume",
            "description": "Volume value."
          },
          "signals": {
            "$ref": "#/components/schemas/IndicatorSignals",
            "description": "Signals value."
          },
          "coverage": {
            "$ref": "#/components/schemas/IndicatorDataCoverage",
            "description": "Coverage value."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "provider",
          "interval",
          "close_price_usd",
          "momentum",
          "volatility",
          "volume",
          "signals",
          "coverage"
        ],
        "title": "MarketIndicatorsItemData",
        "description": "Full indicator data for one item (individual mode)."
      },
      "MarketIndicatorsItemResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/MarketIndicatorsMeta",
            "description": "Response metadata for this payload."
          },
          "data": {
            "$ref": "#/components/schemas/MarketIndicatorsItemData",
            "description": "Primary data payload for this response."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data"
        ],
        "title": "MarketIndicatorsItemResponse",
        "description": "Response envelope for /v1/market/indicators (individual item mode)."
      },
      "MarketIndicatorsMeta": {
        "properties": {
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At",
            "description": "ISO 8601 UTC timestamp when this response was generated."
          },
          "data_source": {
            "type": "string",
            "enum": [
              "cache",
              "live",
              "mixed"
            ],
            "title": "Data Source",
            "description": "Primary data source used to build this response."
          },
          "freshness_sec": {
            "type": "integer",
            "minimum": 0,
            "title": "Freshness Sec",
            "description": "Estimated freshness of source data in seconds."
          },
          "window": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketTimeWindowMeta"
              },
              {
                "type": "null"
              }
            ],
            "description": "Effective analytics time window metadata."
          },
          "interval": {
            "type": "string",
            "title": "Interval",
            "description": "Interval value."
          },
          "provider": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider",
            "description": "Provider key used by this API."
          }
        },
        "type": "object",
        "required": [
          "generated_at",
          "data_source",
          "freshness_sec",
          "interval"
        ],
        "title": "MarketIndicatorsMeta",
        "description": "Metadata for indicators endpoint."
      },
      "MarketItem": {
        "properties": {
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key used by this API."
          },
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "lowest_ask": {
            "type": "integer",
            "title": "Lowest Ask",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "lowest_ask_decimal": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lowest Ask Decimal",
            "description": "Price as a decimal string in the response currency, with precision that scales to magnitude: two decimal places at or above 1.0, eight below it. Use this field for currencies where the integer minor-units field would round to 0 (notably cryptocurrencies such as BTC, for example \"0.00041600\")."
          },
          "quantity": {
            "type": "integer",
            "title": "Quantity",
            "description": "Quantity count for this record."
          },
          "link": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Link",
            "description": "Branded redirect URL via this API domain (`/r/{provider}/{item_id}`), which resolves to the marketplace listing and may include affiliate/referral tracking."
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "Raw direct marketplace listing URL (no API-domain redirect). Returned only for paid tiers (`pro` · `quant`); free-tier responses omit this field outright."
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Timestamp",
            "description": "ISO 8601 UTC timestamp for this record."
          },
          "last_updated": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Updated",
            "description": "ISO 8601 UTC timestamp when this record was last ingested or processed."
          }
        },
        "type": "object",
        "required": [
          "provider",
          "item_id",
          "market_hash_name",
          "lowest_ask",
          "quantity"
        ],
        "title": "MarketItem",
        "description": "An item's price data from a specific provider."
      },
      "MarketItemAnalyticsCoverage": {
        "properties": {
          "provider_count": {
            "type": "integer",
            "title": "Provider Count",
            "description": "Number of providers with at least one active listing for this item."
          },
          "providers_with_volume": {
            "type": "integer",
            "title": "Providers With Volume",
            "description": "Providers with depletion activity volume data."
          },
          "providers_with_bid_side": {
            "type": "integer",
            "title": "Providers With Bid Side",
            "description": "Providers with bid side value."
          }
        },
        "type": "object",
        "required": [
          "provider_count",
          "providers_with_volume",
          "providers_with_bid_side"
        ],
        "title": "MarketItemAnalyticsCoverage",
        "description": "Coverage diagnostics for single-item analytics."
      },
      "MarketItemAnalyticsData": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "summary": {
            "$ref": "#/components/schemas/MarketItemAnalyticsSummary",
            "description": "Summary value."
          },
          "providers": {
            "items": {
              "$ref": "#/components/schemas/MarketItemAnalyticsProvider"
            },
            "type": "array",
            "title": "Providers",
            "description": "Providers value."
          },
          "coverage": {
            "$ref": "#/components/schemas/MarketItemAnalyticsCoverage",
            "description": "Coverage value."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "summary",
          "providers",
          "coverage"
        ],
        "title": "MarketItemAnalyticsData",
        "description": "Payload for /v1/market/items/{item_id}."
      },
      "MarketItemAnalyticsProvider": {
        "properties": {
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key used by this API."
          },
          "ask_usd": {
            "type": "string",
            "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$",
            "title": "Ask Usd",
            "description": "Ask price in USD major units."
          },
          "bid_usd": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bid Usd",
            "description": "Bid price in USD major units when available."
          },
          "spread_usd": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spread Usd",
            "description": "Absolute spread in USD major units when available."
          },
          "spread_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spread Pct",
            "description": "Bid/ask spread percentage."
          },
          "ask_depth": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ask Depth",
            "description": "Depth of sell-side listings used for spread/liquidity metrics."
          },
          "bid_depth": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bid Depth",
            "description": "Depth of buy-side listings used for spread/liquidity metrics."
          },
          "volume_24h": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume 24H",
            "description": "Depletion activity volume over the last 24 hours."
          },
          "volume_7d": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume 7D",
            "description": "Depletion activity volume over the last 7 days."
          },
          "total_value_24h_usd": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Value 24H Usd",
            "description": "Total traded value over 24 hours in USD major units."
          },
          "price_rate_24h": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Rate 24H",
            "description": "Percentage price change over the last 24 hours."
          },
          "price_diff_24h": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Diff 24H",
            "description": "Price change over the last 24 hours in USD major units."
          },
          "price_rate_7d": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Rate 7D",
            "description": "Percentage price change over the last 7 days."
          },
          "price_diff_7d": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Diff 7D",
            "description": "Price change over the last 7 days in USD major units."
          },
          "price_rate_30d": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Rate 30D",
            "description": "Percentage price change over the last 30 days."
          },
          "price_diff_30d": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Diff 30D",
            "description": "Price change over the last 30 days in USD major units."
          },
          "bid_anomaly": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Bid Anomaly",
            "description": "Whether bid is greater than or equal to ask (anomalous market state)."
          }
        },
        "type": "object",
        "required": [
          "provider",
          "ask_usd"
        ],
        "title": "MarketItemAnalyticsProvider",
        "description": "Provider-level item analytics payload."
      },
      "MarketItemAnalyticsResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/MarketMeta",
            "description": "Response metadata for this payload."
          },
          "data": {
            "$ref": "#/components/schemas/MarketItemAnalyticsData",
            "description": "Primary data payload for this response."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data"
        ],
        "title": "MarketItemAnalyticsResponse",
        "description": "Response envelope for /v1/market/items/{item_id}."
      },
      "MarketItemAnalyticsSummary": {
        "properties": {
          "provider_count": {
            "type": "integer",
            "title": "Provider Count",
            "description": "Number of providers with at least one active listing for this item."
          },
          "best_ask_usd": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Best Ask Usd",
            "description": "Best ask price in USD major units."
          },
          "best_bid_usd": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Best Bid Usd",
            "description": "Highest eligible bid in USD major units, excluding same-provider bids greater than or equal to the current ask."
          },
          "avg_spread_pct": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Avg Spread Pct",
            "description": "Percentage value for avg spread."
          },
          "total_volume_24h": {
            "type": "integer",
            "title": "Total Volume 24H",
            "description": "Alias of sales_1d for backward compatibility."
          },
          "liquidity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Liquidity",
            "description": "Item-level liquidity score."
          },
          "supply": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Supply",
            "description": "Effective item supply used for market cap/rank: catalog supply first, otherwise live listings."
          },
          "rank": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rank",
            "description": "Descending rank by market cap across items (highest market cap = 1)."
          },
          "marketcap": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Marketcap",
            "description": "Best ask in USD multiplied by the effective supply, in USD major units."
          },
          "price_rate_24h": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Rate 24H",
            "description": "Percentage price change over the last 24 hours."
          },
          "price_diff_24h": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Diff 24H",
            "description": "Price change over the last 24 hours in USD major units."
          },
          "price_rate_7d": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Rate 7D",
            "description": "Percentage price change over the last 7 days."
          },
          "price_diff_7d": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Diff 7D",
            "description": "Price change over the last 7 days in USD major units."
          },
          "price_rate_30d": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Rate 30D",
            "description": "Percentage price change over the last 30 days."
          },
          "price_diff_30d": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Price Diff 30D",
            "description": "Price change over the last 30 days in USD major units."
          },
          "sales_1d": {
            "type": "integer",
            "title": "Sales 1D",
            "description": "Total depletion activity volume observed over the last 24 hours."
          },
          "sales_7d": {
            "type": "integer",
            "title": "Sales 7D",
            "description": "Total depletion activity volume observed over the last 7 days."
          },
          "sales_30d": {
            "type": "integer",
            "title": "Sales 30D",
            "description": "Total depletion activity volume observed over the last 30 days."
          },
          "steam_sales_7d": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Steam Sales 7D",
            "description": "Steam-reported sales count over the last 7 days when available."
          },
          "steam_sales_30d": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Steam Sales 30D",
            "description": "Steam-reported sales count over the last 30 days when available."
          },
          "listing_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Listing Score",
            "description": "Fresh competitive listing-depth component score (0-15)."
          },
          "gap_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gap Score",
            "description": "Fee-adjusted same-provider execution-quality component score (0-25)."
          },
          "volume_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume Score",
            "description": "Smoothed confirmed sales-velocity component score (0-45)."
          },
          "stability_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stability Score",
            "description": "Provider-normalized 24h price-stability component score (0-5)."
          },
          "external_score": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "External Score",
            "description": "Provider and sales-data coverage confidence score (0-10)."
          },
          "liquidity_last_updated": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Liquidity Last Updated",
            "description": "ISO 8601 UTC timestamp when item liquidity was last refreshed."
          }
        },
        "type": "object",
        "required": [
          "provider_count",
          "total_volume_24h",
          "sales_1d",
          "sales_7d",
          "sales_30d"
        ],
        "title": "MarketItemAnalyticsSummary",
        "description": "Quick summary for single-item analytics."
      },
      "MarketItemsSnapshotData": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/MarketItemsSnapshotItem"
            },
            "type": "array",
            "title": "Items",
            "description": "Returned market item summaries."
          }
        },
        "type": "object",
        "required": [
          "items"
        ],
        "title": "MarketItemsSnapshotData",
        "description": "Payload for /v1/market/items."
      },
      "MarketItemsSnapshotItem": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "summary": {
            "$ref": "#/components/schemas/MarketItemAnalyticsSummary",
            "description": "Summary value."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "summary"
        ],
        "title": "MarketItemsSnapshotItem",
        "description": "Summary-only item row for /v1/market/items."
      },
      "MarketItemsSnapshotResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/MarketMeta",
            "description": "Response metadata for this payload."
          },
          "data": {
            "$ref": "#/components/schemas/MarketItemsSnapshotData",
            "description": "Primary data payload for this response."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data"
        ],
        "title": "MarketItemsSnapshotResponse",
        "description": "Response envelope for /v1/market/items."
      },
      "MarketMeta": {
        "properties": {
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At",
            "description": "ISO 8601 UTC timestamp when this response was generated."
          },
          "data_source": {
            "type": "string",
            "enum": [
              "cache",
              "live",
              "mixed"
            ],
            "title": "Data Source",
            "description": "Primary data source used to build this response."
          },
          "freshness_sec": {
            "type": "integer",
            "minimum": 0,
            "title": "Freshness Sec",
            "description": "Estimated freshness of source data in seconds."
          },
          "window": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketTimeWindowMeta"
              },
              {
                "type": "null"
              }
            ],
            "description": "Effective analytics time window metadata."
          }
        },
        "type": "object",
        "required": [
          "generated_at",
          "data_source",
          "freshness_sec"
        ],
        "title": "MarketMeta",
        "description": "Shared metadata for redesigned market endpoints."
      },
      "MarketTimeWindowMeta": {
        "properties": {
          "timeframe": {
            "type": "string",
            "title": "Timeframe",
            "description": "Requested liquidity horizon. Liquidity v2 currently normalizes all requests to its canonical 24h score, which smooths confirmed 24h/7d/30d sales evidence."
          }
        },
        "type": "object",
        "required": [
          "timeframe"
        ],
        "title": "MarketTimeWindowMeta",
        "description": "Preset time window used for the analytics query."
      },
      "PaginationMeta": {
        "properties": {
          "limit": {
            "type": "integer",
            "maximum": 1000,
            "minimum": 1,
            "title": "Limit",
            "description": "Items per page"
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "title": "Offset",
            "description": "Starting position"
          },
          "total": {
            "type": "integer",
            "minimum": -1,
            "title": "Total",
            "description": "Total items available. Cursor-based endpoints may return `-1` when the total count is intentionally skipped for performance."
          },
          "has_next": {
            "type": "boolean",
            "title": "Has Next",
            "description": "More items available after current page"
          },
          "has_prev": {
            "type": "boolean",
            "title": "Has Prev",
            "description": "Items available before current page"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor",
            "description": "Opaque cursor to request the next page of results for cursor endpoints."
          }
        },
        "type": "object",
        "required": [
          "limit",
          "offset",
          "total",
          "has_next",
          "has_prev"
        ],
        "title": "PaginationMeta",
        "description": "Unified pagination metadata for all list endpoints."
      },
      "PhaseName": {
        "type": "string",
        "enum": [
          "Phase 1",
          "Phase 2",
          "Phase 3",
          "Phase 4",
          "Sapphire",
          "Ruby",
          "Black Pearl",
          "Emerald"
        ],
        "title": "PhaseName",
        "description": "Doppler and other item phases - single definition."
      },
      "PortfolioAddItemRequest": {
        "properties": {
          "item_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id",
            "description": "Catalog item ID."
          },
          "market_hash_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Hash Name",
            "description": "Steam market hash name (resolved to item_id if item_id omitted)."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Optional phase for Doppler/Gamma Doppler items when adding by market_hash_name."
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "title": "Quantity",
            "description": "Number of units to add."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "quantity"
        ],
        "title": "PortfolioAddItemRequest",
        "description": "Request body for POST /v1/portfolio/{portfolio_id}/items."
      },
      "PortfolioCreate": {
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "title": "Name",
            "description": "Display name for this portfolio."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "name"
        ],
        "title": "PortfolioCreate",
        "description": "Request body for POST /v1/portfolio."
      },
      "PortfolioData": {
        "properties": {
          "line_items": {
            "items": {
              "$ref": "#/components/schemas/PortfolioLineItem"
            },
            "type": "array",
            "title": "Line Items",
            "description": "Per-item valuation breakdown."
          },
          "total_value": {
            "type": "integer",
            "title": "Total Value",
            "description": "Sum of all item_value fields. Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "items_valued": {
            "type": "integer",
            "title": "Items Valued",
            "description": "Number of items with a computable value."
          },
          "items_not_found": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Items Not Found",
            "description": "Item IDs with no price data available."
          }
        },
        "type": "object",
        "required": [
          "line_items",
          "total_value",
          "items_valued",
          "items_not_found"
        ],
        "title": "PortfolioData",
        "description": "Primary data payload for portfolio valuation."
      },
      "PortfolioHistoryMeta": {
        "properties": {
          "portfolio_id": {
            "type": "string",
            "title": "Portfolio Id",
            "description": "Portfolio UUID."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Currency code for all money values."
          },
          "providers_queried": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers Queried",
            "description": "Provider keys queried."
          },
          "start_date": {
            "type": "string",
            "format": "date",
            "title": "Start Date",
            "description": "Inclusive UTC start date for the requested window."
          },
          "end_date": {
            "type": "string",
            "format": "date",
            "title": "End Date",
            "description": "Inclusive UTC end date for the requested window."
          },
          "interval": {
            "type": "string",
            "const": "1d",
            "title": "Interval",
            "description": "History interval. Always `1d`.",
            "default": "1d"
          },
          "holdings_basis": {
            "type": "string",
            "enum": [
              "ledger_close",
              "current_holdings"
            ],
            "title": "Holdings Basis",
            "description": "Holdings basis. `ledger_close` replays holdings from the transaction ledger; `current_holdings` values the portfolio's current holdings flat across the window (no transactions required).",
            "default": "ledger_close"
          },
          "valuation_basis": {
            "type": "string",
            "const": "best_provider_close",
            "title": "Valuation Basis",
            "description": "Valuation basis. Always `best_provider_close`.",
            "default": "best_provider_close"
          }
        },
        "type": "object",
        "required": [
          "portfolio_id",
          "currency",
          "providers_queried",
          "start_date",
          "end_date"
        ],
        "title": "PortfolioHistoryMeta",
        "description": "Metadata for saved-portfolio historical valuation."
      },
      "PortfolioHistoryPage": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/PortfolioHistoryMeta",
            "description": "Response metadata."
          },
          "data": {
            "items": {
              "$ref": "#/components/schemas/PortfolioHistoryPoint"
            },
            "type": "array",
            "title": "Data",
            "description": "Ordered daily valuation points."
          },
          "pagination": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CursorPaginationMeta"
              }
            ],
            "description": "Cursor pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data",
          "pagination"
        ],
        "title": "PortfolioHistoryPage",
        "description": "Response envelope for GET /v1/portfolio/{portfolio_id}/history."
      },
      "PortfolioHistoryPoint": {
        "properties": {
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date",
            "description": "UTC calendar day represented by this point."
          },
          "total_value": {
            "type": "integer",
            "title": "Total Value",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "positions": {
            "type": "integer",
            "title": "Positions",
            "description": "Distinct portfolio positions with positive holdings."
          },
          "items_valued": {
            "type": "integer",
            "title": "Items Valued",
            "description": "Positions included in total_value for the day."
          },
          "items_missing_price": {
            "type": "integer",
            "title": "Items Missing Price",
            "description": "Positions with holdings but no usable price for the day."
          }
        },
        "type": "object",
        "required": [
          "date",
          "total_value",
          "positions",
          "items_valued",
          "items_missing_price"
        ],
        "title": "PortfolioHistoryPoint",
        "description": "One daily historical portfolio valuation point."
      },
      "PortfolioImportRequest": {
        "properties": {
          "asset_ids": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Asset Ids",
            "description": "Steam asset IDs to import. Omit to import the entire inventory. Only items resolvable in the CS2C catalog are stored."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "PortfolioImportRequest",
        "description": "Request body for POST /v1/portfolio/{portfolio_id}/import."
      },
      "PortfolioImportResult": {
        "properties": {
          "imported": {
            "type": "integer",
            "title": "Imported",
            "description": "Items added to the portfolio."
          },
          "skipped": {
            "type": "integer",
            "title": "Skipped",
            "description": "Items already present in the portfolio (by asset ID) — not re-added."
          },
          "unresolved": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Unresolved",
            "description": "market_hash_name values that could not be matched to the CS2C catalog. These items were not imported."
          }
        },
        "type": "object",
        "required": [
          "imported",
          "skipped",
          "unresolved"
        ],
        "title": "PortfolioImportResult",
        "description": "Result of an inventory import operation."
      },
      "PortfolioItemOut": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Entry UUID."
          },
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Catalog item ID."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Steam market hash name."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Catalog phase when applicable."
          },
          "quantity": {
            "type": "integer",
            "title": "Quantity",
            "description": "Number of units held."
          },
          "source": {
            "type": "string",
            "title": "Source",
            "description": "How the item was added: 'steam' or 'manual'."
          },
          "steam_assetid": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Steam Assetid",
            "description": "Steam asset ID if imported."
          },
          "float_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Float Value",
            "description": "Wear float value."
          },
          "paint_seed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Paint Seed",
            "description": "Paint seed / pattern template."
          },
          "inspect_link": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Inspect Link",
            "description": "Full Steam inspect link."
          },
          "name_tag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name Tag",
            "description": "Custom name tag applied to item."
          },
          "stickers": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/StickerInfo"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stickers",
            "description": "Applied stickers with wear."
          },
          "charms": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CharmInfo"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Charms",
            "description": "Attached charms/keychains."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "When this entry was added."
          }
        },
        "type": "object",
        "required": [
          "id",
          "item_id",
          "market_hash_name",
          "quantity",
          "source",
          "created_at"
        ],
        "title": "PortfolioItemOut",
        "description": "A single item entry within a portfolio."
      },
      "PortfolioLineItem": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "quantity": {
            "type": "integer",
            "title": "Quantity",
            "description": "Number of units held."
          },
          "best_ask": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Best Ask",
            "description": "Lowest ask price across queried providers. Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "best_bid": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Best Bid",
            "description": "Highest bid price across queried providers. Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "item_value": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Value",
            "description": "best_ask * quantity. Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image Url",
            "description": "Item image URL from the catalog, if known."
          },
          "rarity_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rarity Name",
            "description": "Item rarity name from the catalog (e.g. 'Covert'), if known."
          },
          "rarity_color": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Rarity Color",
            "description": "Item rarity hex color from the catalog, if known."
          },
          "providers": {
            "items": {
              "$ref": "#/components/schemas/BatchPriceQuote"
            },
            "type": "array",
            "title": "Providers",
            "description": "Per-provider price quotes."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "quantity"
        ],
        "title": "PortfolioLineItem",
        "description": "Valuation line item for one portfolio entry."
      },
      "PortfolioListResponse": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/PortfolioOut"
            },
            "type": "array",
            "title": "Data",
            "description": "User's portfolios."
          }
        },
        "type": "object",
        "required": [
          "data"
        ],
        "title": "PortfolioListResponse",
        "description": "Response envelope for GET /v1/portfolio."
      },
      "PortfolioMeta": {
        "properties": {
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Currency code for all money values."
          },
          "generated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Generated At",
            "description": "UTC timestamp when this response was generated."
          },
          "providers_queried": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers Queried",
            "description": "Provider keys queried."
          }
        },
        "type": "object",
        "required": [
          "currency",
          "generated_at",
          "providers_queried"
        ],
        "title": "PortfolioMeta",
        "description": "Response metadata for portfolio valuation."
      },
      "PortfolioOut": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Portfolio UUID."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name."
          },
          "item_count": {
            "type": "integer",
            "title": "Item Count",
            "description": "Number of items currently in the portfolio."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "When the portfolio was created."
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At",
            "description": "When the portfolio was last modified."
          }
        },
        "type": "object",
        "required": [
          "id",
          "name",
          "item_count",
          "created_at",
          "updated_at"
        ],
        "title": "PortfolioOut",
        "description": "Summary of a saved portfolio."
      },
      "PortfolioRequest": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PortfolioRequestItem"
            },
            "type": "array",
            "minItems": 1,
            "title": "Items",
            "description": "Items and quantities to value."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Target currency code.",
            "default": "USD"
          },
          "providers": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Providers",
            "description": "Provider key filters. Omit for all providers."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "items"
        ],
        "title": "PortfolioRequest",
        "description": "Request body for POST /v1/portfolio/value."
      },
      "PortfolioRequestItem": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID."
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "title": "Quantity",
            "description": "Number of units held."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "quantity"
        ],
        "title": "PortfolioRequestItem",
        "description": "Single item in a portfolio valuation request."
      },
      "PortfolioResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/PortfolioMeta",
            "description": "Response metadata."
          },
          "data": {
            "$ref": "#/components/schemas/PortfolioData",
            "description": "Valuation data."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data"
        ],
        "title": "PortfolioResponse",
        "description": "Response envelope for POST /v1/portfolio/value."
      },
      "PriceCandleItem": {
        "properties": {
          "t": {
            "type": "integer",
            "title": "T",
            "description": "Unix timestamp in seconds (UTC)."
          },
          "o": {
            "type": "integer",
            "title": "O",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "h": {
            "type": "integer",
            "title": "H",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "l": {
            "type": "integer",
            "title": "L",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "c": {
            "type": "integer",
            "title": "C",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "v": {
            "type": "integer",
            "title": "V",
            "description": "Estimated trade volume for the bucket, derived from inventory changes rather than reported sale counts, not transaction volume."
          },
          "q": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Q",
            "description": "Total number of active listings at the end of the bucket. Null for older 1d windows."
          },
          "providers": {
            "$ref": "#/components/schemas/Providers",
            "description": "Provider provenance for the returned open/high/low/close values in this composite candle."
          }
        },
        "type": "object",
        "required": [
          "t",
          "o",
          "h",
          "l",
          "c",
          "v",
          "providers"
        ],
        "title": "PriceCandleItem",
        "description": "Single OHLCV candle data point (time-varying fields only)."
      },
      "PriceCandlesMeta": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Composite provider scope for this response.",
            "default": "All Providers"
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency code for the value context."
          },
          "interval": {
            "type": "string",
            "title": "Interval",
            "description": "Time bucket interval used for aggregation."
          },
          "start": {
            "type": "string",
            "format": "date-time",
            "title": "Start",
            "description": "Inclusive start timestamp for the requested window (UTC)."
          },
          "end": {
            "type": "string",
            "format": "date-time",
            "title": "End",
            "description": "Exclusive end timestamp for the requested window (UTC)."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "currency",
          "interval",
          "start",
          "end"
        ],
        "title": "PriceCandlesMeta",
        "description": "Metadata for candles response (constant across all items)."
      },
      "PriceCandlesPage": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/PriceCandlesMeta",
            "description": "Response metadata for this payload."
          },
          "data": {
            "items": {
              "$ref": "#/components/schemas/PriceCandleItem"
            },
            "type": "array",
            "title": "Data",
            "description": "Primary data payload for this response."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "data"
        ],
        "title": "PriceCandlesPage",
        "description": "Candle response for a requested time window."
      },
      "PriceHistoryFiltersMeta": {
        "properties": {
          "item_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "provider": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AllProviders"
              },
              {
                "type": "null"
              }
            ],
            "title": "Provider",
            "description": "Provider key requested for this operation."
          },
          "start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start",
            "description": "Inclusive start timestamp for the requested window (UTC)."
          },
          "end": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "End",
            "description": "Inclusive end timestamp for the requested window (UTC)."
          }
        },
        "type": "object",
        "title": "PriceHistoryFiltersMeta",
        "description": "Filter metadata for price history endpoint."
      },
      "PriceHistoryMeta": {
        "properties": {
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency code for the value context."
          },
          "filters": {
            "$ref": "#/components/schemas/PriceHistoryFiltersMeta",
            "description": "Effective request filters applied to this response."
          },
          "result_count": {
            "type": "integer",
            "minimum": 0,
            "title": "Result Count",
            "description": "Number of records returned in this payload."
          }
        },
        "type": "object",
        "required": [
          "currency",
          "filters",
          "result_count"
        ],
        "title": "PriceHistoryMeta",
        "description": "Metadata for price history response."
      },
      "PriceSnapshot": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key used by this API."
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "title": "Time",
            "description": "Time value."
          },
          "price": {
            "type": "integer",
            "title": "Price",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency code for the value context."
          },
          "quantity": {
            "type": "integer",
            "title": "Quantity",
            "description": "Quantity value."
          }
        },
        "type": "object",
        "required": [
          "item_id",
          "market_hash_name",
          "provider",
          "time",
          "price",
          "currency",
          "quantity"
        ],
        "title": "PriceSnapshot",
        "description": "Single price snapshot at a point in time."
      },
      "PriceSnapshotPage": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/PriceHistoryMeta",
            "description": "Response metadata for this payload."
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/PriceSnapshot"
            },
            "type": "array",
            "title": "Items",
            "description": "List of returned items."
          },
          "pagination": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CursorPaginationMeta"
              }
            ],
            "description": "Pagination metadata for this response."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "items",
          "pagination"
        ],
        "title": "PriceSnapshotPage",
        "description": "Paginated price snapshots for raw mode."
      },
      "PricesFilterMeta": {
        "properties": {
          "item_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "requested_providers": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requested Providers",
            "description": "Provider keys requested for this operation."
          }
        },
        "type": "object",
        "title": "PricesFilterMeta",
        "description": "Filter metadata for prices and bids endpoints."
      },
      "PricesMeta": {
        "properties": {
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency code for the value context."
          },
          "filters": {
            "$ref": "#/components/schemas/PricesFilterMeta",
            "description": "Effective request filters applied to this response."
          },
          "providers_queried": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers Queried",
            "description": "Provider keys queried."
          }
        },
        "type": "object",
        "required": [
          "currency",
          "filters",
          "providers_queried"
        ],
        "title": "PricesMeta",
        "description": "Metadata for prices and bids responses."
      },
      "PricesPaginatedResponse_MarketItem_": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/PricesMeta",
            "description": "Response metadata for this payload."
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/MarketItem"
            },
            "type": "array",
            "title": "Items",
            "description": "List of returned items."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Pagination metadata for this response."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "items",
          "pagination"
        ],
        "title": "PricesPaginatedResponse[MarketItem]"
      },
      "ProviderFeatures": {
        "properties": {
          "has_buy_orders": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Has Buy Orders",
            "description": "Whether this payload has buy orders."
          },
          "has_recent_sales": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Has Recent Sales",
            "description": "Whether this payload has recent sales."
          }
        },
        "type": "object",
        "title": "ProviderFeatures"
      },
      "ProviderFees": {
        "properties": {
          "sell_fee": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sell Fee",
            "description": "Sell-side fee rate as a decimal fraction (for example 0.13 for 13%)."
          },
          "insta_sell_fee": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Insta Sell Fee",
            "description": "Instant-sell fee rate as a decimal fraction."
          },
          "trading_spread_fee": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Trading Spread Fee",
            "description": "Spread fee rate as a decimal fraction for trading flows."
          }
        },
        "type": "object",
        "title": "ProviderFees"
      },
      "ProviderHealth": {
        "properties": {
          "status": {
            "type": "string",
            "title": "Status",
            "description": "Health or processing status value."
          },
          "last_checked_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Checked At",
            "description": "ISO 8601 UTC timestamp when provider health was last computed."
          },
          "total_offers": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Offers",
            "description": "Total active offers currently observed for the provider."
          },
          "unique_items": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unique Items",
            "description": "Number of unique catalog items currently offered by the provider."
          },
          "market_coverage": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Coverage",
            "description": "Percentage of catalog items currently represented by this provider's offers."
          },
          "total_value": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Value",
            "description": "Total estimated value of all listings in the provider's native currency (see `default_currency`)."
          },
          "total_value_usd": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Total Value Usd",
            "description": "Total estimated value standardized to USD using current FX rates."
          }
        },
        "type": "object",
        "required": [
          "status"
        ],
        "title": "ProviderHealth"
      },
      "ProviderInfo": {
        "properties": {
          "key": {
            "type": "string",
            "title": "Key",
            "description": "Stable provider key used in request and response payloads."
          },
          "logo": {
            "type": "string",
            "title": "Logo",
            "description": "CDN URL for the provider logo asset."
          },
          "code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Code",
            "description": "Stable machine-readable code for this payload."
          },
          "market_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Type",
            "description": "Provider market type classification."
          },
          "default_currency": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Currency",
            "description": "Default settlement currency for the provider."
          },
          "fees": {
            "$ref": "#/components/schemas/ProviderFees",
            "description": "Fee configuration values keyed by fee type."
          },
          "features": {
            "$ref": "#/components/schemas/ProviderFeatures",
            "description": "Feature capability flags for this provider."
          },
          "health": {
            "$ref": "#/components/schemas/ProviderHealth",
            "description": "Provider health metrics and aggregate diagnostics."
          }
        },
        "type": "object",
        "required": [
          "key",
          "logo",
          "fees",
          "features",
          "health"
        ],
        "title": "ProviderInfo"
      },
      "Providers": {
        "properties": {
          "o": {
            "type": "string",
            "title": "O",
            "description": "Provider key that contributed the returned open value.",
            "default": "unknown"
          },
          "h": {
            "type": "string",
            "title": "H",
            "description": "Provider key that contributed the returned high value."
          },
          "l": {
            "type": "string",
            "title": "L",
            "description": "Provider key that contributed the returned low value."
          },
          "c": {
            "type": "string",
            "title": "C",
            "description": "Provider key that contributed the returned close value.",
            "default": "unknown"
          }
        },
        "type": "object",
        "required": [
          "h",
          "l"
        ],
        "title": "Providers",
        "description": "Provider provenance for composite candle values."
      },
      "RecentSalesProvider": {
        "type": "string",
        "enum": [
          "buff163",
          "c5",
          "csfloat",
          "csgo500",
          "csgoempire",
          "dmarket",
          "youpin"
        ],
        "title": "RecentSalesProvider",
        "description": "Provider keys that support Recent Sales."
      },
      "SaleRecordDetail": {
        "properties": {
          "date": {
            "type": "string",
            "title": "Date",
            "description": "ISO 8601 UTC timestamp for this event.",
            "format": "date-time"
          },
          "provider": {
            "type": "string",
            "title": "Provider",
            "description": "Provider key used by this API."
          },
          "price": {
            "type": "integer",
            "title": "Price",
            "description": "Money amount in minor units of the response currency (for example USD cents when currency=USD). Divide by 100 for display."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency code for the value context."
          },
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "float": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Float",
            "description": "Item float value in the range [0, 1], when available."
          },
          "paint_seed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Paint Seed",
            "description": "Paint seed value for the item when available."
          },
          "stickers": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/StickerInfo"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stickers",
            "description": "Sticker metadata attached to the item, when available."
          },
          "charms": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CharmInfo"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Charms",
            "description": "Charm/keychain metadata attached to the item, when available."
          },
          "inspect": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/InspectInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "Inspect-link and screenshot metadata, when available."
          }
        },
        "type": "object",
        "required": [
          "date",
          "provider",
          "price",
          "currency",
          "item_id",
          "market_hash_name"
        ],
        "title": "SaleRecordDetail",
        "description": "Sale record matching CSFloat API response format."
      },
      "SalesFiltersMeta": {
        "properties": {
          "item_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id",
            "description": "Normalized catalog item ID used by this API."
          },
          "market_hash_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "requested_providers": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Requested Providers",
            "description": "Provider keys requested for this operation."
          },
          "min_float": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Min Float",
            "description": "Inclusive minimum item float filter."
          },
          "max_float": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 1,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Max Float",
            "description": "Inclusive maximum item float filter."
          },
          "paint_seed": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 1000,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Paint Seed",
            "description": "Exact paint seed filter."
          },
          "stickers": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stickers",
            "description": "Normalized sticker names required by this response."
          },
          "charms": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Charms",
            "description": "Normalized charm/keychain name required by this response."
          },
          "limit": {
            "type": "integer",
            "maximum": 1000,
            "minimum": 1,
            "title": "Limit",
            "description": "Maximum number of records returned per page."
          }
        },
        "type": "object",
        "required": [
          "limit"
        ],
        "title": "SalesFiltersMeta",
        "description": "Filter metadata for sales endpoint."
      },
      "SalesHistoryResponse": {
        "properties": {
          "meta": {
            "$ref": "#/components/schemas/SalesMeta",
            "description": "Response metadata for this payload."
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/SaleRecordDetail"
            },
            "type": "array",
            "title": "Items",
            "description": "List of returned items."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Cursor pagination footer for this page."
          }
        },
        "type": "object",
        "required": [
          "meta",
          "items",
          "pagination"
        ],
        "title": "SalesHistoryResponse",
        "description": "Recent Sales response with request metadata."
      },
      "SalesMeta": {
        "properties": {
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "ISO 4217 currency code for the value context."
          },
          "filters": {
            "$ref": "#/components/schemas/SalesFiltersMeta",
            "description": "Effective request filters applied to this response."
          },
          "providers_queried": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "title": "Providers Queried",
            "description": "Provider keys queried while building this response."
          },
          "result_count": {
            "type": "integer",
            "maximum": 1000,
            "minimum": 0,
            "title": "Result Count",
            "description": "Number of records returned in this payload."
          }
        },
        "type": "object",
        "required": [
          "currency",
          "filters",
          "providers_queried",
          "result_count"
        ],
        "title": "SalesMeta",
        "description": "Metadata for sales response."
      },
      "SteamInventoryItem": {
        "properties": {
          "assetid": {
            "type": "string",
            "title": "Assetid",
            "description": "Steam asset ID — unique per inventory slot."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Steam market hash name."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Resolved Doppler/Gamma Doppler phase when identifiable from Steam metadata."
          },
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name."
          },
          "icon_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Icon Url",
            "description": "Steam CDN icon URL fragment."
          },
          "tradable": {
            "type": "boolean",
            "title": "Tradable",
            "description": "Whether the item is currently tradable."
          },
          "marketable": {
            "type": "boolean",
            "title": "Marketable",
            "description": "Whether the item can be listed on the Steam Market."
          },
          "quantity": {
            "type": "integer",
            "title": "Quantity",
            "description": "Stack size (almost always 1 for CS2 items)."
          },
          "float_value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Float Value",
            "description": "Wear float value."
          },
          "paint_seed": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Paint Seed",
            "description": "Paint seed / pattern template."
          },
          "inspect_link": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Inspect Link",
            "description": "Full Steam inspect link."
          },
          "name_tag": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name Tag",
            "description": "Custom name tag applied to item."
          },
          "stickers": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/StickerInfo"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Stickers",
            "description": "Applied stickers with wear."
          },
          "charms": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CharmInfo"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Charms",
            "description": "Attached charms/keychains."
          }
        },
        "type": "object",
        "required": [
          "assetid",
          "market_hash_name",
          "name",
          "tradable",
          "marketable",
          "quantity"
        ],
        "title": "SteamInventoryItem",
        "description": "A single item from a Steam CS2 inventory."
      },
      "SteamInventoryResponse": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/SteamInventoryItem"
            },
            "type": "array",
            "title": "Data",
            "description": "Items in the inventory."
          },
          "total_count": {
            "type": "integer",
            "title": "Total Count",
            "description": "Total inventory count reported by Steam."
          }
        },
        "type": "object",
        "required": [
          "data",
          "total_count"
        ],
        "title": "SteamInventoryResponse",
        "description": "Response envelope for GET /v1/portfolio/steam-inventory."
      },
      "StickerInfo": {
        "properties": {
          "name": {
            "type": "string",
            "title": "Name",
            "description": "Display name for this entity."
          },
          "slot": {
            "type": "integer",
            "title": "Slot",
            "description": "Sticker slot index on the item."
          },
          "wear": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Wear",
            "description": "Wear value for the sticker, when available."
          }
        },
        "type": "object",
        "required": [
          "name",
          "slot"
        ],
        "title": "StickerInfo",
        "description": "Sticker information."
      },
      "TransactionCreateRequest": {
        "properties": {
          "item_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id",
            "description": "Catalog item ID."
          },
          "market_hash_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Market Hash Name",
            "description": "Steam market hash name (resolved to item_id when item_id is omitted)."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phase for Doppler/Gamma Doppler items when adding by market_hash_name."
          },
          "type": {
            "type": "string",
            "enum": [
              "buy",
              "sell"
            ],
            "title": "Type",
            "description": "Transaction type."
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "title": "Quantity",
            "description": "Number of units."
          },
          "price": {
            "type": "integer",
            "minimum": 0,
            "title": "Price",
            "description": "Per-unit price in minor units (e.g. USD cents)."
          },
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date",
            "description": "Transaction date (YYYY-MM-DD)."
          },
          "fee_amount": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fee Amount",
            "description": "Fee in minor units."
          },
          "fee_percentage": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fee Percentage",
            "description": "Fee percentage."
          },
          "marketplace": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Marketplace",
            "description": "Marketplace name."
          },
          "note": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ],
            "title": "Note",
            "description": "Optional note."
          },
          "currency": {
            "type": "string",
            "maxLength": 8,
            "title": "Currency",
            "description": "Currency code.",
            "default": "USD"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "type",
          "quantity",
          "price",
          "date"
        ],
        "title": "TransactionCreateRequest",
        "description": "Request body for adding a transaction to a portfolio."
      },
      "TransactionOut": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Transaction UUID."
          },
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Catalog item ID."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Steam market hash name."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Catalog phase when applicable."
          },
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Transaction type: 'buy' or 'sell'."
          },
          "quantity": {
            "type": "integer",
            "title": "Quantity",
            "description": "Number of units."
          },
          "price": {
            "type": "integer",
            "title": "Price",
            "description": "Per-unit price in minor units."
          },
          "fee_amount": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fee Amount",
            "description": "Fee in minor units."
          },
          "fee_percentage": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Fee Percentage",
            "description": "Fee percentage."
          },
          "marketplace": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Marketplace",
            "description": "Marketplace name."
          },
          "date": {
            "type": "string",
            "format": "date",
            "title": "Date",
            "description": "Transaction date."
          },
          "note": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Note",
            "description": "Optional note."
          },
          "currency": {
            "type": "string",
            "title": "Currency",
            "description": "Currency code."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "When this transaction was recorded."
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At",
            "description": "When this transaction was last modified."
          }
        },
        "type": "object",
        "required": [
          "id",
          "item_id",
          "market_hash_name",
          "type",
          "quantity",
          "price",
          "date",
          "currency",
          "created_at",
          "updated_at"
        ],
        "title": "TransactionOut",
        "description": "A single transaction entry within a portfolio."
      },
      "TransactionUpdateRequest": {
        "properties": {
          "type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "buy",
                  "sell"
                ]
              },
              {
                "type": "null"
              }
            ],
            "title": "Type",
            "description": "Transaction type."
          },
          "quantity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Quantity",
            "description": "Number of units."
          },
          "price": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Price",
            "description": "Per-unit price in minor units."
          },
          "date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date"
              },
              {
                "type": "null"
              }
            ],
            "title": "Date",
            "description": "Transaction date."
          },
          "fee_amount": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fee Amount",
            "description": "Fee in minor units."
          },
          "fee_percentage": {
            "anyOf": [
              {
                "type": "number",
                "maximum": 100,
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Fee Percentage",
            "description": "Fee percentage."
          },
          "marketplace": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 64
              },
              {
                "type": "null"
              }
            ],
            "title": "Marketplace",
            "description": "Marketplace name."
          },
          "note": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 1000
              },
              {
                "type": "null"
              }
            ],
            "title": "Note",
            "description": "Optional note."
          },
          "currency": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 8
              },
              {
                "type": "null"
              }
            ],
            "title": "Currency",
            "description": "Currency code."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "TransactionUpdateRequest",
        "description": "Request body for partially updating a transaction."
      },
      "ValidationErrorItem": {
        "properties": {
          "type": {
            "type": "string",
            "title": "Type",
            "description": "Validation error type (e.g., enum, greater_than)"
          },
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Loc",
            "description": "Location of the error (e.g., ['query', 'limit'])"
          },
          "msg": {
            "type": "string",
            "title": "Msg",
            "description": "Human-readable validation message"
          },
          "input": {
            "anyOf": [
              {
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Input",
            "description": "The offending input value"
          },
          "ctx": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ctx",
            "description": "Additional context about the validation failure"
          }
        },
        "type": "object",
        "required": [
          "type",
          "loc",
          "msg"
        ],
        "title": "ValidationErrorItem",
        "description": "Single validation error entry returned by FastAPI/Pydantic."
      },
      "ValidationErrorResponse": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code",
            "description": "Stable machine-readable error code",
            "default": "VALIDATION_ERROR"
          },
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationErrorItem"
            },
            "type": "array",
            "title": "Detail",
            "description": "List of field-level validation errors."
          }
        },
        "type": "object",
        "required": [
          "detail"
        ],
        "title": "ValidationErrorResponse",
        "description": "Validation error response payload returned for 422 responses."
      },
      "WatchlistBatchCreateResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WatchlistItem"
            },
            "type": "array",
            "title": "Items",
            "description": "Watchlist entries created by this request."
          },
          "created_count": {
            "type": "integer",
            "title": "Created Count",
            "description": "Number of watchlist entries created."
          }
        },
        "type": "object",
        "required": [
          "items",
          "created_count"
        ],
        "title": "WatchlistBatchCreateResponse"
      },
      "WatchlistCreateBatchRequest": {
        "properties": {
          "item_ids": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "minItems": 1,
            "title": "Item Ids",
            "description": "Normalized catalog item IDs to save to the watchlist in one request."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "item_ids"
        ],
        "title": "WatchlistCreateBatchRequest"
      },
      "WatchlistCreateRequest": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/WatchlistCreateSingleRequest"
          },
          {
            "$ref": "#/components/schemas/WatchlistCreateBatchRequest"
          }
        ],
        "title": "WatchlistCreateRequest",
        "description": "Request body for POST /v1/account/watchlist."
      },
      "WatchlistCreateResponse": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/WatchlistItem"
          },
          {
            "$ref": "#/components/schemas/WatchlistBatchCreateResponse"
          }
        ],
        "title": "WatchlistCreateResponse",
        "description": "Response body for POST /v1/account/watchlist."
      },
      "WatchlistCreateSingleRequest": {
        "properties": {
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID to save to the watchlist."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "item_id"
        ],
        "title": "WatchlistCreateSingleRequest"
      },
      "WatchlistItem": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique identifier for this saved entry."
          },
          "item_id": {
            "type": "integer",
            "title": "Item Id",
            "description": "Normalized catalog item ID."
          },
          "market_hash_name": {
            "type": "string",
            "title": "Market Hash Name",
            "description": "Canonical Steam market hash name for the item."
          },
          "phase": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Phase",
            "description": "Phased finish/variant label when applicable."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when this entry was created."
          }
        },
        "type": "object",
        "required": [
          "id",
          "item_id",
          "market_hash_name",
          "created_at"
        ],
        "title": "WatchlistItem",
        "description": "One saved watchlist entry."
      },
      "WatchlistResponse": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/WatchlistItem"
            },
            "type": "array",
            "title": "Items",
            "description": "Saved watchlist entries."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "items",
          "pagination"
        ],
        "title": "WatchlistResponse",
        "description": "Paginated watchlist response."
      },
      "WebhookCreateRequest": {
        "properties": {
          "label": {
            "type": "string",
            "title": "Label",
            "description": "User-defined label for this destination."
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "Destination URL. Must be HTTP or HTTPS."
          },
          "platform": {
            "type": "string",
            "title": "Platform",
            "description": "Delivery platform key: custom, discord, telegram, or google_sheets.",
            "default": "custom"
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "description": "Whether this destination should be active immediately.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "label",
          "url"
        ],
        "title": "WebhookCreateRequest",
        "description": "Create one outbound webhook destination."
      },
      "WebhookDeliveriesResponse": {
        "properties": {
          "deliveries": {
            "items": {
              "$ref": "#/components/schemas/WebhookDeliverySummary"
            },
            "type": "array",
            "title": "Deliveries",
            "description": "Webhook delivery jobs."
          },
          "pagination": {
            "$ref": "#/components/schemas/PaginationMeta",
            "description": "Pagination metadata."
          }
        },
        "type": "object",
        "required": [
          "deliveries",
          "pagination"
        ],
        "title": "WebhookDeliveriesResponse",
        "description": "Paginated webhook delivery history."
      },
      "WebhookDeliveryAttemptSummary": {
        "properties": {
          "attempt_number": {
            "type": "integer",
            "title": "Attempt Number",
            "description": "One-based attempt number for this delivery."
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "Attempt outcome status."
          },
          "http_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Http Status",
            "description": "HTTP response status when a response was received."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Error message when the attempt failed."
          },
          "response_body_excerpt": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Response Body Excerpt",
            "description": "Truncated response body captured for debugging when available."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when this attempt was recorded."
          }
        },
        "type": "object",
        "required": [
          "attempt_number",
          "status",
          "created_at"
        ],
        "title": "WebhookDeliveryAttemptSummary",
        "description": "One outbound webhook HTTP attempt."
      },
      "WebhookDeliveryDetail": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique delivery identifier."
          },
          "event_id": {
            "type": "string",
            "title": "Event Id",
            "description": "Associated alert event identifier."
          },
          "endpoint_id": {
            "type": "string",
            "title": "Endpoint Id",
            "description": "Webhook destination identifier."
          },
          "endpoint_label": {
            "type": "string",
            "title": "Endpoint Label",
            "description": "Snapshot of the destination label used for this delivery."
          },
          "endpoint_url": {
            "type": "string",
            "title": "Endpoint Url",
            "description": "Snapshot of the destination URL used for this delivery."
          },
          "platform": {
            "type": "string",
            "title": "Platform",
            "description": "Snapshot of the delivery platform used for this delivery."
          },
          "event_type": {
            "type": "string",
            "title": "Event Type",
            "description": "Outbound event type."
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "Current delivery status."
          },
          "attempt_count": {
            "type": "integer",
            "title": "Attempt Count",
            "description": "Number of delivery attempts recorded so far."
          },
          "last_http_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Http Status",
            "description": "Last HTTP response status observed for this delivery."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Last error recorded for this delivery."
          },
          "next_attempt_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Attempt At",
            "description": "Next scheduled retry timestamp when this delivery is pending retry."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when this delivery was created."
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At",
            "description": "ISO 8601 UTC timestamp when this delivery reached a terminal state."
          },
          "payload": {
            "additionalProperties": true,
            "type": "object",
            "title": "Payload",
            "description": "Snapshot of the outbound JSON payload."
          },
          "attempts": {
            "items": {
              "$ref": "#/components/schemas/WebhookDeliveryAttemptSummary"
            },
            "type": "array",
            "title": "Attempts",
            "description": "HTTP delivery attempts recorded for this job."
          }
        },
        "type": "object",
        "required": [
          "id",
          "event_id",
          "endpoint_id",
          "endpoint_label",
          "endpoint_url",
          "platform",
          "event_type",
          "status",
          "attempt_count",
          "created_at",
          "payload",
          "attempts"
        ],
        "title": "WebhookDeliveryDetail",
        "description": "Detailed view of one webhook delivery job."
      },
      "WebhookDeliverySummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique delivery identifier."
          },
          "event_id": {
            "type": "string",
            "title": "Event Id",
            "description": "Associated alert event identifier."
          },
          "endpoint_id": {
            "type": "string",
            "title": "Endpoint Id",
            "description": "Webhook destination identifier."
          },
          "endpoint_label": {
            "type": "string",
            "title": "Endpoint Label",
            "description": "Snapshot of the destination label used for this delivery."
          },
          "endpoint_url": {
            "type": "string",
            "title": "Endpoint Url",
            "description": "Snapshot of the destination URL used for this delivery."
          },
          "platform": {
            "type": "string",
            "title": "Platform",
            "description": "Snapshot of the delivery platform used for this delivery."
          },
          "event_type": {
            "type": "string",
            "title": "Event Type",
            "description": "Outbound event type."
          },
          "status": {
            "type": "string",
            "title": "Status",
            "description": "Current delivery status."
          },
          "attempt_count": {
            "type": "integer",
            "title": "Attempt Count",
            "description": "Number of delivery attempts recorded so far."
          },
          "last_http_status": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Http Status",
            "description": "Last HTTP response status observed for this delivery."
          },
          "error": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Error",
            "description": "Last error recorded for this delivery."
          },
          "next_attempt_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Attempt At",
            "description": "Next scheduled retry timestamp when this delivery is pending retry."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when this delivery was created."
          },
          "completed_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Completed At",
            "description": "ISO 8601 UTC timestamp when this delivery reached a terminal state."
          }
        },
        "type": "object",
        "required": [
          "id",
          "event_id",
          "endpoint_id",
          "endpoint_label",
          "endpoint_url",
          "platform",
          "event_type",
          "status",
          "attempt_count",
          "created_at"
        ],
        "title": "WebhookDeliverySummary",
        "description": "Summary of one webhook delivery job."
      },
      "WebhookEndpointSummary": {
        "properties": {
          "id": {
            "type": "string",
            "title": "Id",
            "description": "Unique webhook destination identifier."
          },
          "label": {
            "type": "string",
            "title": "Label",
            "description": "User-defined label for this destination."
          },
          "url": {
            "type": "string",
            "title": "Url",
            "description": "Destination URL."
          },
          "platform": {
            "type": "string",
            "title": "Platform",
            "description": "Delivery platform key for this destination."
          },
          "secret_last4": {
            "type": "string",
            "title": "Secret Last4",
            "description": "Last four characters of the current signing secret."
          },
          "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "description": "Whether new events fan out to this destination."
          },
          "last_success_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Success At",
            "description": "ISO 8601 UTC timestamp when a delivery last succeeded."
          },
          "last_failure_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Failure At",
            "description": "ISO 8601 UTC timestamp when a delivery last failed."
          },
          "last_failure_message": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Failure Message",
            "description": "Last recorded failure message for this destination."
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "title": "Created At",
            "description": "ISO 8601 UTC timestamp when this destination was created."
          },
          "updated_at": {
            "type": "string",
            "format": "date-time",
            "title": "Updated At",
            "description": "ISO 8601 UTC timestamp when this destination was last updated."
          }
        },
        "type": "object",
        "required": [
          "id",
          "label",
          "url",
          "platform",
          "secret_last4",
          "is_active",
          "created_at",
          "updated_at"
        ],
        "title": "WebhookEndpointSummary",
        "description": "Configured outbound webhook destination."
      },
      "WebhookEndpointsResponse": {
        "properties": {
          "webhooks": {
            "items": {
              "$ref": "#/components/schemas/WebhookEndpointSummary"
            },
            "type": "array",
            "title": "Webhooks",
            "description": "Configured webhook destinations."
          }
        },
        "type": "object",
        "required": [
          "webhooks"
        ],
        "title": "WebhookEndpointsResponse",
        "description": "List of configured outbound webhook destinations."
      },
      "WebhookSecretResponse": {
        "properties": {
          "webhook": {
            "$ref": "#/components/schemas/WebhookEndpointSummary",
            "description": "Webhook destination metadata."
          },
          "secret": {
            "type": "string",
            "title": "Secret",
            "description": "Plaintext signing secret shown only once."
          }
        },
        "type": "object",
        "required": [
          "webhook",
          "secret"
        ],
        "title": "WebhookSecretResponse",
        "description": "Response carrying one-time plaintext secret material."
      },
      "WebhookUpdateRequest": {
        "properties": {
          "label": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Label",
            "description": "Updated destination label."
          },
          "url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url",
            "description": "Updated destination URL."
          },
          "platform": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Platform",
            "description": "Updated delivery platform key."
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active",
            "description": "Updated active state."
          }
        },
        "type": "object",
        "title": "WebhookUpdateRequest",
        "description": "Update mutable outbound webhook destination fields."
      },
      "CursorPaginationMeta": {
        "title": "CursorPaginationMeta",
        "type": "object",
        "description": "Cursor pagination metadata for keyset-based endpoints.",
        "properties": {
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "description": "Items returned per page."
          },
          "has_next": {
            "type": "boolean",
            "description": "Whether another page can be requested with `next_cursor`."
          },
          "has_prev": {
            "type": "boolean",
            "description": "Whether this response was derived from a cursor-aware follow-up request."
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor for the next page, or `null` when exhausted."
          }
        },
        "required": [
          "limit",
          "has_next",
          "has_prev",
          "next_cursor"
        ]
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "description": "API key passed as `Authorization: Bearer sk_live_...`.",
        "scheme": "bearer"
      }
    }
  }
}