{
  "openapi": "3.0.3",
  "info": {
    "title": "skins.cash Seller Trading API",
    "version": "3.0.0",
    "description": "Sell CS2, Dota 2, TF2 and Rust skins to skins.cash programmatically. Proceeds are always credited to the skins.cash balance of the account that owns the API key (EUR).\n\n## Authentication\nGenerate an API key in your skins.cash account (requires a confirmed email) — on the site's API page, or with `PUT https://skins.cash/api/user/api-credentials` while signed in (see *credentials*). The key is shown **once**, when it is generated — store it securely; skins.cash keeps only its hash and can show just its last characters. Regenerating replaces the previous key immediately. One key belongs to exactly one account / Steam inventory.\n\nEvery request (except `/docs`) sends the key in the `x-api-key` header, over HTTPS only. Keys start with `sc_live_`. Never put the key in URLs, client-side code or public repositories; if it leaks, regenerate it.\n\n## Selling rules\n- Payout is always the skins.cash balance; instant payout is not available through the API.\n- **CS2**: after you accept the offer in Steam the trade enters Steam Trade Protection — status `32` (*Protected*) with a `settlement_time`; the balance is credited after `settlement_time`. While protected, the amount is shown as `protected_balance` and may be spent on the skins.cash Marketplace.\n- **Dota 2, TF2, Rust**: credited once the offer is accepted.\n- One trade per request; CS2 items cannot be mixed with other games (`217`).\n- One open trade per account at a time (`207`) — wait until the previous offer is accepted/declined.\n- The offer is sent to the trade link saved in your account.\n- To cancel, decline the offer in Steam.\n\n## Idempotency\n`POST /trade` requires a client `request_id` (UUID). Repeating a request with the same `request_id` returns the trade created for it instead of creating another — safe to retry after timeouts. A request rejected before a trade was created can be retried with the same id. To try again after a trade with that id failed (e.g. status `6`), use a new `request_id`.\n\n## Prices\n`GET /inventory/{app_id}` returns, per item, the exact EUR amount it adds to a trade (bonus and Doppler phase included). `POST /trade` sells from the inventory as last listed and never reloads it from Steam; the listing is kept for 35 minutes, after which a trade answers `209` until the inventory is fetched again. A trade's `sum` is the sum of the listed prices of its items (within cent rounding), as long as prices did not change in between.\n\n## Rate limits\nPer API key: 60 requests/minute for all endpoints except trade status, plus 60 requests/minute for `GET /trade/{hash}`. The Steam inventory is reloaded at most once per 60 seconds per game; within that window the cached inventory is returned. Exceeding a limit returns HTTP 429, `error_code` 222 and a `Retry-After` header (seconds).\n\n## Response envelope\nEvery response is `{\"success\": bool, \"data\": ..., \"error_code\": int}`.\n\n| error_code | meaning |\n|---|---|\n| 0 | No error |\n| 100 | API key (x-api-key) missing or unknown |\n| 101 | Account of the API key not found |\n| 200 | Unsupported app_id |\n| 201 | Failed to load the inventory from Steam (and no cached copy) |\n| 202 | Required parameter missing or invalid (see data.errors) |\n| 205 | Account banned (incl. sanctions) |\n| 207 | A trade is already open or being created for this account |\n| 208 | Failed to send the Steam trade offer |\n| 209 | Cached inventory expired: call GET /inventory/{app_id}, then retry (the same request_id is fine) |\n| 212 | Trade not found |\n| 214 | Item not in the (present) cached inventory or has no price |\n| 216 | Failed to load prices |\n| 217 | CS2 items cannot be mixed with items of other games in one trade |\n| 218 | Prices changed or stock limit reached; reload the inventory |\n| 219 | The account has no confirmed email |\n| 220 | The account has no usable saved trade link |\n| 221 | Trade sum below the minimum |\n| 222 | Rate limit exceeded (see Retry-After) |\n| 223 | Trade rejected (other business rule, e.g. anti-fraud) |\n| 224 | Internal error |\n",
    "contact": {
      "email": "wholesale@skins.cash"
    }
  },
  "servers": [
    {
      "url": "https://skins.cash/api/trading/v3"
    }
  ],
  "tags": [
    {
      "name": "credentials",
      "description": "API key management. These two endpoints live in the skins.cash account API (`/api/user/...`, signed-in site session), not under `/trading/v3`, and answer in the account envelope `{status, data, additional, error}`."
    },
    {
      "name": "user"
    },
    {
      "name": "inventory"
    },
    {
      "name": "prices"
    },
    {
      "name": "trade"
    }
  ],
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "API key, e.g. `sc_live_…`"
      },
      "siteSession": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Session token of the signed-in skins.cash user (the site sends it as `Authorization: Bearer …`). Used only by the key management endpoints."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "success",
          "data",
          "error_code"
        ],
        "properties": {
          "success": {
            "type": "boolean"
          },
          "error_code": {
            "type": "integer",
            "example": 0
          },
          "data": {
            "nullable": true,
            "type": "object",
            "description": "null, or {errors: {field: [messages]}} for 202"
          }
        }
      },
      "User": {
        "type": "object",
        "properties": {
          "balance": {
            "type": "number",
            "example": 12.5,
            "description": "Spendable balance, EUR"
          },
          "protected_balance": {
            "type": "number",
            "example": 100.0,
            "description": "Sold CS2 value still in Steam Trade Protection, EUR"
          },
          "currency": {
            "type": "string",
            "example": "EUR"
          },
          "bonus": {
            "type": "number",
            "example": 0,
            "description": "Active bonus, percent"
          }
        }
      },
      "InventoryItem": {
        "type": "object",
        "properties": {
          "asset_id": {
            "type": "string",
            "example": "30904115740"
          },
          "class_id": {
            "type": "string"
          },
          "instance_id": {
            "type": "string"
          },
          "context_id": {
            "type": "string",
            "example": "2"
          },
          "app_id": {
            "type": "integer",
            "example": 730
          },
          "name": {
            "type": "string",
            "example": "★ Karambit | Doppler (Factory New)"
          },
          "price": {
            "type": "number",
            "example": 150.0,
            "description": "EUR this item adds to a trade"
          },
          "phase": {
            "type": "string",
            "nullable": true,
            "example": "Ruby",
            "description": "Resolved Doppler phase, if any"
          },
          "is_protected_game": {
            "type": "boolean",
            "description": "true for CS2: the sale goes through Steam Trade Protection"
          }
        }
      },
      "Price": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "price": {
            "type": "number",
            "description": "EUR at zero bonus, floored to cents; for an item with a phase see `phases`"
          },
          "skin_count": {
            "type": "integer",
            "description": "How many more items of this name we buy: the stock cap minus items already bought in its current period. Names with nothing left are omitted; a trade over the cap is rejected with 218"
          },
          "phases": {
            "type": "array",
            "description": "Doppler phases with their own price (empty for names without phases)",
            "items": {
              "type": "object",
              "properties": {
                "phase": {
                  "type": "string",
                  "nullable": true,
                  "example": "Ruby"
                },
                "price": {
                  "type": "number",
                  "description": "EUR at zero bonus, floored to cents",
                  "example": 200
                }
              }
            }
          }
        }
      },
      "TradeRequest": {
        "type": "object",
        "required": [
          "request_id",
          "items"
        ],
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid",
            "description": "Client idempotency key"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "app_id",
                "asset_id"
              ],
              "properties": {
                "app_id": {
                  "type": "integer",
                  "enum": [
                    730,
                    570,
                    440,
                    252490
                  ]
                },
                "asset_id": {
                  "type": "string",
                  "pattern": "^\\d+$"
                }
              }
            }
          }
        }
      },
      "Trade": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "hash": {
            "type": "string",
            "description": "Trade identifier for status lookups"
          },
          "status": {
            "type": "integer",
            "example": 32,
            "description": "Main values: 0 Pending, 2 Sent, 3 Accepted, 32 Protected, 20 Payment in progress, 21 Payed, 6 Cancelled, 7 Declined, 12 Reverted, 35 Spent on Marketplace, 90 Error; other values are error states, see status_description."
          },
          "status_description": {
            "type": "string",
            "example": "Protected"
          },
          "is_protected": {
            "type": "boolean"
          },
          "sum": {
            "type": "number",
            "example": 100.0,
            "description": "EUR"
          },
          "user_receives": {
            "type": "number",
            "example": 100.0,
            "description": "EUR credited to the balance"
          },
          "currency": {
            "type": "string",
            "example": "EUR"
          },
          "steam_trade_id": {
            "type": "string",
            "nullable": true
          },
          "settlement_time": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "description": "UTC; for a protected trade the balance is credited after it"
          },
          "created_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "IssuedKey": {
        "type": "object",
        "properties": {
          "steam_id": {
            "type": "string",
            "pattern": "^\\d{17}$",
            "description": "SteamID64 as a string: it exceeds the largest integer a JavaScript number holds exactly",
            "example": "76561198000000000"
          },
          "x-api-key": {
            "type": "string",
            "description": "The new API key. Returned only here, once: store it now",
            "example": "sc_live_3f9c1e0b7a6d4c2e8f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e"
          },
          "key_hint": {
            "type": "string",
            "description": "Key prefix and last 4 characters, safe to display",
            "example": "sc_live_…0d9e"
          }
        }
      },
      "KeyInfo": {
        "type": "object",
        "properties": {
          "steam_id": {
            "type": "string",
            "pattern": "^\\d{17}$",
            "description": "SteamID64 as a string: it exceeds the largest integer a JavaScript number holds exactly",
            "example": "76561198000000000"
          },
          "key_hint": {
            "type": "string",
            "example": "sc_live_…0d9e"
          },
          "issued_at": {
            "type": "string",
            "format": "date-time",
            "nullable": true,
            "example": "2026-10-27T10:15:02+00:00"
          }
        }
      }
    }
  },
  "security": [
    {
      "apiKey": []
    }
  ],
  "paths": {
    "/user/api-credentials": {
      "servers": [
        {
          "url": "https://skins.cash/api"
        }
      ],
      "get": {
        "tags": [
          "credentials"
        ],
        "summary": "Current key hint",
        "description": "Shows which key is active. The key itself is never returned again: only its hint and when it was issued.",
        "security": [
          {
            "siteSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "$ref": "#/components/schemas/KeyInfo"
                    },
                    "additional": {
                      "type": "array",
                      "items": {},
                      "example": []
                    },
                    "error": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  }
                },
                "example": {
                  "status": true,
                  "data": {
                    "steam_id": "76561198000000000",
                    "key_hint": "sc_live_…0d9e",
                    "issued_at": "2026-10-27T10:15:02+00:00"
                  },
                  "additional": [],
                  "error": []
                }
              }
            }
          },
          "400": {
            "description": "No key was ever issued for this account",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "error": {
                          "type": "string"
                        }
                      }
                    },
                    "additional": {
                      "type": "array",
                      "items": {},
                      "example": []
                    },
                    "error": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  }
                },
                "example": {
                  "status": true,
                  "data": {
                    "error": "Can't find user credentials"
                  },
                  "additional": [],
                  "error": []
                }
              }
            }
          },
          "401": {
            "description": "Not signed in",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "error": {
                          "type": "string"
                        }
                      }
                    },
                    "additional": {
                      "type": "array",
                      "items": {},
                      "example": []
                    },
                    "error": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  }
                },
                "example": {
                  "status": true,
                  "data": {
                    "error": "Can't extract user data"
                  },
                  "additional": [],
                  "error": []
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "credentials"
        ],
        "summary": "Generate or regenerate the API key",
        "description": "Issues a new key for the signed-in account and returns it **once**. Any previous key stops working immediately. Requires a confirmed email. No request body.",
        "security": [
          {
            "siteSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "Key issued",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "$ref": "#/components/schemas/IssuedKey"
                    },
                    "additional": {
                      "type": "array",
                      "items": {},
                      "example": []
                    },
                    "error": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  }
                },
                "example": {
                  "status": true,
                  "data": {
                    "steam_id": "76561198000000000",
                    "x-api-key": "sc_live_3f9c1e0b7a6d4c2e8f1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e",
                    "key_hint": "sc_live_…0d9e"
                  },
                  "additional": [],
                  "error": []
                }
              }
            }
          },
          "400": {
            "description": "The account has no confirmed email",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "error": {
                          "type": "string"
                        }
                      }
                    },
                    "additional": {
                      "type": "array",
                      "items": {},
                      "example": []
                    },
                    "error": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  }
                },
                "example": {
                  "status": true,
                  "data": {
                    "error": "email_not_confirmed"
                  },
                  "additional": [],
                  "error": []
                }
              }
            }
          },
          "401": {
            "description": "Not signed in",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "error": {
                          "type": "string"
                        }
                      }
                    },
                    "additional": {
                      "type": "array",
                      "items": {},
                      "example": []
                    },
                    "error": {
                      "type": "array",
                      "items": {},
                      "example": []
                    }
                  }
                },
                "example": {
                  "status": true,
                  "data": {
                    "error": "Can't extract user data"
                  },
                  "additional": [],
                  "error": []
                }
              }
            }
          }
        }
      }
    },
    "/user": {
      "get": {
        "tags": [
          "user"
        ],
        "summary": "Balance, protected balance and bonus",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data",
                    "error_code"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "error_code": {
                      "type": "integer",
                      "example": 0
                    },
                    "data": {
                      "$ref": "#/components/schemas/User"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed (100–101)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 100
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 222
                }
              }
            }
          }
        }
      }
    },
    "/inventory/{app_id}": {
      "get": {
        "tags": [
          "inventory"
        ],
        "summary": "Sellable items with final prices",
        "description": "Only items skins.cash currently buys: tradable, priced, and within the stock cap of their name (copies beyond it are left out, as on the website). Selling an item that is not listed answers 214.",
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "enum": [
                730,
                570,
                440,
                252490
              ]
            },
            "description": "730 CS2, 570 Dota 2, 440 TF2, 252490 Rust"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data",
                    "error_code"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "error_code": {
                      "type": "integer",
                      "example": 0
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/InventoryItem"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Unsupported app_id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 200
                }
              }
            }
          },
          "424": {
            "description": "Steam inventory unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 201
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed (100–101)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 100
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 222
                }
              }
            }
          }
        }
      }
    },
    "/prices/{app_id}": {
      "get": {
        "tags": [
          "prices"
        ],
        "summary": "Buy price list",
        "description": "The game's buy price list, the same for every account and before the account bonus. `price` is what an item of that name adds to a trade at zero bonus; `phases` lists the same per Doppler phase. The first-skin increase on the most expensive CS2 item depends on the inventory and is not included: GET /inventory/{app_id} quotes the exact amount per item.",
        "parameters": [
          {
            "name": "app_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "enum": [
                730,
                570,
                440,
                252490
              ]
            },
            "description": "730 CS2, 570 Dota 2, 440 TF2, 252490 Rust"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data",
                    "error_code"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "error_code": {
                      "type": "integer",
                      "example": 0
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Price"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Unsupported app_id",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 200
                }
              }
            }
          },
          "424": {
            "description": "Prices unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 216
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed (100–101)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 100
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 222
                }
              }
            }
          }
        }
      }
    },
    "/trade": {
      "post": {
        "tags": [
          "trade"
        ],
        "summary": "Sell items: creates a trade and sends a Steam offer to your saved trade link",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TradeRequest"
              },
              "example": {
                "request_id": "3f0e1b7e-8a4c-4c55-9a0e-1f7f3d7e2c11",
                "items": [
                  {
                    "app_id": 730,
                    "asset_id": "30904115740"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Trade created (or the existing trade for this request_id)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data",
                    "error_code"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "error_code": {
                      "type": "integer",
                      "example": 0
                    },
                    "data": {
                      "$ref": "#/components/schemas/Trade"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Rejected: 202, 205, 207, 208, 209, 214, 217–221, 223",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 217
                }
              }
            }
          },
          "500": {
            "description": "Internal error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 224
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed (100–101)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 100
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 222
                }
              }
            }
          }
        }
      }
    },
    "/trade/{hash}": {
      "get": {
        "tags": [
          "trade"
        ],
        "summary": "Trade status",
        "parameters": [
          {
            "name": "hash",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "success",
                    "data",
                    "error_code"
                  ],
                  "properties": {
                    "success": {
                      "type": "boolean"
                    },
                    "error_code": {
                      "type": "integer",
                      "example": 0
                    },
                    "data": {
                      "$ref": "#/components/schemas/Trade"
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not found or not yours",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 212
                }
              }
            }
          },
          "401": {
            "description": "Authentication failed (100–101)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 100
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "success": false,
                  "data": null,
                  "error_code": 222
                }
              }
            }
          }
        }
      }
    },
    "/docs": {
      "get": {
        "tags": [
          "user"
        ],
        "summary": "This document",
        "security": [],
        "responses": {
          "200": {
            "description": "OAS3 JSON"
          }
        }
      }
    }
  }
}