Skip to main content
View as Markdown

Track and Fix Product Status

This guide shows you how to use GetContent to find out why a product isn't live yet and what to fix. By the end, you'll have a repeatable process for moving a product from incomplete to OVERALL_STATUS_ACTIVE.

Prerequisites

Step 1 — Check product status

GetContent (POST /content/v1/product/content/get) returns the current state of a product: stored attribute values, image review results, and per-language completeness and QC status.

# 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/product/content/get",
json={"sku_parent": "Z1ABC234"},
headers={"User-Agent": "MyCatalogApp/1.0.0"},
timeout=30,
)
response.raise_for_status()
result = response.json()

Response:

{
"sku_parent": "Z1ABC234",
"attributes": { "product_title": { "values": [{"value": "Acme Runner Sneaker", "language": "LANGUAGE_EN"}] } },
"images": [
{
"url": "https://cdn.example.com/acme-runner-main.jpg",
"sort": 1,
"visibility": "VISIBILITY_STATUS_VISIBLE",
"review_status": "REVIEW_STATUS_PENDING",
"issues": []
}
],
"statuses": [
{
"language": "LANGUAGE_EN",
"content": {
"completeness": "60%",
"missing_attributes": ["long_description", "colour"],
"invalid_attributes": ["shoe_material"]
},
"qc": {
"status": "QC_STATUS_NOT_ELIGIBLE",
"rejection_reasons": [],
"comment": ""
},
"overall_status": "OVERALL_STATUS_INACTIVE",
"errors": []
}
]
}

You'll know the product is live when every entry in statuses has overall_status: "OVERALL_STATUS_ACTIVE".

Step 2 — Diagnose what's blocking

Check statuses for each language separately — a product can be active in one language and incomplete in another. For each language status, work through the following in order:

1. Content completeness

If content.completeness is below "100%":

  • content.missing_attributes — required attributes with no submitted value. Add them in your next UpsertProduct call.
  • content.invalid_attributes — required attributes whose submitted value failed validation (wrong type, out of range, not in attribute_options). Re-check the constraints from ListCategoryAttributes and correct the values.

QC cannot start until completeness reaches 100%. While it's below that, qc.status will always be QC_STATUS_NOT_ELIGIBLE.

2. Image status

Check each entry in images:

review_statusvisibilityMeaningWhat to do
REVIEW_STATUS_PENDINGanyImage is still under reviewWait and poll again
REVIEW_STATUS_VALIDVISIBILITY_STATUS_VISIBLEImage qualifies — counts toward go-liveNothing
REVIEW_STATUS_VALIDVISIBILITY_STATUS_HIDDENImage passed review but is hiddenContact noon to make the image visible
REVIEW_STATUS_INVALIDanyImage failed reviewCheck issues for the reason, replace the image in UpsertProduct

A product needs at least one image with REVIEW_STATUS_VALID and VISIBILITY_STATUS_VISIBLE to go live.

3. QC status

qc.status values:

ValueMeaningWhat to do
QC_STATUS_NOT_ELIGIBLECompleteness is below 100%Fix content first
QC_STATUS_PENDINGnoon is reviewing the productWait and poll again
QC_STATUS_APPROVEDQC passedNothing — product goes live once images also pass
QC_STATUS_REJECTEDQC failedRead qc.rejection_reasons and qc.comment, fix the issues, then resubmit

4. Errors array

statuses[].errors contains structured error codes that describe blocking conditions:

errors[].codeMeaningFix
MISSING_BRANDNo brand submittedInclude brand in your next UpsertProduct call
INVALID_BRANDBrand value not accepted by noonUse a brand name recognised in the noon catalog
MISSING_CATEGORYCategory path incomplete or absentEnsure category is a full three-segment code from ListCategories
INVALID_CATEGORYCategory code present but not validRecheck the code against ListCategories output
MISSING_ATTRIBUTESOne or more mandatory attributes absentSee content.missing_attributes for the list
QC_REJECTEDProduct rejected in QCSee qc.rejection_reasons and qc.comment
NO_IMAGES_PROVIDEDNo images were submittedAdd at least one image in UpsertProduct
NO_VALID_IMAGESAll submitted images failed reviewReplace images; check images[].issues for reasons
NO_VISIBLE_IMAGESNo valid image is set to visibleContact noon to set a valid image to visible

Step 3 — Fix and resubmit

Once you've identified the issues, fix them in your system and call UpsertProduct again using the same partner_sku values — noon will update the existing product rather than create a new one. You don't need the sku_parent to update; noon resolves it from partner_sku.

After resubmitting, go back to Step 1. Repeat until every language entry in statuses shows overall_status: "OVERALL_STATUS_ACTIVE".

info

QC review takes time — QC_STATUS_PENDING is expected after content is complete. There is no way to accelerate the review. Poll GetContent periodically rather than continuously.

Next steps

Ask AI about this page
Get an explanation, examples, or a summary of this doc.