--- sidebar_position: 2 --- # Content API Quickstart import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; 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][getting-credentials] and [Authenticating Your Requests][authenticating-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 # 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"] ``` ```javascript // 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:** ```json { "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][content-discover-attributes] — fetch the attribute contract for your category before submitting products - [ListCategories Reference][content-list-categories-api] — full request and response schema for this call - [Content API Overview][content-overview] — capabilities, key concepts, and the full operation list