Docs
Firmly Agentic Commerce
Set theme to dark (⇧+D)

In-Feed Shoppable Ad

A viewer scrolling a feed (social, video content, news aggregator) sees a shoppable ad creative for a specific product. The ad creative includes price, image, and a Buy CTA. On click, an in-ad checkout opens — address, payment, place order — all inside the ad surface. The viewer never leaves the feed.

This is the highest-conversion Ad Commerce pattern because every redirect to a separate landing or store is a drop-off opportunity. The constraint is that the ad surface must support in-feed interactive units.

Choice Default Why
Integration pattern In-Ad Checkout Keeps the viewer in-feed
Auth Browser session Ad surfaces run client-side per viewer
Payment Google Pay (mobile feeds), card via JWE (web feeds) Wallet auth reduces friction the most in-feed
Attribution Click-ID (fbclid, gclid, ttclid) + UTM Ad platform credits conversions; advertiser’s analytics report on campaign performance

​​ API sequence

The flow follows the Single Product Purchase shape. The ad creative encodes the SKU directly, so an explicit discovery/search is usually skipped.

Step Endpoint
1. Bootstrap session POST /api/v1/browser-session
2. Add to cart POST /cart/line-items
3. Set shipping address POST /cart/shipping-info
4. Pick shipping method POST /cart/shipment/methods
5. (Optional) Get delivery availability POST /cart/shipments/get-availability
6. (If required) Get + set merchant consents GET /cart/consents → PUT /cart/consents
7. Get payment public key GET /payment/key
8. Complete order POST /payment/complete-order
9. Fire ad-platform postback Per-platform conversion API (Meta CAPI, Google Ads, TikTok Events)

The valid shipping_method_ids for step 4 come from the cart itself — cart.shipments[].shipping_method_options, populated by step 3 (set-shipping-info). get-availability (step 5) is optional and returns delivery dates, time slots, or pickup locations for scheduled-delivery or in-store-pickup shipments — not shipping methods. Steps 2–6 build the cart, so step 8 finalizes it with complete-order (body: encrypted_card + billing_info); use place-order only for the one-shot create-cart-and-order call.

​​ Considerations the ad surface owns

  • Render in the ad’s footprint. In-ad checkout typically has limited vertical real estate. Design for a compressed checkout UX — single-screen address, one-tap wallet, minimal scroll.
  • Capture the click identifier as early as it’s available. Persist whichever click identifier the platform exposes (fbclid, gclid, etc.) as soon as it appears — for most platforms this is at click time, when the identifier is appended to the click-through URL. Once the cart exists, bind it (folded into the utm string) via Set Cart Attribution so it rides through to the order metadata and postback.
  • Fire the postback after order success. The conversion postback (Meta CAPI, Google Ads, etc.) must come after cart_status === "submitted", not before. Otherwise the campaign learns from unconfirmed conversions.
  • Inventory-aware creatives. Ad campaigns can drive concurrent traffic spikes. If the ad targets a limited-stock SKU, fetch the product via Get a Product before the viewer clicks Buy and surface “out of stock” in the creative when availability reports it’s unavailable.