├── .gitignore ├── README.md ├── python ├── stockx_api_sample.py └── stockx_support_list.py └── res └── stockx.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py,cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # poetry 98 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 102 | #poetry.lock 103 | 104 | # pdm 105 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 106 | #pdm.lock 107 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 108 | # in version control. 109 | # https://pdm.fming.dev/#use-with-ide 110 | .pdm.toml 111 | 112 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 113 | __pypackages__/ 114 | 115 | # Celery stuff 116 | celerybeat-schedule 117 | celerybeat.pid 118 | 119 | # SageMath parsed files 120 | *.sage.py 121 | 122 | # Environments 123 | .env 124 | .venv 125 | env/ 126 | venv/ 127 | ENV/ 128 | env.bak/ 129 | venv.bak/ 130 | 131 | # Spyder project settings 132 | .spyderproject 133 | .spyproject 134 | 135 | # Rope project settings 136 | .ropeproject 137 | 138 | # mkdocs documentation 139 | /site 140 | 141 | # mypy 142 | .mypy_cache/ 143 | .dmypy.json 144 | dmypy.json 145 | 146 | # Pyre type checker 147 | .pyre/ 148 | 149 | # pytype static type analyzer 150 | .pytype/ 151 | 152 | # Cython debug symbols 153 | cython_debug/ 154 | 155 | # PyCharm 156 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 157 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 158 | # and can be added to the global gitignore or merged into this file. For a more nuclear 159 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 160 | .idea/ 161 | .DS_Store 162 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CommercialStockXAPI 2 | 3 | **(The project has been under long-term maintenance since 2022, stable and reliable**. We look forward to your cooperation) 4 | 5 | CommercialStockXAPI is a project that provides remote HTTP access to the StockX API. It supports all interfaces of this platforms and serves as a global sneaker seller's tool, assisting in automating processes such as selling sneakers. The interfaces are actively maintained to ensure long-term availability. 6 | 7 | For detailed information about the interfaces, please refer to the following guides: 8 | - [StockX API documentation 1(Online testing interface)](https://stockxapi.dataspiderhub.com/docs) or [StockX API documentation 2(Online testing interface)](https://stockxapi.dataspiderhub.com/redoc) 9 | 10 | Python sample code can be found in the `python` directory. 11 | 12 | ## Supported Platform 13 | StockX
14 | 15 | If you also need Goat/Alias API, please refer to [CommercialGoatAPI](https://github.com/Sting-Lee/CommercialGoatAPI/) 16 | 17 | ## Supported Interfaces 18 | 19 | CommercialStockXAPI supports the following interfaces for StockX: 20 | 21 | - Init DeviceID 22 | - Search for products (with all params) 23 | - Search for products by GTIN(GTIN is the barcode number on the shoebox) 24 | - Get historical sales records of specified products 25 | - Get ask price of specified products 26 | - Get bid price of specified products 27 | - Get product details of specified products 28 | - Get product size and price information 29 | - Get product sales official suggested price 30 | - Get market data for products, including the highest price, lowest price, trading range, price fluctuation, sales volume, average price 31 | - Get product historical price 32 | - Login 33 | - Get User self information 34 | - Get User seller information 35 | - Update access_token 36 | - Query the listing. Return the product list. 37 | - Query the sold. Return the product list. 38 | - Query the history sold. Return the product list. 39 | - Query the order detail. Return the order detail. 40 | - Enable vacation mode 41 | - Get the shipping label pdf 42 | - Create shipment 43 | - Get shipment list 44 | - Get shipment details(include shipping label url) 45 | - Request shipping extension 46 | - Cancel order 47 | - Cancel product listing 48 | - Modify/Update product price (individual/batch) 49 | - List products for sale (individual/batch) 50 | - BID product 51 | 52 | - Other interfaces: 53 | - Support additional interfaces as per your requirements 54 | 55 | ## How to Access 56 | 57 | For access and inquiries, please reach out to: 58 | 59 | - Discord: sting_lee 60 | - E-Mail: mocca_lee@outlook.com 61 | - Skype: mocca_lee@outlook.com (Name:Sting | ID: live:.cid.c7e659cd5c4c98e8) 62 | - Website: https://profile.dataspiderhub.com 63 | 64 | Contact us to request a trial period (one week). If you have additional requirements or need further assistance, feel free to discuss them with us. 65 | 66 | ## Quotation 67 | 68 | The fee is based on the total monthly call volume and is paid on a monthly basis. 69 | 70 | | MonthlyCalls | Cost(USD) | unit-price(USD/Req) | 71 | | -------------------- | --------------------------------------- | --------------------- | 72 | | <300,000 | $400 | 0.0013/req | 73 | | 300,000~2,000,000 | $800 | 0.0004/req | 74 | | 2,000,000~10,000,000 | $1600 | 0.00016/req | 75 | | >10,000,000 | Pending(Exclusive deployment resources) | <0.00016/req | 76 | 77 | Contact us to request a trial period (one week) and get a discount. 78 | If you have additional requirements or need further assistance, feel free to discuss them with us. 79 | -------------------------------------------------------------------------------- /python/stockx_api_sample.py: -------------------------------------------------------------------------------- 1 | 2 | import requests 3 | 4 | base_url = "https://stockxapi.dataspiderhub.com" 5 | # Token needs to be applied for from the author and can be tested this week. Online testing can be seen at https://stockxapi.dataspiderhub.com/docs 6 | # Contact the author Email: mocca_lee@outlook.com Discord: sting_lee 7 | TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 8 | 9 | 10 | def ping(): 11 | """ 12 | @description: 测试接口是否可用 Test whether the interface is available 13 | @return: 14 | """ 15 | url = f"{base_url}/ping" 16 | response = requests.get(url) 17 | return response.json() 18 | 19 | 20 | def init_auth(): 21 | """ 22 | @description: 初始化auth,初始化一个设备ID,后面所有接口都要用到。该接口较慢。 23 | Initialize auth, initialize a device ID, and all subsequent interfaces will be used. This interface is slower. 24 | @return: 25 | """ 26 | url = f"{base_url}/api/stockx/init_auth" 27 | params = { 28 | "token": TOKEN 29 | } 30 | response = requests.get(url, params=params) 31 | return response.json() 32 | 33 | 34 | def search_product(auth, keyword, page): 35 | """ 36 | @description: 搜索商品 Search for goods 37 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 38 | @param keyword: 搜索关键词 Search keywords 39 | @param page: 页码 Page number 40 | @return: 41 | """ 42 | url = f"{base_url}/api/stockx/search_product" 43 | params = { 44 | "token": TOKEN, 45 | "auth": auth, 46 | "keyword": keyword, 47 | "page": page 48 | } 49 | response = requests.get(url, params=params) 50 | return response.json() 51 | 52 | 53 | def product_activity(auth, product_uuid): 54 | """ 55 | @description: 商品活动信息(历史销售记录) Product activity information(historical sales records) 56 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 57 | @param product_uuid: 商品ID Product ID 58 | @return: 59 | """ 60 | url = f"{base_url}/api/stockx/product_activity" 61 | params = { 62 | "token": TOKEN, 63 | "auth": auth, 64 | "product_uuid": product_uuid 65 | } 66 | response = requests.get(url, params=params) 67 | return response.json() 68 | 69 | 70 | def product_detail(auth, product_uuid): 71 | """ 72 | @description: 商品详情 Product details 73 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 74 | @param product_uuid: 商品ID Product ID 75 | @return: 76 | """ 77 | url = f"{base_url}/api/stockx/product_detail" 78 | params = { 79 | "token": TOKEN, 80 | "auth": auth, 81 | "product_uuid": product_uuid 82 | } 83 | response = requests.get(url, params=params) 84 | return response.json() 85 | 86 | 87 | def product_size_price(auth, product_id): 88 | """ 89 | @description: 商品尺码价格 Product size price 90 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 91 | @param product_id: 商品ID(精确到尺码的ID) Product ID(ID to size) 92 | @return: 93 | """ 94 | url = f"{base_url}/api/stockx/product_size_price" 95 | params = { 96 | "token": TOKEN, 97 | "auth": auth, 98 | "product_id": product_id, 99 | } 100 | response = requests.get(url, params=params) 101 | return response.json() 102 | 103 | 104 | def self_info(auth, access_token): 105 | """ 106 | @description: 用户信息 User information 107 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 108 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 109 | @return: 110 | """ 111 | url = f"{base_url}/api/stockx/self_info" 112 | params = { 113 | "token": TOKEN, 114 | "auth": auth, 115 | "access_token": access_token 116 | } 117 | response = requests.get(url, params=params) 118 | return response.json() 119 | 120 | 121 | def seller_info(auth, access_token): 122 | """ 123 | @description: 卖家信息 Seller information 124 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 125 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 126 | @return: 127 | """ 128 | url = f"{base_url}/api/stockx/seller_info" 129 | params = { 130 | "token": TOKEN, 131 | "auth": auth, 132 | "access_token": access_token 133 | } 134 | response = requests.get(url, params=params) 135 | return response.json() 136 | 137 | 138 | def update_access_token(auth, refresh_token, client_id, auth0_client): 139 | """ 140 | @description: 更新access_token Update access_token 141 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 142 | @param refresh_token: 用户登录后的refresh_token参数 refresh_token parameter after user login 143 | @param client_id: 144 | @param auth0_client: 145 | @return: 146 | """ 147 | url = f"{base_url}/api/stockx/update_access_token" 148 | params = { 149 | "token": TOKEN, 150 | "auth": auth, 151 | "refresh_token": refresh_token, 152 | "client_id": client_id, 153 | "auth0_client": auth0_client, 154 | } 155 | response = requests.get(url, params=params) 156 | return response.json() 157 | 158 | 159 | def get_selling_products(auth, access_token, cursor="", query=""): 160 | """ 161 | @description: 获取正在出售中的商品 Get products on sale 162 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 163 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 164 | @param cursor: 165 | @param query: 查询关键词,可为空 Query keywords, can be empty 166 | @return: 167 | """ 168 | url = f"{base_url}/api/stockx/get_selling_products" 169 | params = { 170 | "token": TOKEN, 171 | "auth": auth, 172 | "access_token": access_token, 173 | "cursor": cursor, 174 | "query": query, 175 | } 176 | response = requests.get(url, params=params) 177 | return response.json() 178 | 179 | 180 | def get_sold_products(auth, access_token, cursor="", query=""): 181 | """ 182 | @description: 获取已售出的商品 Get sold products 183 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 184 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 185 | @param cursor: 186 | @param query: 查询关键词,可为空 Query keywords, can be empty 187 | @return: 188 | """ 189 | url = f"{base_url}/api/stockx/get_sold_products" 190 | params = { 191 | "token": TOKEN, 192 | "auth": auth, 193 | "access_token": access_token, 194 | "cursor": cursor, 195 | "query": query, 196 | } 197 | response = requests.get(url, params=params) 198 | return response.json() 199 | 200 | 201 | def get_history_products(auth, access_token, cursor="", query=""): 202 | """ 203 | @description: 获取历史已售商品 Get historical sold products 204 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 205 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 206 | @param cursor: 207 | @param query: 查询关键词,可为空 Query keywords, can be empty 208 | @return: 209 | """ 210 | url = f"{base_url}/api/stockx/get_history_products" 211 | params = { 212 | "token": TOKEN, 213 | "auth": auth, 214 | "access_token": access_token, 215 | "cursor": cursor, 216 | "query": query, 217 | } 218 | response = requests.get(url, params=params) 219 | return response.json() 220 | 221 | 222 | def get_order_detail(auth, access_token, chain_id): 223 | """ 224 | @description: 获取订单详情 Get order details 225 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 226 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 227 | @param chain_id: chain_id 228 | @return: 229 | """ 230 | url = f"{base_url}/api/stockx/get_order_detail" 231 | params = { 232 | "token": TOKEN, 233 | "auth": auth, 234 | "access_token": access_token, 235 | "chain_id": chain_id, 236 | } 237 | response = requests.get(url, params=params) 238 | return response.json() 239 | 240 | 241 | def vacation_mode(auth, access_token, customer_id, switch_to): 242 | """ 243 | @description: 设置假期模式 Set vacation mode 244 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 245 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 246 | @param customer_id: customer_id 247 | @param switch_to: OFF:关闭假期模式 ON:开启假期模式 OFF: Turn off vacation mode ON: Turn on vacation mode 248 | @return: 249 | """ 250 | url = f"{base_url}/api/stockx/vacation_mode" 251 | params = { 252 | "token": TOKEN, 253 | "auth": auth, 254 | "access_token": access_token, 255 | "customer_id": customer_id, 256 | "switch_to": switch_to, 257 | } 258 | response = requests.get(url, params=params) 259 | return response.json() 260 | 261 | 262 | def cancel_product(auth, access_token, chain_id): 263 | """ 264 | @description: 下架商品 Cancel product 265 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 266 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 267 | @param chain_id: chain_id 268 | @return: 269 | """ 270 | url = f"{base_url}/api/stockx/cancel_product" 271 | params = { 272 | "token": TOKEN, 273 | "auth": auth, 274 | "access_token": access_token, 275 | "chain_id": chain_id, 276 | } 277 | response = requests.get(url, params=params) 278 | return response.json() 279 | 280 | 281 | # sold_product_list={"products": [{"chain_id": "", "sku": ""}]} 282 | def create_shipment(auth, access_token, sold_product_list): 283 | """ 284 | @description: 创建发货单 Create shipment 285 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 286 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 287 | @param sold_product_list: 已售出的商品列表 Sold product list 288 | @return: 289 | """ 290 | url = f"{base_url}/api/stockx/create_shipment" 291 | params = { 292 | "token": TOKEN, 293 | "auth": auth, 294 | "access_token": access_token, 295 | } 296 | response = requests.post(url, params=params, json=sold_product_list) 297 | return response.json() 298 | 299 | 300 | # chain_id_price_dict={ 301 | # "chain_id": "", 302 | # "price": "", 303 | # "user_id": "", 304 | # "expires_second": 3600, 305 | # } 306 | def update_price_single(auth, access_token, chain_id_price_dict): 307 | """ 308 | @description: 单个修改价格 Single price modification 309 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 310 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 311 | @param chain_id_price_dict: 312 | @return: 313 | """ 314 | url = f"{base_url}/api/stockx/create_shipment" 315 | params = { 316 | "token": TOKEN, 317 | "auth": auth, 318 | "access_token": access_token, 319 | } 320 | response = requests.post(url, params=params, json=chain_id_price_dict) 321 | return response.json() 322 | 323 | 324 | # chain_id_price_dict = { 325 | # "products": [{ 326 | # "chain_id": "", 327 | # "price": "", 328 | # "user_id": "", 329 | # "expires_second": 3600, 330 | # }] 331 | # } 332 | def update_price_multi(auth, access_token, chain_id_price_dict): 333 | """ 334 | @description: 批量修改价格 Batch modification of price 335 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 336 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 337 | @param chain_id_price_dict: 338 | @return: 339 | """ 340 | url = f"{base_url}/api/stockx/create_shipment" 341 | params = { 342 | "token": TOKEN, 343 | "auth": auth, 344 | "access_token": access_token, 345 | } 346 | response = requests.post(url, params=params, json=chain_id_price_dict) 347 | return response.json() 348 | 349 | 350 | # product_info = { 351 | # "product_uuid": "", 352 | # "price": "", 353 | # "expires_second": 3600, 354 | # } 355 | def listing_product_single(auth, access_token, product_info): 356 | """ 357 | @description: 单个上架商品 Single listing product 358 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 359 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 360 | @param product_info: 361 | @return: 362 | """ 363 | url = f"{base_url}/api/stockx/listing_product_single" 364 | params = { 365 | "token": TOKEN, 366 | "auth": auth, 367 | "access_token": access_token, 368 | } 369 | response = requests.post(url, params=params, json=product_info) 370 | return response.json() 371 | 372 | 373 | # product_info = { 374 | # "products": [{ 375 | # "product_uuid": "", 376 | # "price": "", 377 | # "expires_second": 3600, 378 | # }] 379 | # } 380 | def listing_product_multi(auth, access_token, product_info): 381 | """ 382 | @description: 批量上架商品 Batch listing product 383 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 384 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 385 | @param product_info_list: 386 | @return: 387 | """ 388 | url = f"{base_url}/api/stockx/listing_product_multi" 389 | params = { 390 | "token": TOKEN, 391 | "auth": auth, 392 | "access_token": access_token, 393 | } 394 | response = requests.post(url, params=params, json=product_info) 395 | return response.json() 396 | 397 | 398 | def get_product_size_info_by_sku(auth, sku): 399 | """ 400 | @description: 获取商品尺码信息(内部缓存数据) Get product size information(internal cache data) 401 | @param auth: 初始化auth接口返回的auth参数 auth parameter returned by the init_auth interface 402 | @param access_token: 用户登录后的access_token参数 access_token parameter after user login 403 | @param sku: sku 404 | @return: 405 | """ 406 | url = f"{base_url}/api/stockx/get_product_size_info_by_sku" 407 | params = { 408 | "token": TOKEN, 409 | "auth": auth, 410 | "sku": sku, 411 | } 412 | response = requests.get(url, params=params) 413 | return response.json() 414 | 415 | 416 | if __name__ == '__main__': 417 | print(ping()) 418 | print(init_auth()) 419 | -------------------------------------------------------------------------------- /python/stockx_support_list.py: -------------------------------------------------------------------------------- 1 | """ 2 | support interface list for stockx as below: 3 | https://collector-px16ud0kof.cl6.perimeterx.net/api/v1/collector/mobile 4 | https://collector-px16ud0kof.cl6.perimeterx.net/api/v1/collector/mobile 5 | https://gateway.stockx.com/api/v3/browse?page={}&_search={}&dataType=product¤cy=USD&country=HK 6 | https://gateway.stockx.com/api/v2/products/{product_uuid}/activity? 7 | https://gateway.stockx.com/api/v3/rowse?page={}&sort={}&order=DESC&browseVerticals=sneakers&dataType=product¤cy=USD&country=HK&filterVersion=2 8 | https://gateway.stockx.com/api/v3/rowse?page={}&shoeSize={}&_tags={}&gender={}&market.lowestAsk={}&year={}&productCategory=SNEAKERS¤cy=USD&country=HK 9 | https://gateway.stockx.com/api/graphql 10 | https://gateway.stockx.com/api/graphql 11 | https://gateway.stockx.com/api/v1/users/me?meta=include 12 | https://gateway.stockx.com/api/v2/portfolioItems/{}?includes=payment,payout,pricing,shipping,product,meta,market&country=HK 13 | https://accounts.stockx.com/oauth/token 14 | https://gateway.stockx.com/api/graphql 15 | https://gateway.stockx.com/api/graphql 16 | https://gateway.stockx.com/api/graphql 17 | https://gateway.stockx.com/api/graphql 18 | https://gateway.stockx.com/api/v1/portfolio/multi?a=ask 19 | https://gateway.stockx.com/api/v1/portfolio?a=ask 20 | https://gateway.stockx.com/api/v1/portfolio/multi?a=ask 21 | https://gateway.stockx.com/api/graphql 22 | https://gateway.stockx.com/api/graphql 23 | https://gateway.stockx.com/api/graphql 24 | https://gateway.stockx.com/api/v1/portfolio?a=ask 25 | https://gateway.stockx.com/api/v1/customers/{customer_id} 26 | https://gateway.stockx.com/api/v1/portfolio/{chain_id} 27 | https://gateway.stockx.com/api/graphql 28 | """ -------------------------------------------------------------------------------- /res/stockx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Sting-Lee/CommercialStockXAPI/34c7f57d03cbb1051c72b1332b3faa58ff982b96/res/stockx.jpg --------------------------------------------------------------------------------