Creating a price returns a validation error instead of a 500
POST /api/v2/products/variants/:variant_id/prices used to answer any invalid payload with a generic 500 Unexpected error, which told you nothing about what to change and looked the same no matter which field was wrong. It now returns the 422 it always should have, carrying the real message: a price rejected for a bad billing period comes back as Request unprocessable: Interval is not included in the list rather than an opaque server error.
The reference now also documents what these fields actually accept, which is where most of those rejections came from in the first place. interval and trial_interval list their five values, and they are plural — days, weeks, months, quarters, years, so month is rejected. interval and interval_count are required only for a subscription or payment_plan price, and duration only for a payment_plan; the schema previously marked all of them mandatory on every price, including a one-off. An active trial needs both trial_interval and a positive trial_duration; if you send only trial_duration, it is stored but remains inactive until a later update supplies trial_interval. currency is ignored on write, because a price always takes its workspace's currency.
Agent examples: create a quarterly membership price without guessing at the billing period · read back a concrete reason when a price payload is rejected and fix it in one pass.
Resources: Products::Price
Building with an AI agent? Point it at the Products skill.