Skip to main content

Plans

Plans are the SKUs your store sells. Each plan defines a monthly try-on quota for any end-customer assigned to it.

Base URL: https://genvoris.org/api/v1

All endpoints require Authorization: Bearer <store_api_key>.

List plans

GET /plans?include_inactive=false
ParamTypeDefaultDescription
include_inactiveboolfalseInclude disabled plans
{
"data": [
{
"id": "pln_abc",
"name": "Pro",
"monthlyTryOns": 100,
"externalPriceId": "price_1NXXXX",
"active": true,
"createdAt": "2026-04-28T03:18:00.000Z",
"updatedAt": "2026-04-28T03:18:00.000Z"
}
]
}

Create a plan

POST /plans
Content-Type: application/json
{
"name": "Pro",
"monthlyTryOns": 100,
"externalPriceId": "price_1NXXXX",
"active": true
}
FieldTypeRequiredNotes
namestringyes1–80 chars
monthlyTryOnsintyes1–1,000,000
externalPriceIdstringnoMap back to your billing price id
activeboolnoDefaults to true

Returns 201 Created with the plan body.

Read a single plan

GET /plans/{id}

Update a plan

PATCH /plans/{id}
Content-Type: application/json

All fields optional. You may e.g. flip active, raise monthlyTryOns (existing customers get the new quota at next period roll), or rename the plan.

Disable a plan

DELETE /plans/{id}

Soft-disable. Existing end-customers on the plan keep their quota until you cancel them or change their plan. The plan stops appearing in GET /plans unless you pass include_inactive=true.

Errors

HTTPerrorMeaning
400invalid_bodySchema mismatch — detail describes
401unauthorized / invalid_keyBad / missing API key
403account_inactiveYour store account is suspended
404not_foundPlan id doesn't belong to you