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 Tickets API
servers:
- url: https://merchant.wish.com
description: V3 API endpoint
security:
- OAuth2: []
tags:
- description: For each consumer question or complaint, a ticket is created to manage the dialogue between you, Wish, and the consumer. With this API, you can fetch tickets awaiting your response, fetch a specific ticket, close a ticket, and reply to tickets.
name: Tickets
paths:
/api/v3/tickets/{id}:
put:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Ticket'
description: successfully updated the ticket
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/APIError'
description: failed to update for the ticket
parameters:
- $ref: '#/components/parameters/ticket_id'
tags:
- Tickets
summary: Update a ticket
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateTicket'
security:
- OAuth2:
- tickets:write
operationId: updateTicket
x-code-samples:
- lang: python_requests
source: "import requests\n\nurl = \"https://merchant.wish.com/api/v3/tickets/{id}\"\n\npayload = \"{\\\"state\\\":\\\"CLOSED\\\"}\"\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/tickets/{id}\",\n \"method\": \"PUT\",\n \"headers\": {\n \"content-type\": \"application/json\",\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n },\n \"processData\": false,\n \"data\": \"{\\\"state\\\":\\\"CLOSED\\\"}\"\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/tickets/{id}\")\n .header(\"content-type\", \"application/json\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .body(\"{\\\"state\\\":\\\"CLOSED\\\"}\")\n .asString();"
- lang: shell_curl
source: "curl --request PUT \\\n --url 'https://merchant.wish.com/api/v3/tickets/{id}' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"state\":\"CLOSED\"}'"
- 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/tickets/{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 => \"{\\\"state\\\":\\\"CLOSED\\\"}\",\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: Close/re-open a ticket or appeal to Wish support for the ticket.
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Ticket'
description: successfully queried for a ticket
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/APIError'
description: failed to query for the ticket
parameters:
- $ref: '#/components/parameters/ticket_id'
tags:
- Tickets
summary: Get a ticket
security:
- OAuth2:
- tickets:read
operationId: getTicket
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/tickets/{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/tickets/{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/tickets/{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/tickets/{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/tickets/{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 a ticket by its ID
/api/v3/tickets/{id}/replies:
post:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Reply'
description: successfully replied for a ticket
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/APIError'
description: failed to reply for the ticket
parameters:
- $ref: '#/components/parameters/ticket_id'
tags:
- Tickets
summary: Reply to a ticket
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ReplyTicket'
security:
- OAuth2:
- tickets:write
operationId: replyTicket
x-code-samples:
- lang: python_requests
source: "import requests\n\nurl = \"https://merchant.wish.com/api/v3/tickets/{id}/replies\"\n\npayload = \"{\\\"message\\\":\\\"string\\\"}\"\nheaders = {\n 'content-type': \"application/json\",\n 'authorization': \"Bearer REPLACE_BEARER_TOKEN\"\n }\n\nresponse = requests.request(\"POST\", 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/tickets/{id}/replies\",\n \"method\": \"POST\",\n \"headers\": {\n \"content-type\": \"application/json\",\n \"authorization\": \"Bearer REPLACE_BEARER_TOKEN\"\n },\n \"processData\": false,\n \"data\": \"{\\\"message\\\":\\\"string\\\"}\"\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/tickets/{id}/replies\")\n .header(\"content-type\", \"application/json\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .body(\"{\\\"message\\\":\\\"string\\\"}\")\n .asString();"
- lang: shell_curl
source: "curl --request POST \\\n --url 'https://merchant.wish.com/api/v3/tickets/{id}/replies' \\\n --header 'authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"message\":\"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/tickets/{id}/replies\",\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_POSTFIELDS => \"{\\\"message\\\":\\\"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: Reply to a ticket by its ID. Note that you can only reply to a ticket in the AWAITING_MERCHANT state. Our system will automatically update the ticket state after you reply
/api/v3/tickets:
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ListTicketsResponse'
description: successfully queried for a list of tickets
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/APIError'
description: failed to query for the list of tickets
parameters:
- $ref: '#/components/parameters/ticket_types'
- $ref: '#/components/parameters/ticket_states'
- $ref: '#/components/parameters/ticket_limit'
- $ref: '#/components/parameters/ticket_sort_by'
- $ref: '#/components/parameters/updated_at_min_param'
- $ref: '#/components/parameters/updated_at_max_param'
tags:
- Tickets
summary: List all tickets
security:
- OAuth2:
- tickets:read
operationId: listTickets
x-code-samples:
- lang: python_requests
source: 'import requests
url = "https://merchant.wish.com/api/v3/tickets"
querystring = {"types":"SOME_ARRAY_VALUE","states":"SOME_ARRAY_VALUE","limit":"SOME_INTEGER_VALUE","sort_by":"SOME_STRING_VALUE","updated_at_min":"SOME_STRING_VALUE","updated_at_max":"SOME_STRING_VALUE"}
headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}
response = requests.request("GET", 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/tickets?types=SOME_ARRAY_VALUE&states=SOME_ARRAY_VALUE&limit=SOME_INTEGER_VALUE&sort_by=SOME_STRING_VALUE&updated_at_min=SOME_STRING_VALUE&updated_at_max=SOME_STRING_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: java_unirest
source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/tickets?types=SOME_ARRAY_VALUE&states=SOME_ARRAY_VALUE&limit=SOME_INTEGER_VALUE&sort_by=SOME_STRING_VALUE&updated_at_min=SOME_STRING_VALUE&updated_at_max=SOME_STRING_VALUE\")\n .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n .asString();"
- lang: shell_curl
source: "curl --request GET \\\n --url 'https://merchant.wish.com/api/v3/tickets?types=SOME_ARRAY_VALUE&states=SOME_ARRAY_VALUE&limit=SOME_INTEGER_VALUE&sort_by=SOME_STRING_VALUE&updated_at_min=SOME_STRING_VALUE&updated_at_max=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/tickets?types=SOME_ARRAY_VALUE&states=SOME_ARRAY_VALUE&limit=SOME_INTEGER_VALUE&sort_by=SOME_STRING_VALUE&updated_at_min=SOME_STRING_VALUE&updated_at_max=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 => \"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 all tickets
components:
parameters:
updated_at_min_param:
schema:
type: string
format: date-time
required: false
description: Show tickets updated after the given date time. Default to the date time of the earliest updated ticket if not provided
name: updated_at_min
in: query
ticket_sort_by:
schema:
default: updated_at.desc
pattern: ^updated_at(\.(asc|desc))?$
type: string
required: false
description: Sort results by the given attribute. Enabled attributes are `updated_at`. Default order is `desc`, use `asc` to sort in reverse.
name: sort_by
in: query
ticket_states:
schema:
minItems: 1
items:
enum:
- AWAITING_WISH
- AWAITING_USER
- AWAITING_MERCHANT
- CLOSED
- PERMANENTLY_CLOSED
type: string
type: array
required: false
description: Parameter used to choose the state of tickets to retrieve. Default to list tickets in all states if not supplied. Tickets in PERMANENTLY_CLOSED state can never be re-opened. Tickets in CLOSED state can be re-opened by merchants who have corresponding permissions
name: states
in: query
ticket_limit:
schema:
default: 50
minimum: 1
type: integer
maximum: 500
required: false
description: A limit on the number of tickets that can be returned. Limit can range from 1 to 500 items and the default is 50
name: limit
in: query
ticket_types:
schema:
minItems: 1
items:
enum:
- ORDER
- PRE_PURCHASE
- POST_CUSTOMER_SUPPORT
type: string
type: array
required: false
description: Parameter used to choose which type of tickets to retrieve. Default to list all three types if not supplied.
name: types
in: query
updated_at_max_param:
schema:
type: string
format: date-time
required: false
description: Show tickets updated before the given date time. Default to the date time of the latest updated ticket if not provided
name: updated_at_max
in: query
ticket_id:
schema:
type: string
format: object-id
required: true
description: Wish's unique identifier for the ticket
name: id
in: path
schemas:
Reply:
type: object
properties:
message:
readOnly: true
type: string
description: Contents of the reply
format: markdown
replied_at:
readOnly: true
type: string
description: Time when the reply was sent
format: date-time
sender:
readOnly: true
enum:
- USER
- MERCHANT
- WISH_SUPPORT
- WISH_AUTOMATED_SUPPORT
- LIVE_CHAT
type: string
description: 'Who sent the reply, can be: user, merchant, wish support, wish automated support, live chat'
supporting_files:
items:
$ref: '#/components/schemas/ReplySupportingFile'
readOnly: true
type: array
description: Supporting files provided in the reply. Image links expire after 60 minutes, users can get a new link everytime they request from the API this reply came from.
ListTicketsResponse:
items:
$ref: '#/components/schemas/Ticket'
type: array
description: List of tickets returned.
ReplySupportingFile:
readOnly: true
type: object
description: The file to support reply, can be image url at present
properties:
url:
type: string
description: Url of the file
format: uri
file_name:
type: string
description: The name of the supporting file
TicketOrder:
type: object
properties:
id:
readOnly: true
type: string
description: ID of the order
format: object-id
ReplyTicket:
type: object
properties:
message:
type: string
description: The message you wish to send, with a max of 2000 characters
format: markdown
APIError:
required:
- code
- message
type: object
properties:
message:
type: string
code:
type: integer
format: int32
Ticket:
type: object
properties:
type:
readOnly: true
enum:
- ORDER
- PRE_PURCHASE
- POST_CUSTOMER_SUPPORT
type: string
description: Type of the ticket
sub_label:
readOnly: true
type: string
description: Wish's sub-label for the ticket
updated_at:
readOnly: true
type: string
description: The time that the ticket was last updated at
resolution_info:
type: object
description: State of the ticket
properties:
closed_at:
readOnly: true
type: string
description: The time the ticket was closed (if applicable)
format: date-time
closed_by:
readOnly: true
enum:
- USER
- MERCHANT
- WISH_SUPPORT
- WISH_AUTOMATED_SUPPORT
- LIVE_CHAT
type: string
description: 'Who closed the ticket, can be: USER, MERCHANT, WISH_SUPPORT, WISH_AUTOMATED_SUPPORT or LIVE_CHAT'
orders:
items:
$ref: '#/components/schemas/TicketOrder'
type: array
description: A list of all orders affected by the ticket.
state:
readOnly: true
enum:
- AWAITING_WISH
- AWAITING_USER
- AWAITING_MERCHANT
- CLOSED
- PERMANENTLY_CLOSED
type: string
description: State of the ticket Tickets in PERMANENTLY_CLOSED state can never be re-opened. Tickets in CLOSED state can be re-opened by merchants who have corresponding permissions
products:
items:
$ref: '#/components/schemas/TicketProduct'
type: array
description: A list of all products affected by the ticket.
buyer_info:
type: object
description: The information of the user who created the ticket
properties:
locale:
readOnly: true
type: string
allOf:
- $ref: '#/components/schemas/Locale'
name:
readOnly: true
type: string
description: Name of the buyer
replies:
items:
$ref: '#/components/schemas/Reply'
type: array
description: A list of all replies to the ticket. Each Reply of the ticket includes the message and the Image Urls (If provided).
opened_at:
readOnly: true
type: string
description: The time the ticket was created
format: date-time
merchant_id:
readOnly: true
type: string
description: The merchant the ticket is for
format: object-id
refund_reason:
readOnly: true
enum:
- OTHER
- SHIPPING_TAKING_TOO_LONG
- USER_NO_LONGER_WANTS_ITEM
- ITEM_DOES_NOT_FIT
- ITEM_IS_DAMAGED
- ITEM_DOES_NOT_MATCH_LISTING
- USER_PLACED_ORDER_BY_MISTAKE
- ITEM_IS_COUNTERFEIT
- ITEM_DOES_NOT_WORK_AS_DESCRIBED
- ITEM_NEVER_ARRIVED
- EMPTY_PACKAGE
- RECEIVED_NOTE_FROM_MERCHANT
type: string
description: The reason the order will be refunded for, depends on the label of the ticket
id:
readOnly: true
type: string
description: Ticket ID
format: object-id
subject:
readOnly: true
type: string
description: The subject for the ticket
TicketProduct:
type: object
properties:
id:
readOnly: true
type: string
description: ID of the product
format: object-id
UpdateTicket:
type: object
properties:
state:
enum:
- CLOSED
- AWAITING_MERCHANT
- AWAITING_WISH
type: string
description: 'State transition rules: (1) To appeal to wish for a ticket, update the state to be AWAITING_WISH. (2) To re-open a CLOSED ticket (if you have permission), update the ticket to AWAITING_MERCHANT state. (3) To close a ticket, update the ticket to CLOSED state.'
Locale:
type: string
description: A language tag (which is sometimes referred to as a 'locale identifier'). This consists of a 2-3 letter base language tag representing the language, optionally followed by additional subtags separated by '-'. The most common extra information is the country or region variant (like 'en-US' or 'fr-CA'). For more information, see specification [BCP 47](https://datatracker.ietf.org/doc/html/bcp47#section-2).
format: BCP 47
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