Wish Payments API

Payments APIs

Operations 3

POST /api/v3/payments/invoices/bulk_get Batch download invoices #
GET /api/v3/payments/invoices/bulk_get/{id} Get batch invoice download job status #
GET /api/v3/payments/early_payment Get merchant early payment info #

Work with this as data

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-payments-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 Specification

wish-payments-api-openapi.yml Raw ↑
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 Payments API
servers:
- url: https://merchant.wish.com
  description: V3 API endpoint
security:
- OAuth2: []
tags:
- description: Payments APIs
  name: Payments
paths:
  /api/v3/payments/invoices/bulk_get:
    post:
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentInvoiceOrderDownloadJob'
          description: successfully queued a batch invoice download job
        '400':
          content:
            application/json:
              examples:
                InvalidParameter:
                  value:
                    message: There is no such invoice download job for the merchant.
                    code: '90001'
              schema:
                $ref: '#/components/schemas/APIError'
          description: failed to queue an invoice download job
      parameters:
      - $ref: '#/components/parameters/invoices_limit_order_download_job'
      - $ref: '#/components/parameters/payment_released_at_min'
      - $ref: '#/components/parameters/payment_released_at_max'
      - $ref: '#/components/parameters/invoices_sort_by'
      tags:
      - Payments
      summary: Batch download invoices
      security:
      - OAuth2:
        - payments:read
      operationId: downloadPaymentInvoices
      x-code-samples:
      - 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/payments/invoices/bulk_get?limit=SOME_INTEGER_VALUE&payment_released_at_min=SOME_STRING_VALUE&payment_released_at_max=SOME_STRING_VALUE&sort_by=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}"
      - lang: shell_curl
        source: "curl --request POST \\\n  --url 'https://merchant.wish.com/api/v3/payments/invoices/bulk_get?limit=SOME_INTEGER_VALUE&payment_released_at_min=SOME_STRING_VALUE&payment_released_at_max=SOME_STRING_VALUE&sort_by=SOME_STRING_VALUE' \\\n  --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
      - lang: java_unirest
        source: "HttpResponse<String> response = Unirest.post(\"https://merchant.wish.com/api/v3/payments/invoices/bulk_get?limit=SOME_INTEGER_VALUE&payment_released_at_min=SOME_STRING_VALUE&payment_released_at_max=SOME_STRING_VALUE&sort_by=SOME_STRING_VALUE\")\n  .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n  .asString();"
      - lang: javascript_jquery
        source: "var settings = {\n  \"async\": true,\n  \"crossDomain\": true,\n  \"url\": \"https://merchant.wish.com/api/v3/payments/invoices/bulk_get?limit=SOME_INTEGER_VALUE&payment_released_at_min=SOME_STRING_VALUE&payment_released_at_max=SOME_STRING_VALUE&sort_by=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: python_requests
        source: 'import requests


          url = "https://merchant.wish.com/api/v3/payments/invoices/bulk_get"


          querystring = {"limit":"SOME_INTEGER_VALUE","payment_released_at_min":"SOME_STRING_VALUE","payment_released_at_max":"SOME_STRING_VALUE","sort_by":"SOME_STRING_VALUE"}


          headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}


          response = requests.request("POST", url, headers=headers, params=querystring)


          print(response.text)'
      description: Batch payment invoice download
  /api/v3/payments/invoices/bulk_get/{id}:
    get:
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentInvoiceOrderDownloadJob'
          description: successfully queried for the invoice download job
        '400':
          content:
            application/json:
              examples:
                InvalidParameter:
                  value:
                    message: There is no such invoice download job for the merchant.
                    code: '90001'
              schema:
                $ref: '#/components/schemas/APIError'
          description: failed to query for a invoice download job
      parameters:
      - required: true
        in: path
        description: ID of the batch invoice download job to query
        name: id
        schema:
          type: string
          format: object-id
      tags:
      - Payments
      summary: Get batch invoice download job status
      security:
      - OAuth2:
        - payments:read
      operationId: getPaymentInvoicesDownloadJob
      x-code-samples:
      - 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/payments/invoices/bulk_get/{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: shell_curl
        source: "curl --request GET \\\n  --url 'https://merchant.wish.com/api/v3/payments/invoices/bulk_get/{id}' \\\n  --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
      - lang: java_unirest
        source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/payments/invoices/bulk_get/{id}\")\n  .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n  .asString();"
      - lang: javascript_jquery
        source: "var settings = {\n  \"async\": true,\n  \"crossDomain\": true,\n  \"url\": \"https://merchant.wish.com/api/v3/payments/invoices/bulk_get/{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: python_requests
        source: 'import requests


          url = "https://merchant.wish.com/api/v3/payments/invoices/bulk_get/{id}"


          headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}


          response = requests.request("GET", url, headers=headers)


          print(response.text)'
  /api/v3/payments/early_payment:
    get:
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EarlyPayment'
          description: successfully queried for merchant early payment info
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: failed to query for merchant early payment info
      tags:
      - Payments
      description: Get info about early payment.
      summary: Get merchant early payment info
      security:
      - OAuth2:
        - payments:read
      x-code-samples:
      - 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/payments/early_payment\",\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: shell_curl
        source: "curl --request GET \\\n  --url 'https://merchant.wish.com/api/v3/payments/early_payment' \\\n  --header 'authorization: Bearer REPLACE_BEARER_TOKEN'"
      - lang: java_unirest
        source: "HttpResponse<String> response = Unirest.get(\"https://merchant.wish.com/api/v3/payments/early_payment\")\n  .header(\"authorization\", \"Bearer REPLACE_BEARER_TOKEN\")\n  .asString();"
      - lang: javascript_jquery
        source: "var settings = {\n  \"async\": true,\n  \"crossDomain\": true,\n  \"url\": \"https://merchant.wish.com/api/v3/payments/early_payment\",\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: python_requests
        source: 'import requests


          url = "https://merchant.wish.com/api/v3/payments/early_payment"


          headers = {''authorization'': ''Bearer REPLACE_BEARER_TOKEN''}


          response = requests.request("GET", url, headers=headers)


          print(response.text)'
      operationId: getEarlyPayment
components:
  schemas:
    PaymentInvoiceOrderDownloadJob:
      type: object
      properties:
        status:
          type: string
          description: The status of the download job
        job_id:
          type: string
          description: ID of the download job
          format: object-id
        total_count:
          type: number
          description: Total number of invoices attached to the download job
        created_at:
          type: string
          description: Created time of the download job
          format: date-time
        completed_at:
          type: string
          description: Complete time of the download job
          format: date-time
        file_urls:
          items:
            type: string
          type: array
          description: List of download S3 download urls
        processed_count:
          type: number
          description: This number indicates how many invoices have been processed so far
        merchant_id:
          type: string
          description: ID of the merchant that the invoices are for
          format: object-id
      allOf:
      - $ref: '#/components/schemas/V3GenericReportStatus'
    Price:
      required:
      - amount
      - currency_code
      type: object
      properties:
        amount:
          minimum: 0
          type: number
          description: Non-negative amount in decimals.
          format: float
        currency_code:
          format: iso-4217
          type: string
          description: The 3-letter currency code defined in [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html).
          example: USD
    APIError:
      required:
      - code
      - message
      type: object
      properties:
        message:
          type: string
        code:
          type: integer
          format: int32
    EarlyPayment:
      type: object
      properties:
        available_amount:
          $ref: '#/components/schemas/Price'
    V3GenericReportStatus:
      type: object
      description: A generic report status object used when an endpoint wants to return the status of their downloadable file
      properties:
        status:
          enum:
          - PENDING
          - CREATING
          - READY
          - EXCEPTION
          type: string
          description: "1. PENDING - The report generation request has been received and is awaiting processing\n2. CREATING - The report is being created\n3. READY -\tThe report is ready for download from `file_urls`\n4. EXCEPTION - The report generation failed, contact our api support\n"
        expiry_time:
          type: string
          description: The timestamp on when this report expires and `file_urls` become invalid
          format: date-time
        total_count:
          type: number
          description: Total number of files attached to the report
        created_at:
          type: string
          description: The timestamp on when this report is created
          format: date-time
        completed_at:
          type: string
          description: The timestamp on when this report is completed
          format: date-time
        file_urls:
          items:
            type: string
          type:
          - array
          - 'null'
          description: When the status is READY, the report will be availble at these urls. Otherwise it will be `null`
        processed_count:
          type: number
          description: This number indicates how many files have been processed so far
        id:
          type: string
          description: ID of the report
          format: object-id
  parameters:
    invoices_limit_order_download_job:
      schema:
        minimum: 1
        type: integer
      required: false
      description: The limit on the number of orders that will be returned.
      name: limit
      in: query
    payment_released_at_max:
      description: (Optional)Specify the end of the time window to view desired payments. Payments released after this time will not show.
      required: false
      name: payment_released_at_max
      in: query
      example: '2020-01-01T07:00:00.000Z'
      schema:
        type: string
        format: date-time
    invoices_sort_by:
      schema:
        default: payment_released_at
        type: string
      required: false
      description: '(Optional)Choose what field to order the payments, the order is descending by default. Current supported fields are:

        * payment_released_at: The time when the payment was released.

        '
      name: sort_by
      in: query
    payment_released_at_min:
      description: (Optional)Specify the beginning of the time window to view desired payments. Payments released before this time will not show.
      required: false
      name: payment_released_at_min
      in: query
      example: '2020-01-01T07:00:00.000Z'
      schema:
        type: string
        format: date-time
  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