Fixed

Variant create responses match what you read back

Creating a product variant serialized its access grants from in-memory state, so the 201 response could show a grant twice even though only one existed. The response is now rendered from the saved variant, so it matches the GET you make a second later and you can trust it as the source of truth instead of re-fetching to check.

Sending a request whose products_variant wrapper is missing or malformed also returns 400 with the parameter error now, instead of 500 with nothing to act on.

Agent examples: create a variant with its course, community and digital-asset grants and use the response directly · tell a caller exactly which part of a request body was wrong.

Resources: Products::Variant
Building with an AI agent? Point it at the Products skill.