Content API Quickstart
By the end of this guide, you'll have made your first call to the Content API and received the full list of valid product categories from the catalog.
Prerequisites
- Authentication set up — see Getting Credentials and Authenticating Your Requests
Make your first call
ListCategories (POST /content/v1/categories/list) returns every valid category code in the catalog. It requires no prior setup and no request body, making it the right starting point. Every subsequent Content API call — ListCategoryAttributes, UpsertProduct — needs a category code from this list.
- Python
- Node.js
# get_authenticated_session() is provided in docs/snippets/auth.mdx — see Authenticating Your Requests
session = get_authenticated_session()
response = session.post(
"https://noon-api-gateway.noon.partners/content/v1/categories/list",
json={},
headers={"User-Agent": "MyCatalogApp/1.0.0"},
timeout=30,
)
response.raise_for_status()
categories = response.json()["categories"]
// getAuthenticatedClient() is provided in docs/snippets/auth.mdx — see Authenticating Your Requests
const client = await getAuthenticatedClient();
const response = await client.post(
"https://noon-api-gateway.noon.partners/content/v1/categories/list",
{},
{
headers: {
"Content-Type": "application/json",
"User-Agent": "MyCatalogApp/1.0.0",
},
}
);
const categories = response.data.categories;
Response:
{
"categories": [
"apparel-shoes-sneakers",
"electronics-mobiles-smartphones",
"home-furniture-sofas"
]
}
What you got back
categories is a flat list of strings — each one is a complete family-product_type-product_subtype path. There are no nested levels to expand; every entry is already the full code you'll pass to other endpoints.
Find the code that matches your products and store it. You'll pass it to ListCategoryAttributes to get the attribute contract for that category, and again to UpsertProduct when you submit listings. A code not in this list will be rejected by both endpoints.
Checking for errors
ListCategories returns no item-level errors — it either succeeds with the full list or fails at the HTTP level. If you receive a non-2xx response, check the rpcStatus body: status_code and message describe the failure (authentication error, missing X-Project header, or a gateway-level problem).
Where to go next
- Discover Category Attributes — fetch the attribute contract for your category before submitting products
- ListCategories Reference — full request and response schema for this call
- Content API Overview — capabilities, key concepts, and the full operation list