# Save a product This endpoint saves a product with the given details specified in the body of the request. The product ID is randomyly generated and provided as part of the URI path parameter response returned on success. Endpoint: POST /v3/products Version: 2026-01-08 Security: ZephrHmacHttp ## Request fields (application/json): - `label` (string, required) The product label. This is the human-readable name of the product. Example: "Gold Subscription" - `description` (string) The product description. This is a human-readable description of the product. Example: "The most premium subscription." - `entitlement` (object, required) - `entitlement.id` (string) Entitlement ID/slug. Example: "gold-bundle" - `entitlement.type` (string) Entitlement type (always "bundle"). Example: "bundle" - `entitlement.entitlementTenant` (string) Entitlement tenant ID. Example: "company" - `mapping` (object, required) Example: {"braintree_one_off":{"price_points":[{"id":"ten","label":"Ten Dollars","price":10}]}} - `mapping.braintree_recurring` (object) - `mapping.braintree_recurring.plan_id` (string) The Braintree plan ID. This is the unique identifier for the plan within the Braintree account. Example: "gold" - `mapping.braintree_recurring.archived` (boolean) Whether the product is archived. If true, the product will not be available for purchase. Example: true - `mapping.braintree_one_off` (object) Example: {"price_points":[{"id":"ten","label":"Ten Dollars","price":10}]} - `mapping.braintree_one_off.price_points` (array) Example: [{"id":"ten","label":"Ten Dollars","price":10}] - `mapping.braintree_one_off.price_points.id` (string, required) The unique identifier for the price point within the product. Example: "ten" - `mapping.braintree_one_off.price_points.label` (string, required) The human-readable name of the price point. Example: "Ten Dollars" - `mapping.braintree_one_off.price_points.price` (number, required) The price of the product in the currency of the payment provider account. Example: 10 - `mapping.braintree_one_off.price_points.archived` (boolean) Whether the price point is archived. If true, the price point will not be available for purchase. Example: true - `mapping.stripe_recurring` (object) - `mapping.stripe_recurring.stripe_plan_id` (string) The Stripe plan ID. This is the unique identifier for the plan within the Stripe account. Example: "gold" - `mapping.stripe_one_off` (object) - `mapping.rate_plans` (array) - `mapping.rate_plans.payment_provider` (string, required) The payment provider for which the rate plan is configured. - `mapping.rate_plans.rate_plan_id` (string, required) The unique identifier for the rate plan within the payment provider account. - `mapping.rate_plans.archived` (boolean) Whether the rate plan is archived. If true, the rate plan will not be available for purchase. - `mapping.rate_plans.archive_label` (string) The human-readable name of the rate plan. - `mapping.rate_plans.environment` (string, required) The environment for which the rate plan is configured. Example: "LIVE" - `mapping.jwt` (object) - `mapping.jwt.privateClaimValue` (string) - `sharingLimit` (number) The number of other users that the purchaser of this product can share the product with. Example: 5 ## Response 201 fields (application/json): - `message` (string) Example: "Product created successfully" - `uri` (string) Example: "https://company.api.zephr.com/v3/products/63b68935-c996-4e90-b88a-dd6a133a7a3" ## Response 400 fields ## Response 401 fields ## Response 409 fields