Key concepts
- Offering ID — Stable identifier you choose (e.g.,
onboarding,winback). Used in the API path and in related resources (experiments, scheduled reports). Up to 64 characters; allowed characters area–z,A–Z,0–9,.,_,-,:, and spaces. Immutable after create. - Products — An ordered list of product UIDs attached to the offering. The SDK renders them in the order you define. Each UID must already exist in the same project; product UIDs are up to 255 characters from the same charset as offering ids.
- Main offering — At most one offering per project carries
tag: 1. UsePOST /v4/offerings/{offering_id}/set-mainto switch the main — it atomically clears the previous main inside a single transaction.tag=1onPOST /offeringsandPATCH /offerings/{id}is rejected with400(typed codecannot_set_main_directly). To make an offering the project’s main, create or patch it withouttagand callPOST /offerings/{id}/set-mainafterward — that endpoint flips the main flag atomically. Patching the project’s current main offering withtag: 0(or any non-main value) is rejected with422(typed codecannot_demote_main). To switch which offering is main, callPOST /offerings/{new-main-id}/set-main— the previous main is cleared in the same transaction. - Tag — On read:
1= main offering,0= regular offering previously demoted from main,null= regular offering that has never been tagged. Treat0andnullas equivalent on read. Tag is read-only viaPATCH; useset-mainto promote andset-mainon a different offering to implicitly demote the current main. OnPOSTonly0andnullare accepted (andtag=1is rejected as above). The very first offering created in an empty project is auto-promoted totag: 1even iftagis omitted in the request. - Experiment-variant offerings — Offerings owned by the experiments service are excluded from
GET /offeringsand return404fromGET /offerings/{offering_id}.PATCH,DELETE, andset-mainon an experiment-variant id return422with typed codescannot_patch_experiment_variant,cannot_delete_experiment_variant, andcannot_setmain_experiment_variantrespectively.
Offering object
Available endpoints
PATCH replaces product_ids with the supplied list — pass [] to detach all products, or omit the field to leave the list unchanged.