openapi: 3.0.0
info:
contact:
email: partner-api@wish.com
x-wish-dev-contact:
assignee: kwei
email: marketplace-external-api@contextlogic.com
description: "\nWish Marketplace V3 API\n\n# General Information\n\n The Wish Marketplace API will be using oAuth to authenticate in order to offer better security for its users\n\n * Learn about oAuth [here](oauth).\n * If you are a merchant and want to create an application for yourself, learn about how to create a private app [here](../../private-app)\n * If you are a ERP and create applications that'll be used by multiple merchants, learn about how to create a public app [here]( ../../public-app). You will need to apply to be a verified public application\n\n ## How to Test\n\n To avoid testing the API on production data, use our sandbox. The sandbox is completely contained and will not affect Wish users or your merchant account. \n \n To reach the sandbox, visit: https://sandbox.merchant.wish.com.\n\n To use the sandbox in testing, use https://sandbox.merchant.wish.com/api/v3/ as your base URL.\n\n How to Generate test data after you have created a sandbox account:\n 1. Navigate to the [unfulfilled orders page](https://sandbox.merchant.wish.com/transactions/action)\n 2. Hover over the dropdown next to the 'fulfill with csv' button and select Generate Orders\n\n ## Date/Time Format\n\n All dates and times in our API are returned in the same format. It is in the form `YYYY-MM-DDTHH:mm:ss.sss±XX:ZZ` or `YYYY-MM-DDTHH:mm:ss.sssZ`, where 'Z' represents UTC timezone.\n When sending timestamps in URL parameters or the request body, millisecond is optional and will defaults to 0 if not provided.\n\n * `YYYY` is the year\n * `MM` is the month\n * `DD` is the day\n * `HH` is the hour (in 24-hour clock format)\n * `mm` is the minutes\n * `ss.sss` is the seconds and milliseconds\n * `±XX:ZZ` is the UTC offset of the form +XX:ZZ or -XX:ZZ where XX is a 2-digit string giving the number of UTC offset hours, and ZZ is a 2-digit string giving the number of UTC offset minutes.\n\n ## Response Schema\n\n Every response returned from the Wish API will have the same schema. This schema is intended to give you a predictable manner to check the status of your request and know where to get the data. Each response will have the following top level attributes: message, code and data.\n\n **Attributes**\n\n <table>\n <tbody>\n <tr>\n <th>Message</th>\n <td>A message describing the error that happened, example: \"We could not find a product for id: '5d30f60e0a6fc464f4f376b0'\"</td>\n </tr>\n <tr>\n <th>Code</th>\n <td>A unique number which represents the error that has occurred, example: 1008 or 0 if success.</td>\n </tr>\n <tr>\n <th>Data</th>\n <td>For errors this will be empty.</td>\n </tr>\n </tbody>\n </table>\n\n ## General Querying Techniques\n\n ### Partial Resources\n All GET endpoints (except OAuth) support a fields parameter which allows for requesting a partial response. Any fields specified in the response schema of an endpoint can be selected. The top level attribute `data` can be ignored when using the fields parameter.\n\n **Syntax**\n * Comma-separated list to select multiple fields\n * Use forward slash `/` to select nested field: `field1/nested_field`\n * Use parentheses `( )` to select multiple nested fields: `field1(nested_field1,nested_field2)`\n * Use `*` for wildcard selection: `field1/nested_field/*`\n\n\n **Example:**\n ```\n https://merchant.wish.com/api/v3/demo/get?fields=title,items(id,info/name)\n ```\n Which would result in the following partial response:\n ```\n {\n \"title\": \"demo\",\n \"items\": [\n {\n \"id\": \"1\",\n \"info\": {\n \"name\": \"demo_item_1\"\n }\n }, {\n \"id\": \"2\",\n \"info\": {\n \"name\": \"demo_item_2\"\n }\n },\n ...\n ]\n }\n ```\n\n ## Locale\n You can optionally specify locale in order to translate content and error messages into your language.\n To do this use the [Accept-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) header to specify your preferred locales.\n If none is provided, your default locale will be used.\n\n For example, to request content in Chinese use: `Accept-Language: zh`\n\n In the response, you will receive a [Content-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language) header that specifies the locale code of the response content.\n\n\n ## Rate-Limiting\n\n Rate-limiting will be performed on a per-merchant basis for each app. It is your responsibility to ensure you are not making frequent unnecessary calls to the API.\n\n If the rate limits cannot satisfy your need, we highly recommend integrating webhooks for your app. With webhooks, instead of pulling resources periodically, your app will receive real-time notifications for particular events that occur to a merchant’s store. [Learn more](https://merchant.wish.com/documentation/webhooks)\n\n **Normal Usage**\n\n To help you track the rate-limiter status, the following response header(s) will be provided with each response:\n\n * `Wish-Rate-Limit-Remaining`: The number of calls remaining in the current rate-limiting window.\n\n\n **Rate-Limit Exceeded**\n\n After you exceed the number of allowed calls in the current rate-limiting window, you will receive a `429 Too Many Requests` error response and the following additional header(s):\n\n * `Wish-Rate-Limit-Reset`: The time the rate-limiter will reset.\n\n\n Once you receive this response there is nothing you can do except wait for the rate-limiter to reset. In order to avoid being rate-limited, you may want to cache your responses.\n\n ## Sorting\n ### Overview\n Sorting is available for most endpoints that return a collection (list) of objects. Each collection has a different set of enabled parameters for sorting, so please check specific collection section for detail.\n\n ### Usage\n Append `sort_by={parameter_name}.{asc|desc}` in your API request where `parameter_name` is a valid sortable parameter of that endpoint.\n\n Example:\n ```\n /api/v3/penalties?sort_by=created_at.asc\n ```\n\n ## Pagination\n All bulk-fetching API methods that return lists of resource support pagination.\n These methods commonly take at least 3 parameters: `limit`, `{attribute}_min`, `{attribute}_max`. Attribute can be `id`, `create_at`, etc., depending on each specific method.\n For instance, you make a request to get a list of penalties `/api/v3/penalties?limit=20&created_at_max=2020-04-08T23:59:59Z&sort_by=created_at_max.desc`,\n which means to fetch 20 penalities sorted by their creation time, with the most recent one being created before `2020-04-08T23:59:59Z`.\n Assume that the response contains 20 `penalty` objects with the last object being `penalty_foo`,\n then your subsequent request can be `/api/v3/penalties?limit=20&created_at_max={penalty_foo.create_at}&sort_by=created_at_max.desc` to fetch the next page of list.\n Note that when fetching next page using `id_min` or `id_max`, you need to perform `+/- 1`(correspondingly) on the last object's ID in the current page, as `id_min` and `id_max` are inclusive. (All V3 API resources' IDs are either integer or BSON object ID - a hex number).\n\n\n ## Request ID\n Each API request is associated with a unique identifier. You can find this value in response headers, under `Wish-Request-Id`.\n **When you need to contact us about a specific request, please provide this ID to ensure the fastest possible reply**\n\n# Authentication\nFor all requests that require OAuth2 authentication, the access token must be provided in the `Authorization` request header in the following format: `Authorization: Bearer <token>`\n\nFor example:\n```\nAuthorization: Bearer 3d6e2d71bc464e42bfbdb081afb73c1e\n```\n<!-- ReDoc-Inject: <security-definitions> -->\n"
version: 3.0.65
title: Wish Marketplace V3 Brands EU Product Compliance API
servers:
- url: https://merchant.wish.com
description: V3 API endpoint
security:
- OAuth2: []
tags:
- description: APIs that support EU Product Compliance -- EU Regulation 2019/1020 on Market Surveillance and Compliance of Products (MSR).</br> For a product to be compliant with the MSR, a product must be linked with a responsible person located in the EU.
name: EU Product Compliance
paths:
/api/v3/eu_product_compliance/responsible_person/{id}:
put:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponsiblePersonResponse'
description: successfully updated a new EU responsible person.
'400':
content:
application/json:
examples:
ExtAPIResponsiblePersonInvalidFieldException:
value:
message: The input responsible person has invalid fields.
code: '10001'
ExtAPIResponsiblePersonNoAccessException:
value:
message: The responsible person is not accessable for the operated merchant.
code: '10004'
ExtAPIUpdateInvalidResponsiblePersonException:
value:
message: The responsible person is already rejected or deleted, so not able to update.
code: '10007'
ExtAPIResponsiblePersonNotFoundException:
value:
message: The input responsible person is not found by the given id.
code: '10003'
schema:
$ref: '#/components/schemas/APIError'
description: failed to update a new EU responsible person.
parameters:
- $ref: '#/components/parameters/id'
tags:
- EU Product Compliance
summary: Update an EU Responsible Person
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ResponsiblePerson'
security:
- OAuth2:
- compliance:write
operationId: updateEUResponsiblePerson
x-code-samples:
- lang: python_requests
source: "import requests\n\nurl = \"https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}\"\n\npayload = \"{\\\"address_line1\\\":\\\"string\\\",\\\"address_line2\\\":\\\"string\\\",\\\"city\\\":\\\"string\\\",\\\"country\\\":\\\"string\\\",\\\"email\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"phone_number\\\":\\\"string\\\",\\\"state\\\":\\\"string\\\",\\\"zipcode\\\":\\\"string\\\"}\"\nheaders = {\n 'content-type': \"application/json\",\n 'authorization': \"Bearer REPLACE_BEARER_TOKEN\"\n }\n\nresponse = requests.request(\"PUT\", url, data=payload, headers=headers)\n\nprint(response.text)"
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}\",\n \"method\": \"PUT\",\n \"headers\": {\n \"content-type\": \"application/json\",\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n },\n \"processData\": false,\n \"data\": \"{\\\"address_line1\\\":\\\"string\\\",\\\"address_line2\\\":\\\"string\\\",\\\"city\\\":\\\"string\\\",\\\"country\\\":\\\"string\\\",\\\"email\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"phone_number\\\":\\\"string\\\",\\\"state\\\":\\\"string\\\",\\\"zipcode\\\":\\\"string\\\"}\"\n}\n\n$.ajax(settings).done(function (response) {\n console.log(response);\n});"
- lang: java_unirest
source: "HttpResponse<String> response = Unirest.put(\"https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}\")\n .header(\"content-type\", \"application/json\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .body(\"{\\\"address_line1\\\":\\\"string\\\",\\\"address_line2\\\":\\\"string\\\",\\\"city\\\":\\\"string\\\",\\\"country\\\":\\\"string\\\",\\\"email\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"phone_number\\\":\\\"string\\\",\\\"state\\\":\\\"string\\\",\\\"zipcode\\\":\\\"string\\\"}\")\n .asString();"
- lang: shell_curl
source: "curl --request PUT \\\n --url 'https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"address_line1\":\"string\",\"address_line2\":\"string\",\"city\":\"string\",\"country\":\"string\",\"email\":\"string\",\"name\":\"string\",\"phone_number\":\"string\",\"state\":\"string\",\"zipcode\":\"string\"}'"
- 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/eu_product_compliance/responsible_person/{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 => \"PUT\",\n CURLOPT_POSTFIELDS => \"{\\\"address_line1\\\":\\\"string\\\",\\\"address_line2\\\":\\\"string\\\",\\\"city\\\":\\\"string\\\",\\\"country\\\":\\\"string\\\",\\\"email\\\":\\\"string\\\",\\\"name\\\":\\\"string\\\",\\\"phone_number\\\":\\\"string\\\",\\\"state\\\":\\\"string\\\",\\\"zipcode\\\":\\\"string\\\"}\",\n CURLOPT_HTTPHEADER => array(\n \"authorization: Bearer REPLACE_BEARER_TOKEN\",\n \"content-type: application/json\"\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}"
description: Update details of an EU Responsible Person.
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ResponsiblePersonResponse'
description: successfully queried for an EU responsible person.
'400':
content:
application/json:
examples:
ExtAPIResponsiblePersonNoAccessException:
value:
message: The responsible person is not accessable for the operated merchant.
code: '10004'
ExtAPIResponsiblePersonNotFoundException:
value:
message: The input responsible person is not found by the given id.
code: '10003'
schema:
$ref: '#/components/schemas/APIError'
description: failed to query for an EU responsible person.
parameters:
- $ref: '#/components/parameters/id'
tags:
- EU Product Compliance
summary: Get an EU Responsible Person
security:
- OAuth2:
- compliance:read
operationId: getEUResponsiblePerson
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}"
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("GET", url, headers=headers)
print(response.text)'
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{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: java_unirest
source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: shell_curl
source: "curl --request GET \\\n --url 'https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
- 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/eu_product_compliance/responsible_person/{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}"
description: Get an EU Responsible Person given its id.
delete:
responses:
'204':
description: successfully deleted an EU responsible person.
'400':
content:
application/json:
examples:
ExtAPIResponsiblePersonInvalidFieldException:
value:
message: The input responsible person has invalid fields.
code: '10001'
ExtAPIDeleteLinkedResponsiblePersonException:
value:
message: The responsible person is still linked with some products, so not able to delete before unlinking to all related products.
code: '10006'
schema:
$ref: '#/components/schemas/APIError'
description: failed to delete an EU responsible person.
parameters:
- $ref: '#/components/parameters/id'
tags:
- EU Product Compliance
summary: Delete an EU Responsible Person
security:
- OAuth2:
- compliance:write
operationId: deleteEUResponsiblePerson
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}"
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("DELETE", url, headers=headers)
print(response.text)'
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}\",\n \"method\": \"DELETE\",\n \"headers\": {\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n }\n}\n\n$.ajax(settings).done(function (response) {\n console.log(response);\n});"
- lang: java_unirest
source: "HttpResponse<String> response = Unirest.delete(\"https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: shell_curl
source: "curl --request DELETE \\\n --url 'https://merchant.wish.com/api/v3/eu_product_compliance/responsible_person/{id}' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
- 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/eu_product_compliance/responsible_person/{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 => \"DELETE\",\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}"
description: Delete an EU responsible person. Please first call [Bulk Update EU Product Compliance Status API](/documentation/api/v3/reference#operation/BulkUpdateProducts) to remove all links with products of input responsible person.
/api/v3/eu_product_compliance/products/bulk_update:
post:
responses:
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/BulkUpdateEUProductComplianceStatusJob'
description: successfully started a bulk update job.
'400':
content:
application/json:
examples:
ExtAPIResponsiblePersonNotFoundException:
value:
message: The input responsible person is not found by the given id.
code: '10003'
schema:
$ref: '#/components/schemas/APIError'
description: failed to start a bulk update job.
parameters:
- $ref: '#/components/parameters/old_person_id'
- $ref: '#/components/parameters/new_person_id'
tags:
- EU Product Compliance
summary: Bulk Update EU Product Compliance Status
security:
- OAuth2:
- compliance:write
operationId: BulkUpdateProducts
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update"
querystring = {"old_person_id":"SOME_STRING_VALUE","new_person_id":"SOME_STRING_VALUE"}
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("POST", url, headers=headers, params=querystring)
print(response.text)'
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update?old_person_id=SOME_STRING_VALUE&new_person_id=SOME_STRING_VALUE\",\n \"method\": \"POST\",\n \"headers\": {\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n }\n}\n\n$.ajax(settings).done(function (response) {\n console.log(response);\n});"
- lang: java_unirest
source: "HttpResponse<String> response = Unirest.post(\"https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update?old_person_id=SOME_STRING_VALUE&new_person_id=SOME_STRING_VALUE\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: shell_curl
source: "curl --request POST \\\n --url 'https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update?old_person_id=SOME_STRING_VALUE&new_person_id=SOME_STRING_VALUE' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
- 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/eu_product_compliance/products/bulk_update?old_person_id=SOME_STRING_VALUE&new_person_id=SOME_STRING_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 => \"POST\",\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}"
description: Bulk update links of an EU responsible person with products given a responsible person id.</br> Find all products associated with the old responsible person id.</br> If new responsible person id is also given, reset above products with new responsible person.</br> If no new responsible person id given, unlink above products as no responsible person status.</br> This API processes the request asynchronously and triggers a running job.</br> Please use [Get Bulk Update Job Status API](/documentation/api/v3/reference#operation/GetBulkUpdateStatus) to check the status of a running job
/api/v3/eu_product_compliance/products/bulk_update/{id}:
get:
responses:
'202':
content:
application/json:
schema:
$ref: '#/components/schemas/BulkUpdateEUProductComplianceStatusJob'
description: successfully queried for a bulk update job
'400':
content:
application/json:
examples:
ExtAPIBulkRelinkJobNotFoundException:
value:
message: There is no such bulk update job for the merchant.
code: '10008'
schema:
$ref: '#/components/schemas/APIError'
description: failed to query for a bulk update job
parameters:
- required: true
in: path
description: id of the bulk update job to query
name: id
schema:
type: string
format: object-id
tags:
- EU Product Compliance
summary: Get Bulk Update Job Status
security:
- OAuth2:
- compliance:read
operationId: GetBulkUpdateStatus
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update/{id}"
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("GET", url, headers=headers)
print(response.text)'
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update/{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: java_unirest
source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update/{id}\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: shell_curl
source: "curl --request GET \\\n --url 'https://merchant.wish.com/api/v3/eu_product_compliance/products/bulk_update/{id}' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
- 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/eu_product_compliance/products/bulk_update/{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}"
description: Get Status of Bulk Update Job to reset or unlink a responsible person with associated products.</br> The job should be triggered by [Bulk Update EU Product Compliance Status API](/documentation/api/v3/reference#operation/BulkUpdateProducts)
/api/v3/eu_product_compliance/products:
put:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EUProductComplianceStatusResponse'
description: successfully updated EU product compliance status for input products
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/APIError'
description: failed to update for EU product compliance status for input products
tags:
- EU Product Compliance
summary: Update EU Product Compliance Status
requestBody:
content:
application/json:
schema:
items:
$ref: '#/components/schemas/EUProductComplianceStatusRequest'
type: array
description: List of a product id associated with update request on EU Product Compliance Status
maxItems: 500
security:
- OAuth2:
- compliance:write
operationId: updateEUProductComplianceStatus
x-code-samples:
- lang: python_requests
source: "import requests\n\nurl = \"https://merchant.wish.com/api/v3/eu_product_compliance/products\"\n\npayload = \"[{\\\"product_id\\\":\\\"string\\\",\\\"responsible_person_id\\\":\\\"string\\\"}]\"\nheaders = {\n 'content-type': \"application/json\",\n 'authorization': \"Bearer REPLACE_BEARER_TOKEN\"\n }\n\nresponse = requests.request(\"PUT\", url, data=payload, headers=headers)\n\nprint(response.text)"
- lang: javascript_jquery
source: "var settings = {\n \"async\": true,\n \"crossDomain\": true,\n \"url\": \"https://merchant.wish.com/api/v3/eu_product_compliance/products\",\n \"method\": \"PUT\",\n \"headers\": {\n \"content-type\": \"application/json\",\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n },\n \"processData\": false,\n \"data\": \"[{\\\"product_id\\\":\\\"string\\\",\\\"responsible_person_id\\\":\\\"string\\\"}]\"\n}\n\n$.ajax(settings).done(function (response) {\n console.log(response);\n});"
- lang: java_unirest
source: "HttpResponse<String> response = Unirest.put(\"https://merchant.wish.com/api/v3/eu_product_compliance/products\")\n .header(\"content-type\", \"application/json\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .body(\"[{\\\"product_id\\\":\\\"string\\\",\\\"responsible_person_id\\\":\\\"string\\\"}]\")\n .asString();"
- lang: shell_curl
source: "curl --request PUT \\\n --url 'https://merchant.wish.com/api/v3/eu_product_compliance/products' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '[{\"product_id\":\"string\",\"responsible_person_id\":\"string\"}]'"
- 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/eu_product_compliance/products\",\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 => \"PUT\",\n CURLOPT_POSTFIELDS => \"[{\\\"product_id\\\":\\\"string\\\",\\\"responsible_person_id\\\":\\\"string\\\"}]\",\n CURLOPT_HTTPHEADER => array(\n \"authorization: Bearer REPLACE_BEARER_TOKEN\",\n \"content-type: application/json\"\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}"
description: Update the EU product compliance status for each input product by linking with aassociated input responsible_person_id or unlinking the existing responsible person if associated input responsible_person_id is empty or null.</br> The input array size limitation is 500.
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/EUProductComplianceStatusResponse'
description: successfully queried for product compliance status
'400':
content:
application/json:
examples:
ExtAPIResponsiblePersonNotFoundException:
value:
message: The input responsible person is not found by the given id.
code: '10003'
schema:
$ref: '#/components/schemas/APIError'
description: failed to query for product compliance status
parameters:
- $ref: '#/components/parameters/compliance_statuses'
- $ref: '#/components/parameters/product_ids'
- required: false
in: query
description: The beginning product id(inclusive) of the result array. If not provided, will use the smallest product id.</br> Ignored when product_ids is provided.
name: product_id_min
schema:
type: string
format: object-id
- required: false
in: query
description: The ending product id(inclusive) of the result array. If not provided, will use the largest product id.</br> Ignored when product_ids is provided.
name: product_id_max
# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wish/refs/heads/main/openapi/wish-eu-product-compliance-api-openapi.yml