Skip to main content

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