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
submissionTimeFromandsubmissionTimeUpto. - Paginate large result sets: Use
nextCursorto paginate through large volumes of exemption data. Do not passnextCursoron the first request; use the value returned in the response for subsequent queries. - Sorting: Use
sortByto sort the results by fields such as category, brand, exemption status, and submission time. UsesortOrderto 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, andsubmissionId. - The API uses cursor-based pagination. Do not include
nextCursorin the first request. If the response includes anextCursor, 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, andsortOrder=DESC.
| Parameter | Type | Description |
|---|---|---|
category | String | Category name. Example, Animals |
productType | String | Product type name. Example, Aquarium Water Pumps |
brand | String | Brand name. Example: ImagitariumUse -- 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. |
exemptionStatus | String | Exemption status. One of: APPROVED, DENIED, PROCESSING, NEEDS_INFO, CLOSED |
submissionId | String | Unique submission ID. Example, MIGBCC80 |
submissionTimeFrom | Long | Start of submission date range in epoch milliseconds. Must be less than or equal to submissionTimeUpto. |
submissionTimeUpto | Long | End of submission date range in epoch milliseconds |
sortBy | String | Field to sort by. One of: category, productType, brand, exemptionStatus, submissionId, submissionTime. Default is submissionTime. |
sortOrder | String | Sort direction ofASC or DESC. Default is DESC. |
nextCursor | String | Opaque cursor for pagination. Use the value returned in the previous response. |
limit | Integer | Number 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:
- Use your unique
WM_QOS.CORRELATION_IDfor each request. - Use your unique
WM_SEC.ACCESS_TOKENobtained from the Token API. - Send the required header
WM_CONSUMER.CHANNEL.TYPEon every request. - Change filter values to match your product type, category, brand, exemption status, submission ID, time range, and sorting.
- Add or remove optional parameters.
- To paginate through results, set the
limitto control the number of records returned per page. For example, uselimit=10to get the first batch of records. - Use the
nextCursorvalue from the previous response to retrieve the next set of results. - Check the response for
nextCursor. The response returns thenextCursorstring to indicate the next page to start after 10 records. - Add the
nextCursorvalue 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 status | Error condition | Example error payload (key fields) | Remediation |
|---|---|---|---|
| 400 Bad Request | Invalid submission time range | code: INVALID_DATE_RANGE, field: submissionTimeFrom/submissionTimeUpto, description: submissionTimeFrom must be less than or equal to submissionTimeUpto | Provide both values as epoch milliseconds and ensure submissionTimeFrom <= submissionTimeUpto. Remove these parameters if you are not filtering by time. |
| 400 Bad Request | Invalid exemptionStatus | code: INVALID_ENUM, field: exemptionStatus, description: Allowed values are PROCESSING, NEEDS_INFO, APPROVED, DENIED, CLOSED | Use only the allowed values. Correct typos and casing. |
| 400 Bad Request | Unsafe or invalid query parameter | code: INVALID_PARAMETER, field: category | productType | brand | submissionId | sortBy | sortOrder | nextCursor, description: Invalid or unsupported value | Provide 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 Found | Cursor references no results | code: CURSOR_NOT_FOUND, field: nextCursor, description: Cursor is invalid or expired | Start a new list by calling the endpoint without nextCursor, then paginate using the new nextCursor. |
| 429 Too Many Requests | Rate limit exceeded | code: RATE_LIMIT_EXCEEDED, description: Too many requests | Back off and retry using exponential backoff. Reduce request frequency and page size if possible. |
| 500 Internal Server Error | General system error | code: INTERNAL_ERROR, description: Unexpected error | Retry with exponential backoff. If it persists, capture WM_QOS.CORRELATION_ID and contact Partner Support. |
| 200 OK | No exemptions found | totalRecords: 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.
Updated 5 days ago
