{
    "version": "https://jsonfeed.org/version/1",
    "title": "noon API Platform Changelog",
    "home_page_url": "https://noon-docs.noonpartners.dev/changelog",
    "description": "API changes and platform updates for partners integrating with noon's APIs.",
    "items": [
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/developer-portal-documentation",
            "content_html": "<p>The Developer Portal now has a full documentation section — every feature walked through against the actual screens, with screenshots — and a <strong>Developer Portal</strong> entry in the site navigation to get you there.</p>\n<!-- -->\n<ul>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/overview\">Overview</a> — what the portal offers and how to get access</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/support-cases\">Support Cases</a> — raising a case, tracking it, replying in thread</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/rate-limit\">Rate Limit</a> — your rate limit analytics and per-endpoint configuration</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/debugging-session\">Debugging Session</a> — capturing live requests and responses, including headers and bodies, for one service and one API user over a bounded window</li>\n<li>Event Notifications — <a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/event-notifications/overview\">Overview</a>, <a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/event-notifications/destinations\">Destinations</a>, <a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/event-notifications/analytics\">Analytics</a>, and <a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/event-notifications/logs\">Logs</a></li>\n</ul>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"debugging-sessions-are-worth-a-look\">Debugging sessions are worth a look<a href=\"https://noon-docs.noonpartners.dev/changelog/developer-portal-documentation#debugging-sessions-are-worth-a-look\" class=\"hash-link\" aria-label=\"Direct link to Debugging sessions are worth a look\" title=\"Direct link to Debugging sessions are worth a look\">​</a></h2>\n<p>If you've never used one: a debugging session captures full request and response payloads — headers and bodies, per call — scoped to a single service and API user for a bounded window. It's the fastest way to see exactly what we received from you and exactly what we sent back. <a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/debugging-session\">The page walks through setting one up</a>.</p>\n<p>The portal itself is at <a href=\"https://developer.noon.partners/\" target=\"_blank\" rel=\"noopener noreferrer\">developer.noon.partners</a>.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/developer-portal-documentation",
            "title": "A complete guide to the Developer Portal",
            "summary": "The Developer Portal now has a full documentation section — every feature walked through against the actual screens, with screenshots — and a Developer Portal entry in the site navigation to get you there.",
            "date_modified": "2026-08-19T00:00:00.000Z",
            "tags": [
                "platform-update",
                "documentation",
                "major"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/portal-walkthrough-and-dark-mode",
            "content_html": "<p>Signing in to the <a href=\"https://developer.noon.partners/\" target=\"_blank\" rel=\"noopener noreferrer\">Developer Portal</a> for the first time now starts with a short guided tour of the main areas, and the whole portal has a dark theme that follows your system setting.</p>\n<!-- -->\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"guided-walkthrough\">Guided walkthrough<a href=\"https://noon-docs.noonpartners.dev/changelog/portal-walkthrough-and-dark-mode#guided-walkthrough\" class=\"hash-link\" aria-label=\"Direct link to Guided walkthrough\" title=\"Direct link to Guided walkthrough\">​</a></h2>\n<p>First-time users are walked through where each part of the portal lives — rate limit analytics, event notification destinations, debugging sessions, support cases. It's skippable, and you can re-trigger it later from settings, which makes it a quick way to bring a new colleague up to speed.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"dark-mode\">Dark mode<a href=\"https://noon-docs.noonpartners.dev/changelog/portal-walkthrough-and-dark-mode#dark-mode\" class=\"hash-link\" aria-label=\"Direct link to Dark mode\" title=\"Direct link to Dark mode\">​</a></h2>\n<p>The portal follows your operating system's light or dark preference automatically. There's a manual toggle if you'd rather pin one, and that choice persists.</p>\n<p>Both are interface changes only — no API behaviour changed, and nothing you've built against the portal needs updating.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/portal-walkthrough-and-dark-mode",
            "title": "Guided walkthrough and dark mode in the Developer Portal",
            "summary": "Signing in to the Developer Portal for the first time now starts with a short guided tour of the main areas, and the whole portal has a dark theme that follows your system setting.",
            "date_modified": "2026-08-10T00:00:00.000Z",
            "tags": [
                "platform-update"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/seller-support-portal",
            "content_html": "<p>The Seller Support Portal is live: raise a case with the API Platform team from inside the Developer Portal, track its status, and keep the whole exchange in one thread.</p>\n<!-- -->\n<p>Cases live under <strong>Support</strong> in the <a href=\"https://developer.noon.partners/\" target=\"_blank\" rel=\"noopener noreferrer\">Developer Portal</a>. From there you can open a new case, see everything you've raised, and open any one of them to read and continue the conversation. There's a full walkthrough in <a href=\"https://noon-docs.noonpartners.dev/docs/developer-portal/support-cases\">Support Cases</a>.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"case-lifecycle\">Case lifecycle<a href=\"https://noon-docs.noonpartners.dev/changelog/seller-support-portal#case-lifecycle\" class=\"hash-link\" aria-label=\"Direct link to Case lifecycle\" title=\"Direct link to Case lifecycle\">​</a></h2>\n<p>A case moves through four states:</p>\n<table><thead><tr><th>Status</th><th>Meaning</th></tr></thead><tbody><tr><td>Open</td><td>Raised, not yet picked up</td></tr><tr><td>Under Review</td><td>The platform team is working on it</td></tr><tr><td>Awaiting Partner Response</td><td>We've asked you something and are waiting</td></tr><tr><td>Closed</td><td>Resolved</td></tr></tbody></table>\n<p>A case with no activity for 15 days closes automatically. If that happens and the problem hasn't gone away, open a new one and reference the old case.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"what-to-include\">What to include<a href=\"https://noon-docs.noonpartners.dev/changelog/seller-support-portal#what-to-include\" class=\"hash-link\" aria-label=\"Direct link to What to include\" title=\"Direct link to What to include\">​</a></h2>\n<p>The more of this you provide up front, the fewer round trips:</p>\n<ul>\n<li>The endpoint and HTTP method you called</li>\n<li>A request ID or timestamp, so we can find it in the logs</li>\n<li>What you expected versus what came back</li>\n<li>Whether it reproduces or happened once</li>\n</ul>\n<p>If failures are broad rather than specific to one call, the <a href=\"https://noon-docs.noonpartners.dev/api-health-status\">API health status page</a> may already show the cause.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/seller-support-portal",
            "title": "Support cases in the Developer Portal",
            "summary": "The Seller Support Portal is live: raise a case with the API Platform team from inside the Developer Portal, track its status, and keep the whole exchange in one thread.",
            "date_modified": "2026-07-27T00:00:00.000Z",
            "tags": [
                "platform-update",
                "support",
                "major"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/copy-docs-as-markdown",
            "content_html": "<p>Every documentation page — generated API reference included — can now be copied or downloaded as clean Markdown, ready to paste into an editor, a coding assistant, or your own internal docs.</p>\n<!-- -->\n<p>Each page carries actions to copy its Markdown source or download it as a <code>.md</code> file. Endpoint pages also have a copy button on the method and path, so grabbing just the route doesn't mean selecting text by hand.</p>\n<p>Markdown round-trips cleanly where a screenshot or a copy-paste from rendered HTML doesn't: tables stay tables, code blocks stay code blocks, and enum values survive intact.</p>\n<p>The site also publishes an <code>llms.txt</code> index, so tooling that understands that convention can discover the full documentation set on its own.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/copy-docs-as-markdown",
            "title": "Markdown export for every docs page",
            "summary": "Every documentation page — generated API reference included — can now be copied or downloaded as clean Markdown, ready to paste into an editor, a coding assistant, or your own internal docs.",
            "date_modified": "2026-07-16T00:00:00.000Z",
            "tags": [
                "platform-update",
                "documentation"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/api-health-status-page",
            "content_html": "<p>The <a href=\"https://noon-docs.noonpartners.dev/api-health-status\">API health status page</a> is now public: current error rates for every endpoint we expose, grouped by service and broken out per marketplace.</p>\n<!-- -->\n<p>Each service group rolls up to a single state:</p>\n<table><thead><tr><th>State</th><th>Meaning</th></tr></thead><tbody><tr><td>Operational</td><td>No errors observed</td></tr><tr><td>Degraded</td><td>Some errors observed</td></tr><tr><td>Outage</td><td>Error rate above 10%</td></tr></tbody></table>\n<p>A group shows as <strong>Outage</strong> if any endpoint under it is in outage, and <strong>Degraded</strong> if any endpoint is degraded.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"how-its-calculated\">How it's calculated<a href=\"https://noon-docs.noonpartners.dev/changelog/api-health-status-page#how-its-calculated\" class=\"hash-link\" aria-label=\"Direct link to How it's calculated\" title=\"Direct link to How it's calculated\">​</a></h2>\n<p>The page reads observed error rates directly — it isn't updated by hand, so it stays accurate during an incident without anyone remembering to flip a switch.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"what-it-shows-and-what-it-doesnt\">What it shows, and what it doesn't<a href=\"https://noon-docs.noonpartners.dev/changelog/api-health-status-page#what-it-shows-and-what-it-doesnt\" class=\"hash-link\" aria-label=\"Direct link to What it shows, and what it doesn't\" title=\"Direct link to What it shows, and what it doesn't\">​</a></h2>\n<p>It reflects <strong>current</strong> state only; there's no historical availability chart today. Establishing what happened during a window that has already passed still needs a conversation with us.</p>\n<p>The page is public and needs no login, so it's safe to link from your own runbooks and dashboards.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/api-health-status-page",
            "title": "Live API health, per service and endpoint",
            "summary": "The API health status page is now public: current error rates for every endpoint we expose, grouped by service and broken out per marketplace.",
            "date_modified": "2026-07-06T00:00:00.000Z",
            "tags": [
                "platform-update"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/list-return-references",
            "content_html": "<p>A new Returns API lets you list return items and their barcode references for a given barcode across the merchants you operate, so your warehouse can identify an inbound return from the label alone.</p>\n<!-- -->\n<table><thead><tr><th>Endpoint</th><th>Summary</th></tr></thead><tbody><tr><td><code>POST /v1/return-references/list</code></td><td><code>ListReturnReferences</code> — lists return items and their barcode references matching a barcode for the given merchants.</td></tr></tbody></table>\n<p>This is the first endpoint on the Returns service — a single RPC, scoped to the merchants your credentials cover.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"why-youd-use-it\">Why you'd use it<a href=\"https://noon-docs.noonpartners.dev/changelog/list-return-references#why-youd-use-it\" class=\"hash-link\" aria-label=\"Direct link to Why you'd use it\" title=\"Direct link to Why you'd use it\">​</a></h2>\n<p>A returned parcel arrives at your facility carrying a barcode. Scan it, call <code>ListReturnReferences</code>, and you get the return items associated with it across all your partner merchants in one response — enough to route the parcel without a manual reconciliation step.</p>\n<p>The endpoint and its full schema are in the Returns section of the API reference.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/list-return-references",
            "title": "Return lookup by barcode",
            "summary": "A new Returns API lets you list return items and their barcode references for a given barcode across the merchants you operate, so your warehouse can identify an inbound return from the label alone.",
            "date_modified": "2026-06-29T10:00:00.000Z",
            "tags": [
                "api-change",
                "returns"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/querying-event-notification-logs",
            "content_html": "<p>There's now a guide for querying your event notification delivery logs, so you can confirm what we dispatched, when, and how your endpoint responded.</p>\n<!-- -->\n<p>The <a href=\"https://noon-docs.noonpartners.dev/docs/event-notifications/querying-logs\">Querying logs</a> guide covers the query editor in the Developer Portal: how to filter delivery attempts, what each field in a log record means, and how to read the results when a delivery failed.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"what-this-is-good-for\">What this is good for<a href=\"https://noon-docs.noonpartners.dev/changelog/querying-event-notification-logs#what-this-is-good-for\" class=\"hash-link\" aria-label=\"Direct link to What this is good for\" title=\"Direct link to What this is good for\">​</a></h2>\n<ul>\n<li>Confirming whether an event was dispatched at all, versus dispatched and rejected by your endpoint</li>\n<li>Seeing the exact payload we sent, when your handler logged something unexpected</li>\n<li>Pinning a gap down to a specific time window</li>\n</ul>\n<p>The guide is linked under Event Notifications in the docs sidebar, next to the event type references.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/querying-event-notification-logs",
            "title": "A guide to querying event notification logs",
            "summary": "There's now a guide for querying your event notification delivery logs, so you can confirm what we dispatched, when, and how your endpoint responded.",
            "date_modified": "2026-06-29T09:00:00.000Z",
            "tags": [
                "platform-update",
                "event-notifications",
                "documentation"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/global-product-and-content-apis",
            "content_html": "<p>You can now browse the noon category tree, discover exactly which attributes a category expects, submit products against it, and read back their content — four endpoints, with a guide set that takes you from first call to go-live.</p>\n<!-- -->\n<table><thead><tr><th>Endpoint</th><th>Summary</th></tr></thead><tbody><tr><td><code>POST /v1/categories/list</code></td><td><code>ListCategories</code> — lists all available product categories in the catalog.</td></tr><tr><td><code>POST /v1/categories/attributes/list</code></td><td><code>ListCategoryAttributes</code> — retrieves the attributes for a specified product category.</td></tr><tr><td><code>POST /v1/product/upsert</code></td><td><code>UpsertProduct</code> — creates or updates a product in the catalog.</td></tr><tr><td><code>POST /v1/product/content/get</code></td><td><code>GetContent</code> — retrieves content information for specified products.</td></tr></tbody></table>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"guides\">Guides<a href=\"https://noon-docs.noonpartners.dev/changelog/global-product-and-content-apis#guides\" class=\"hash-link\" aria-label=\"Direct link to Guides\" title=\"Direct link to Guides\">​</a></h2>\n<p>Five documents walk through a first integration end to end:</p>\n<ul>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/content/content-api\">Content API overview</a> — how the service fits into the catalog lifecycle</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/content/quickstart\">Quickstart</a> — your first successful call</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/content/guides/discover-category-attributes\">Discover category attributes</a> — find out what a category requires before you submit</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/content/guides/submit-product\">Submit a product</a> — build and send a valid product payload</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/content/guides/track-and-fix\">Track and fix</a> — read back content status and correct rejections</li>\n<li><a href=\"https://noon-docs.noonpartners.dev/docs/content/guides/go-live\">Go live</a> — the checklist before you move to production</li>\n</ul>\n<p>The published reference is the source of truth for these endpoints: field and enum names match the service exactly, and rate limits render from the live specification.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/global-product-and-content-apis",
            "title": "Content APIs for categories, attributes, and products",
            "summary": "You can now browse the noon category tree, discover exactly which attributes a category expects, submit products against it, and read back their content — four endpoints, with a guide set that takes you from first call to go-live.",
            "date_modified": "2026-06-19T10:00:00.000Z",
            "tags": [
                "api-change",
                "content",
                "catalog",
                "major"
            ]
        },
        {
            "id": "https://noon-docs.noonpartners.dev/changelog/catalog-sku-delete-and-barcode-import",
            "content_html": "<p>The Catalog API now covers two operations you previously had to work around: deleting parent and child SKUs in batches, and loading barcodes in bulk from a file, a BigQuery table, or an inline list.</p>\n<!-- -->\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"sku-deletion\">SKU deletion<a href=\"https://noon-docs.noonpartners.dev/changelog/catalog-sku-delete-and-barcode-import#sku-deletion\" class=\"hash-link\" aria-label=\"Direct link to SKU deletion\" title=\"Direct link to SKU deletion\">​</a></h2>\n<table><thead><tr><th>Endpoint</th><th>Summary</th></tr></thead><tbody><tr><td><code>POST /v1/sku/parent/delete</code></td><td><code>ParentSkuDelete</code> — deletes parent partner SKUs / ZSKU parents. <strong>This cascades:</strong> every associated child SKU is deleted with it.</td></tr><tr><td><code>POST /v1/sku/child/delete</code></td><td><code>ChildSkuDelete</code> — deletes individual partner SKUs / child ZSKUs.</td></tr></tbody></table>\n<p>Both accept batches. Because parent deletion cascades, check what sits underneath a parent before you call it.</p>\n<h2 class=\"anchor anchorWithStickyNavbar_fF9Z\" id=\"bulk-barcode-import\">Bulk barcode import<a href=\"https://noon-docs.noonpartners.dev/changelog/catalog-sku-delete-and-barcode-import#bulk-barcode-import\" class=\"hash-link\" aria-label=\"Direct link to Bulk barcode import\" title=\"Direct link to Bulk barcode import\">​</a></h2>\n<table><thead><tr><th>Endpoint</th><th>Summary</th></tr></thead><tbody><tr><td><code>POST /v1/import/generate-import-signed-url</code></td><td><code>GenerateImportSignedUrl</code> — returns a signed URL for uploading a file straight to GCS. Accepts <code>csv</code>, <code>tsv</code>, <code>json</code>, <code>xlsx</code>, <code>xlsm</code>, and <code>parquet</code>.</td></tr><tr><td><code>POST /v1/import/barcode</code></td><td><code>CreateBarcodeImport</code> — starts an import from exactly one source: <code>file_url</code>, <code>bq_table</code>, or inline <code>items</code>.</td></tr><tr><td><code>GET /v1/import/status/{reference}</code></td><td><code>GetImportStatus</code> — returns current status and a processing report: success and failure counts, progress, and completion timestamps.</td></tr></tbody></table>\n<p>The usual flow is to call <code>GenerateImportSignedUrl</code>, upload your file to the URL it returns, pass that <code>file_url</code> to <code>CreateBarcodeImport</code>, then poll <code>GetImportStatus</code> with the returned reference until it completes. If your data already lives in BigQuery you can skip the upload and pass <code>bq_table</code> instead.</p>\n<p>Full request and response shapes are in the Catalog section of the API reference.</p>",
            "url": "https://noon-docs.noonpartners.dev/changelog/catalog-sku-delete-and-barcode-import",
            "title": "Batch SKU deletion and bulk barcode import",
            "summary": "The Catalog API now covers two operations you previously had to work around: deleting parent and child SKUs in batches, and loading barcodes in bulk from a file, a BigQuery table, or an inline list.",
            "date_modified": "2026-06-19T09:00:00.000Z",
            "tags": [
                "api-change",
                "catalog"
            ]
        }
    ]
}