GET https://api.veriko.mx/v1/plans/{slug}/prices

Active prices of a plan

Audience
public
Auth
API key
Permission
plans:read

Returns the active prices of the plan identified by slug so the client can display the price breakdown by currency × interval × kind before checkout. stripe_price_id is NOT exposed here — price resolution lives server-side in POST /v1/billing/checkout-session (the client only sends plan_slug, currency, billing_interval). If the plan does not exist, is disabled, or has is_public = 0, returns 404 plan_not_found (defense-in-depth against enumeration). meta.plan carries a plan mini-summary (billing_model, trial_days, included_validations) so the UI can render context without a separate fetch. Accepts API key authentication.

Parameters
Parameter In Type Required Description
slug * path string required

Plan slug.

Request
curl -X GET 'https://api.veriko.mx/v1/plans/{slug}/prices' \
  -H 'Authorization: Bearer mxcep_••••'

Python example — coming soon.

JavaScript example — coming soon.

PHP example — coming soon.

Response 200 ListPlanPricesResponse — Active prices of the plan + summary at `meta.plan`.
Field Type Description
type * string

id * string

Composite key `<currency>_<interval>_<kind>` (e.g. `MXN_month_base`).

attributes * object

Stripe price tied to a plan, surfaced to clients without revealing `stripe_price_id`. A plan may carry several prices for combinations of currency × interval × kind (`base` for the flat fee + optional `metered_overage` for metered overage).

currency string

Price currency.

billing_interval string

Billing cadence.

kind string

Price kind. `base` = flat cycle fee; `metered_overage` = per-unit charge over the included amount.

unit_amount integer | null nullable

Amount in minor units (cents). `null` when the price is tiered server-side in Stripe (the rate is computed at billing time and cannot be pre-displayed as a single number).

tax_behavior string

How tax is treated in `unit_amount`. `inclusive` = already included; `exclusive` = added on top at checkout.

Response status codes GET /v1/plans/{slug}/prices
Status Class Description Body
200 2xx Active prices of the plan + summary at `meta.plan`. ListPlanPricesResponse
401 4xx Authentication is required or the provided credentials are invalid. ErrorResponse
404 4xx `plan_not_found` — slug does not exist, plan is disabled, or `is_public = 0`. ErrorResponse
422 4xx `plan_slug_invalid` — `slug` does not match `[a-z0-9_-]{1,50}`. ErrorResponse
429 4xx Rate limit exceeded ErrorResponse
Errors from GET /v1/plans/{slug}/prices
Status Code Detail
401 unauthorized

Invalid or missing authentication credentials.

Envelope
meta.request_id
c4d5e6f7a8b9
429 rate_limit_exceeded

Rate limit exceeded. Try again in 45 seconds.

Envelope
meta.request_id
f7a8b9c0d1e2
Response headers
  • Retry-After : integer — Seconds to wait before retrying. Matches the endpoint's rate-limit window (typically 60s for list endpoints, 1-5s for in-flight idempotent operations).
  • X-RateLimit-Limit : integer — Configured request cap for this bucket (emitted only on 429).
  • X-RateLimit-Remaining : integer — Requests remaining in the current window — always 0 at the moment of the 429 (emitted only on 429).
  • X-RateLimit-Reset : integer — Absolute Unix epoch (seconds) when the window resets. Emitted only on 429, alongside Retry-After. Per-endpoint overrides exist (e.g. `rate_limited_login`).