Read Current Prices
This guide shows you how to use BatchGetPricing to fetch the current price, MSRP, and active status for a set of SKUs — for example, to reconcile noon's live prices against your own system. By the end, you'll have a repeatable read that flags every SKU where noon's stored pricing differs from what you expect.
Prerequisites
- Authentication set up — see Getting Credentials and Authenticating Your Requests
- At least one SKU with pricing already configured on noon — see Set Prices
Step 1 — Request pricing for your SKUs
BatchGetPricing (POST /pricing/v1/pricing/get) returns the current price, MSRP, and active status for each partner_sku + country_code pair you send. Batch all the SKUs you want to reconcile into a single request. Each pair is resolved independently, so the same partner_sku can appear once per country.
Valid values for country_code: "ae", "sa", "eg".
- 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/pricing/v1/pricing/get",
json={
"items": [
{"partner_sku": "MY-SKU-001", "country_code": "ae"},
{"partner_sku": "MY-SKU-002", "country_code": "ae"},
{"partner_sku": "MY-SKU-001", "country_code": "sa"},
]
},
headers={
"Content-Type": "application/json",
"User-Agent": "MyPricingSync/1.0.0",
},
timeout=30,
)
response.raise_for_status()
result = response.json()
// 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/pricing/v1/pricing/get",
{
items: [
{ partner_sku: "MY-SKU-001", country_code: "ae" },
{ partner_sku: "MY-SKU-002", country_code: "ae" },
{ partner_sku: "MY-SKU-001", country_code: "sa" },
],
},
{
headers: {
"Content-Type": "application/json",
"User-Agent": "MyPricingSync/1.0.0",
},
}
);
const result = response.data;
Response:
<!-- from: v1BatchGetPricingResponse / v1BatchGetPricingResponseItem -->
{
"items": [
{
"partner_sku": "MY-SKU-001",
"country_code": "ae",
"status": { "status_id": 0, "status_code": "OK", "message": "" },
"price": 149.99,
"msrp": 199.99,
"is_active": true
},
{
"partner_sku": "MY-SKU-002",
"country_code": "ae",
"status": { "status_id": 0, "status_code": "OK", "message": "" },
"price": 89.00,
"msrp": null,
"is_active": true
},
{
"partner_sku": "MY-SKU-001",
"country_code": "sa",
"status": {
"status_id": 5,
"status_code": "NOT_FOUND",
"message": "Pricing not configured for this SKU and country"
},
"price": null,
"msrp": null,
"is_active": null
}
]
}
You'll know this worked when the response contains one entry in items for every pair you sent, each carrying a status.
Key fields on each entry:
price— the current selling price on noon.nullif no pricing record exists.msrp— the crossed-out reference price shown on the listing.nullif not set.is_active— whether the SKU is currently sellable in that country.nullif no pricing record exists.status— the per-item result. See Step 2.
| Condition | What it means | What to do |
|---|---|---|
| Non-2xx response | The whole request failed — authentication, authorization, or a malformed payload | Check rpcStatus.message on the error body and retry once corrected |
Empty or missing items in your request | items is required | Send at least one { partner_sku, country_code } pair |
Step 2 — Check each item's status
The HTTP status covers only the request as a whole. Each entry in items carries its own status, and a single 200 response can return a mix of successful and failed items. Always inspect every entry's status before trusting its price, msrp, or is_active.
The status object (rpcStatus) has these fields:
status_id— numeric code;0is success.status_code— string code;OKis success.message— human-readable detail, populated on failure.
A status_code of OK (with status_id: 0) means that item succeeded and its price, msrp, and is_active are authoritative. Any other status_code means that item failed — its price, msrp, and is_active will be null and must not be used. In the example above, MY-SKU-001 in SA returned NOT_FOUND because noon has no pricing record for that SKU and country, while the other two items succeeded.
When reconciling in bulk, branch on status_code: treat OK items as comparable data, and route every non-OK item to a separate exception list keyed off partner_sku and country_code.
Step 3 — Reconcile against your system
Compare each successful item against your own records:
- Price or MSRP mismatch — noon's
price/msrpdiffers from your source of truth. - Active-status mismatch —
is_activeistruebut you intend the SKU to be off-sale, or vice versa. - Missing record — a non-
OKstatus (such asNOT_FOUND) means noon has no pricing for that SKU and country at all.
For any discrepancy, the fix is a write back to noon. BatchGetPricing is read-only; to correct price, MSRP, or active status — or to create a missing record — use BatchUpsertPricing. See Set Prices.
After writing corrections, re-run this guide from Step 1 to confirm noon now matches your system.
Next steps
- Set Prices — create or update price, MSRP, and active status to fix any discrepancy you found
- Activate a Product — make a SKU sellable once its pricing is correct
- Go Live with Pricing — the full pricing lifecycle from first upload to live
- BatchGetPricing Reference — full request and response schema for this call