Can this product be gifted?
When the campaign is live and correct but the gift never lands in the cart, the product is usually the reason.
Ask: "Why isn't the free gift being added? The product is
merino-wool-beanie."
Step 1 — Look up the handle, not the title
Call check_gift_product with handles. A handle is the part of the product's URL after
/products/ — lowercase, hyphenated. The product's display title will not resolve.
Several at once are fine, separated by commas, up to 50.
Step 2 — Read the verdict, not the inventory
Each product comes back with canBeGifted and an issues list; each variant with stockStatus and
giftable. Those are the answer.
Do not work it out from inventoryQuantity and inventoryPolicy yourself. A variant with
stockStatus: "not_tracked" has inventory tracking switched off and is always available — and
because nothing is tracked, its quantity and policy come back empty. Read those two empty fields as
"out of stock" and you will chase a problem that does not exist.
Step 3 — Match the issue to the fix
| What you see | Cause | Fix |
|---|---|---|
status: "DRAFT" or "ARCHIVED" | The product is not live | Set it to Active in Shopify |
publishedOnOnlineStore: false | Not published to the Online Store channel | Publish it there |
stockStatus: "out_of_stock" | No inventory, and overselling is denied | Restock, or allow overselling |
Handle in notFound | No such product on this store | Check the handle for a typo |
giftableVariantCount: 0 | Every variant is blocked for one of the above | Fix the variants, not the product |
Step 4 — A partly giftable product still half-fails
canBeGifted: true with giftableVariantCount lower than variantCount means some variants work
and some do not. Shoppers who land on a blocked variant see the gift fail while everyone else sees it
work — which is exactly the shape of an intermittent report that is hard to reproduce.
What you finish holding
A verdict per product and per variant, with the specific reason any of them cannot be given, and a fix that is carried out in Shopify rather than in the app.