Product Life Cycle
PromoStandards defines only two product states: sellable and closeout. This is insufficient for real-world product management — there’s no way to represent products that are incomplete (missing images or pricing) or permanently discontinued.
PSRESTful extends this with a full 4-status life cycle: draft, active, closeout, and discontinued.
Status Definitions
| Status | Description | PromoStandards Equivalent |
|---|---|---|
draft | Product is incomplete — missing images (primary_image_url is empty) or has no pricing (list_price is 0 or null). Not ready to sell. | (none) |
active | Product is complete and available for sale. | Sellable |
closeout | Product is being phased out, often at discounted prices. | Closeout |
discontinued | Product is permanently removed from the catalog. No longer available for sale. | (none) |
Why We Added draft
When products are first ingested from suppliers, they may be incomplete. A product is automatically classified as draft when:
list_priceis0ornull- It has no primary image (
primary_image_urlis empty)
Draft products are not ready for customer-facing catalogs. This prevents showing products with $0 prices or missing images to end customers.
Why We Added discontinued
closeout in PromoStandards implies temporary clearance — products being sold off at discounted prices. But there’s no way to mark a product as permanently gone.
When a supplier stops making a product, distributors need to know so they can:
- Remove it from their storefronts
- Stop syncing inventory and pricing for it
- Avoid showing stale products to customers
discontinued fills this gap — it’s a terminal state meaning “this product will not come back.”
How Status is Computed
Product status is determined by the following logic:
- If
is_closeoutistrue→ closeout - If missing
primary_image_urlorlist_priceisnull/0→ draft - Otherwise → active
discontinued is typically set explicitly via admin action. However, it is also auto-computed in trivial cases: when a product’s status is closeout and inventory is 0 across every part, the product is automatically marked as discontinued.
Life Cycle Diagram
┌───────┐ ┌────────┐ ┌───────────┐ ┌──────────────┐
│ draft │──────▶│ active │──────▶│ closeout │──────▶│ discontinued │
└───────┘ └────────┘ └───────────┘ └──────────────┘
│ ▲
│ │
└────────────────────────────────────────┘- draft → active: Product becomes complete (has pricing and images)
- active → closeout: Product is being phased out at discounted prices
- active → discontinued: Product is permanently removed from the catalog
- closeout → discontinued: Auto-computed when inventory reaches
0across all parts
Where Status Appears
Extra APIs (v1 & v2)
The status field is included in all product responses from both /extra/v1/products and /extra/v2/products.
You can filter products by status using the query parameter:
GET /extra/v2/products?status=active- v1 uses
snake_casefield names - v2 uses
camelCasefield names
Product Search in PromoSync
The search form includes a “By Status” dropdown filter (replacing the old “Is Closeout” boolean filter).
Filter options: Any, Active, Draft, Closeout, Discontinued
The default filter is Active.

Search results display color-coded status badges:
| Status | Badge Color |
|---|---|
| Active | Green |
| Draft | Grey |
| Closeout | Yellow |
| Discontinued | Red |

Product Detail in PromoSync
The product detail page displays the status badge next to the Product ID.

Inventory & Pricing Sync in PromoSync
Products with status == discontinued (stored as the psrestful.status Shopify metafield) are automatically skipped during inventory and pricing sync updates.
This prevents wasting API calls and avoids updating data for products that will never be sold again.
Backward Compatibility
The legacy is_closeout boolean field is maintained via dual-write sync:
| Status set to | is_closeout value |
|---|---|
draft | false |
active | false |
closeout | true |
discontinued | true |
Existing integrations using is_closeout continue to work without modification.
Related Documentation
- Extra APIs — Full reference for the Extra APIs where the
statusfield is available - How to Get Closeout Products — Guide for retrieving closeout products
- How to Get All Sellable Products — Guide for retrieving sellable products