Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/wish-taxonomy-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
contact:
email: partner-api@wish.com
x-wish-dev-contact:
assignee: kwei
email: marketplace-external-api@contextlogic.com
description: 'Wish Marketplace V3 API
# General Information
The Wish Marketplace API will be using oAuth to authenticate in order to offer better security for its users
* Learn about oAuth here.'
version: 3.0.65
title: Wish Marketplace V3 Taxonomy API
servers:
- url: https://merchant.wish.com
description: V3 API endpoint
security:
- OAuth2: []
tags:
- description: Taxonomy APIs
name: Taxonomy
paths:
/api/v3/products/categories/{id}:
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CategoryNode'
description: successfully queried for a category
'400':
content:
application/json:
examples:
InvalidParameter:
value:
message: There is no such category.
code: '10001'
schema:
$ref: '#/components/schemas/APIError'
description: failed to query a category
parameters:
- required: true
in: path
description: ID of the category to query
name: id
schema:
type: integer
tags:
- Taxonomy
summary: Get a category
security:
- OAuth2:
- products:read
operationId: getCategoryByID
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/products/categories/{id}"
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("GET", url, headers=headers)
print(response.text)'
- lang: java_unirest
source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/products/categories/{id}\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: php_curl
source: "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, array(\n CURLOPT_URL => \"https://merchant.wish.com/api/v3/products/categories/{id}\",\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 30,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"GET\",\n CURLOPT_HTTPHEADER => array(\n \"authorization: Bearer REPLACE_BEARER_TOKEN\"\n ),\n));\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n}"
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/products/categories/{id}\",\n \"method\": \"GET\",\n \"headers\": {\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n }\n}\n\n$.ajax(settings).done(function (response) {\n console.log(response);\n});"
- lang: shell_curl
source: "curl --request GET \\\n --url 'https://merchant.wish.com/api/v3/products/categories/{id}' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
/api/v3/products/attributes:
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CategoryAttributes'
description: successfully queried for attributes of a category
'400':
content:
application/json:
examples:
InvalidParameter:
value:
message: There is no such category.
code: '10001'
schema:
$ref: '#/components/schemas/APIError'
description: failed to query attributes of a category
parameters:
- required: true
in: query
description: Category ID of the attributes to query
name: category_id
schema:
type: integer
tags:
- Taxonomy
summary: Get attributes
security:
- OAuth2:
- products:read
operationId: getCategoryAttributes
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/products/attributes"
querystring = {"category_id":"SOME_INTEGER_VALUE"}
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)'
- lang: java_unirest
source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/products/attributes?category_id=SOME_INTEGER_VALUE\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: php_curl
source: "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, array(\n CURLOPT_URL => \"https://merchant.wish.com/api/v3/products/attributes?category_id=SOME_INTEGER_VALUE\",\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 30,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"GET\",\n CURLOPT_HTTPHEADER => array(\n \"authorization: Bearer REPLACE_BEARER_TOKEN\"\n ),\n));\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n}"
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/products/attributes?category_id=SOME_INTEGER_VALUE\",\n \"method\": \"GET\",\n \"headers\": {\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n }\n}\n\n$.ajax(settings).done(function (response) {\n console.log(response);\n});"
- lang: shell_curl
source: "curl --request GET \\\n --url 'https://merchant.wish.com/api/v3/products/attributes?category_id=SOME_INTEGER_VALUE' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
/api/v3/products/categories:
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CategoryNode'
description: successfully queried for categories
tags:
- Taxonomy
summary: Get root category
security:
- OAuth2:
- products:read
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/products/categories"
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("GET", url, headers=headers)
print(response.text)'
- lang: java_unirest
source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/products/categories\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: php_curl
source: "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, array(\n CURLOPT_URL => \"https://merchant.wish.com/api/v3/products/categories\",\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 30,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"GET\",\n CURLOPT_HTTPHEADER => array(\n \"authorization: Bearer REPLACE_BEARER_TOKEN\"\n ),\n));\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n echo \"cURL Error #:\" . $err;\n} else {\n echo $response;\n}"
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/products/categories\",\n \"method\": \"GET\",\n \"headers\": {\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n }\n}\n\n$.ajax(settings).done(function (response) {\n console.log(response);\n});"
- lang: shell_curl
source: "curl --request GET \\\n --url 'https://merchant.wish.com/api/v3/products/categories' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
operationId: getCategories
components:
schemas:
CategoryNode:
type: object
properties:
is_leaf:
readOnly: true
type: boolean
description: Whether the category is a leaf category. Only leaf categories can be used in self-classification.
subcategories:
items:
$ref: '#/components/schemas/CategoryNode'
readOnly: true
type: array
description: The subcategories of the category.
id:
readOnly: true
type: integer
description: The ID of the category.
name:
readOnly: true
type: string
description: The name of the category.
CategoryAttributes:
type: object
properties:
attributes:
items:
$ref: '#/components/schemas/CategoryAttribute'
readOnly: true
type: array
description: List of category attributes
maxItems: 50
CategoryAttribute:
type: object
properties:
constraint:
type: object
description: The constraint of the attribute.
allOf:
- $ref: '#/components/schemas/CategoryAttributeConstraint'
description:
readOnly: true
type: string
description: The description of the attribute.
name:
readOnly: true
type: string
description: The name of the attribute.
accepted_values:
items:
type: string
readOnly: true
type: array
description: The accepted values for the attribute. The value of the attribute must be selected from these accepted values.
maxItems: 1000
CategoryAttributeConstraint:
type: object
properties:
entry_mode:
readOnly: true
enum:
- UNSPECIFIED
- FREE_TEXT
- SINGLE_SELECTION
- MULTI_SELECTION
type: string
description: The entry mode of the attribute.
max_multi_select:
type: integer
description: The maximum number of values that can be selected from accepted_values for this attribute. Only applicable to attribute with entry_mode MULTI_SELECTION.
is_variation_attribute:
readOnly: true
type: boolean
description: Whether the attribute is for variation or product.
data_type:
readOnly: true
enum:
- UNSPECIFIED
- NUMBER
- STRING
- DATE
type: string
description: The data type of the attribute.
data_type_format:
readOnly: true
enum:
- UNSPECIFIED
- NUMBER_INT32
- NUMBER_DOUBLE
- DATE_YYYY
- DATE_YYYY_MM
- DATE_YYYY_MM_DD
type: string
description: The data type format of the attribute.
usage:
enum:
- UNSPECIFIED
- OPTIONAL
- RECOMMENDED
- REQUIRED
type: string
description: The usage of the attribute.
APIError:
required:
- code
- message
type: object
properties:
message:
type: string
code:
type: integer
format: int32
securitySchemes:
OpenID:
type: openIdConnect
openIdConnectUrl: https://merchant.wish.com/oidc/.well-known/openid-configuration
OAuth2:
type: oauth2
flows:
authorizationCode:
scopes:
payments:write: Update payments
tickets:write: Write customer tickets
epc:read: read EPC info
returns:write: Write returns
returns:read: Read returns
fbw:read: Read FBW
products:read: Read products
payments:read: Read payments
fbw:write: Write FBW
merchant:write: Write merchant
products:write: Write products
ratings:read: Read ratings
videos:read: Read videos
compliance:write: Write Compliance
product_boost:read: Read ProductBoost
listing_quality:read: Read listing quality
webhook:write: Write webhook
orders:read: Read orders
compliance:read: Read Compliance
fbs:read: Read FBS
penalties:read: Read penalties
penalties:write: Update penalties
infractions:read: Read infractions
orders:write: Update orders
merchant:read: Read merchant
notifications:write: Write notifications
announcements:read: Read announcements
product_boost:write: Write ProductBoost
notifications:read: Read notifications
webhook:read: Read webhook
qoo10:read: Read Qoo10
wps_parcel:write: Write WishParcel
wps_parcel:read: Read WishParcel
tickets:read: Read customer tickets
infractions:write: Write infractions
videos:write: Write videos
epc:write: write EPC info
tokenUrl: https://merchant.wish.com/api/v3/oauth/access_token
refreshUrl: https://merchant.wish.com/api/v3/oauth/refresh_token
authorizationUrl: https://merchant.wish.com/v3/oauth/authorize
externalDocs:
url: https://merchant.wish.com/documentation/api/v3/explorer
description: API explorer
x-wish-hidden: false