Viewing my GTIN exemption status

Sellers who list non-branded items such as private label or handmade jewelry on Walmart.com may be eligible to request a Global Trade Item Number (GTIN) exemption. This exemption allows sellers to proceed without a product type identifier during item setup.

Note: GTIN exemptions are not available for branded products such as Nike, Apple, etc. These items must include valid product identifiers. To learn more, refer to the Request a GTIN exemption article.

GTIN Exemption Status API

The GTIN Exemption Status API lets you check the status of your GTIN exemption requests submitted in Seller Center. The API fetches responses that match what is displayed in the Seller Center dashboard.

Usage scenarios

  • Track exemption status: Use this API to check whether your exemption request has been Approved, Denied, Processing, or Requires Additional Information.
  • Filter by product attributes: Use filters to narrow down GTIN exemption status by Category, Product Type, Brand, etc.
  • Audit submission history: Query exemption requests submitted within a specific time range using submissionTimeFrom and submissionTimeUpto.
  • Paginate large result sets: Use nextCursor to paginate through large volumes of exemption data. Do not pass nextCursor on the first request; use the value returned in the response for subsequent queries.
  • Sorting: Use sortBy to sort the results by fields such as category, brand, exemption status, and submission time. Use sortOrder to define the sort direction in either ascending (ASC) or descending (DESC) order.

Reference guide

This guide explains how to use the GTIN Exemption Status API, providing practical examples and step-by-step instructions for integrating the API into your solution.

For full technical details, including endpoints, parameters, and brief descriptions, refer to the GTIN Exemption Status API Reference guide.

Endpoint

GET /v3/items/gtin-exemption/status

Query parameters, pagination, and sorting

This API supports optional query parameters for filtering, pagination, and sorting:

  • Filtering is case-insensitive, except for nextCursor, which must be copied exactly as returned in the response.
  • Filters support substring matches for category, productType, brand, and submissionId.
  • The API uses cursor-based pagination. Do not include nextCursor in the first request. If the response includes a nextCursor, use it in the next request to retrieve the following page.
  • If no pagination or sorting parameters are provided, the API defaults to limit=25, sortBy=submissionTime, and sortOrder=DESC.
ParameterTypeDescription
categoryStringCategory name. Example, Animals
productTypeStringProduct type name. Example, Aquarium Water Pumps
brandStringBrand name. Example: Imagitarium
Use -- as the brand name to indicate a legacy exemption originally granted at the category level. These exemptions have since transitioned to a product type–based model.
exemptionStatusStringExemption status. One of: APPROVED, DENIED, PROCESSING, NEEDS_INFO, CLOSED
submissionIdStringUnique submission ID. Example, MIGBCC80
submissionTimeFromLongStart of submission date range in epoch milliseconds. Must be less than or equal to submissionTimeUpto.
submissionTimeUptoLongEnd of submission date range in epoch milliseconds
sortByStringField to sort by. One of: category, productType, brand, exemptionStatus, submissionId, submissionTime. Default is submissionTime.
sortOrderStringSort direction ofASC or DESC. Default is DESC.
nextCursorStringOpaque cursor for pagination. Use the value returned in the previous response.
limitIntegerNumber of results per page. Range: 1–1000. Default is 25.

Sample request (first page, defaults to 25)

This API can return up to 25 records in a single call.

curl -X GET 'https://marketplace.walmartapis.com/v3/items/gtin-exemption/status' \ -H 'WM_SEC.ACCESS_TOKEN: REPLACE-WITH-ACTUAL-TOKEN' \ -H 'WM_QOS.CORRELATION_ID: 723907e4-b3fe-49f8-826c-15a47aba7410' \ -H 'WM_SVC.NAME: Walmart Service' \ -H 'WM_CONSUMER.CHANNEL.TYPE: REPLACE-WITH-CHANNEL-TYPE' \ -H 'Accept: application/json'
import requests
import uuid url = "https://marketplace.walmartapis.com/v3/items/gtin-exemption/status" headers = { "WM_SEC.ACCESS_TOKEN": "REPLACE-WITH-ACTUAL-TOKEN", "WM_QOS.CORRELATION_ID": "723907e4-b3fe-49f8-826c-15a47aba7410", # or str(uuid.uuid4()) "WM_SVC.NAME": "Walmart Service", "WM_CONSUMER.CHANNEL.TYPE": "REPLACE-WITH-CHANNEL-TYPE", "Accept": "application/json",
} resp = requests.get(url, headers=headers, timeout=30)
resp.raise_for_status() print(resp.json())

Sample response (page with up to 25 records)

The response shows that up to 25 records are returned and includes a nextCursor value ("H4sIAAAAAAAA_02Py26DMBBF_2VY....") if additional pages of data exist.

{ "totalRecords": 200, "nextCursor": "H4sIAAAAAAAA_02Py26DMBBF_2VY....", "gtinExemptions": [ { "category": "Health", "productType": "Foot Arch Supports", "brand": "FootLog", "exemptionStatus": "DENIED", "statusReason": "GTIN has already been issued for the Brand/Company name.", "submissionId": "1C0DD488", "submissionTime": 1752542753035 } // up to 25 records ]
}

Sample request (next page using nextCursor)

If you have over 25 records, you can get them by repeatedly requesting them. You do this by using the same endpoint along with the nextCursor value you get back from each response.

curl -X GET 'https://marketplace.walmartapis.com/v3/items/gtin-exemption/status?nextCursor=H4sIAAAAAAAA_02Py26DMBBF_2VY....' \ -H 'WM_SEC.ACCESS_TOKEN: REPLACE-WITH-ACTUAL-TOKEN' \ -H 'WM_QOS.CORRELATION_ID: 0f2a3a1a-9e7b-4f30-9b21-6d5d6d0e9a01' \ -H 'WM_SVC.NAME: Walmart Service' \ -H 'WM_CONSUMER.CHANNEL.TYPE: REPLACE-WITH-CHANNEL-TYPE' \ -H 'Accept: application/json'
import requests
import uuid base_url = "https://marketplace.walmartapis.com/v3/items/gtin-exemption/status" # Use the exact nextCursor value returned in the previous response.
# requests will URL-encode it when passed via `params`.
next_cursor = "H4sIAAAAAAAA_02Py26DMBBF_2VY...." headers = { "WM_SEC.ACCESS_TOKEN": "REPLACE-WITH-ACTUAL-TOKEN", "WM_QOS.CORRELATION_ID": "0f2a3a1a-9e7b-4f30-9b21-6d5d6d0e9a01", # or str(uuid.uuid4()) "WM_SVC.NAME": "Walmart Service", "WM_CONSUMER.CHANNEL.TYPE": "REPLACE-WITH-CHANNEL-TYPE", "Accept": "application/json",
} params = {"nextCursor": next_cursor} resp = requests.get(base_url, headers=headers, params=params, timeout=30)
resp.raise_for_status() print(resp.json())

Modify your code

To customize the request:

  1. Use your unique WM_QOS.CORRELATION_ID for each request.
  2. Use your unique WM_SEC.ACCESS_TOKEN obtained from the Token API.
  3. Send the required header WM_CONSUMER.CHANNEL.TYPE on every request.
  4. Change filter values to match your product type, category, brand, exemption status, submission ID, time range, and sorting.
  5. Add or remove optional parameters.
  6. To paginate through results, set the limit to control the number of records returned per page. For example, use limit=10 to get the first batch of records.
  7. Use the nextCursor value from the previous response to retrieve the next set of results.
  8. Check the response for nextCursor. The response returns the nextCursor string to indicate the next page to start after 10 records.
  9. Add the nextCursor value from the previous response to the same endpoint and call the endpoint again.

Sample response (final page, 24 total)

{ "totalRecords": 24, "nextCursor": null, "gtinExemptions": [ { "category": "Health", "productType": "Bunion Pads", "brand": "TestRX", "exemptionStatus": "DENIED", "statusReason": "The seller website is unable to be verified.", "submissionId": "21F47EE1", "submissionTime": 1748983318285 } // remaining items... ]
}

Errors and remediation

HTTP statusError conditionExample error payload (key fields)Remediation
400 Bad RequestInvalid submission time rangecode: INVALID_DATE_RANGE, field: submissionTimeFrom/submissionTimeUpto, description: submissionTimeFrom must be less than or equal to submissionTimeUptoProvide both values as epoch milliseconds and ensure submissionTimeFrom <= submissionTimeUpto. Remove these parameters if you are not filtering by time.
400 Bad RequestInvalid exemptionStatuscode: INVALID_ENUM, field: exemptionStatus, description: Allowed values are PROCESSING, NEEDS_INFO, APPROVED, DENIED, CLOSEDUse only the allowed values. Correct typos and casing.
400 Bad RequestUnsafe or invalid query parametercode: INVALID_PARAMETER, field: category | productType | brand | submissionId | sortBy | sortOrder | nextCursor, description: Invalid or unsupported valueProvide a valid value for the indicated parameter, trim spaces, URL-encode the value, use only the allowed enums for sortBy and sortOrder, and pass nextCursor exactly as returned by the previous response; if the error persists for nextCursor, call the endpoint without it to obtain a fresh cursor
404 Not FoundCursor references no resultscode: CURSOR_NOT_FOUND, field: nextCursor, description: Cursor is invalid or expiredStart a new list by calling the endpoint without nextCursor, then paginate using the new nextCursor.
429 Too Many RequestsRate limit exceededcode: RATE_LIMIT_EXCEEDED, description: Too many requestsBack off and retry using exponential backoff. Reduce request frequency and page size if possible.
500 Internal Server ErrorGeneral system errorcode: INTERNAL_ERROR, description: Unexpected errorRetry with exponential backoff. If it persists, capture WM_QOS.CORRELATION_ID and contact Partner Support.
200 OKNo exemptions foundtotalRecords: 0, nextCursor: null, gtinExemptions: []Verify filters. Broaden date range or remove filters and try again.

Result

If successful, the API returns an HTTP status: 200 OK and a JSON object containing the GTIN exemption data filtered by the specified query parameters. A nextCursor is provided for pagination.

Next steps

Refer to the API reference documentation for full technical details, including endpoints, parameters, and brief descriptions.