GEThttps://api.veriko.mx/v1/plans/public

Public plan catalog (landing)

Audience
public

Plan catalog for unauthenticated surfaces (landing /pricing, embeddable widgets). Public endpoint, IP rate-limited, cached for 5 minutes. Returns plans where is_active = 1 AND is_public = 1. Each one embeds prices[] (filtered to is_active = 1) and bilingual features[] (also active). Does NOT expose stripe_product_id, stripe_price_id, user_count, nor internal timestamps — stripe_price_id is resolved server-side at Checkout Session creation. Caché: Cache-Control: public, max-age=300 (5 min).

Request
curl -X GET 'https://api.veriko.mx/v1/plans/public'

Python example — coming soon.

JavaScript example — coming soon.

PHP example — coming soon.

Response 200ListPublicPlansResponse — Active + public plans with embedded prices and features.
FieldTypeDescription
dataarray

Main response payload. Shape varies by endpoint (object, array, or JSON:API envelope with type, id, attributes).

type*string

Resource type, fixed for this operation. Part of the resource identity in the JSON:API envelope. Always plan.

e.g. plan
id*string

Plan slug.

e.g. pro
attributes*object

The resource's own data, kept apart from its identity.

slug*string

Human-readable plan identifier (slug), stable and unique; same value as id.

e.g. pro
name*string

Display name of the plan, shown in the UI.

e.g. Pro
billing_model*string

Plan billing model — free (no cost), tiered (fixed tiers), metered (usage-based) or hybrid (base + usage).

e.g. free
monthly_validation_limitinteger | nullnullable

Monthly cap on validations allowed by the plan; null means uncapped.

e.g. 5000
included_validationsinteger | nullnullable

Validations included at no extra cost within the base quota; null when not applicable.

e.g. 5000
trial_daysinteger | nullnullable

Free-trial length in days; null or 0 when the plan has no trial.

e.g. 14
is_defaultboolean

Whether this is the default plan assigned to new accounts.

e.g. true
sort_orderinteger

Sort position used to order the plan within the catalog (ascending).

e.g. 20
prices*array

Plan prices, one per billing-period and currency combination.

features*array

Features included in the plan, in display order.

metaobject

Response metadata including API version, route prefix, unique request identifier, and the server timestamp in UTC.

versionstring

API version that processed the request.

e.g. 1.47.0
api_versionstring

API route prefix version (e.g. v1).

e.g. v1
request_idstring

Unique request identifier (hex).

e.g. a1b2c3d4e5f6
datetimeobject

Companion descriptor present in every response's meta block (and in outgoing webhook payloads). Lets clients assert the timezone contract without re-reading the spec.

e.g. {"timezone":"UTC","format":"ISO 8601"}
timezone*string

Always UTC — the canonical timezone for every datetime field in the body.

e.g. UTC
format*string

Always ISO 8601 — explicit Z suffix on every datetime.

e.g. ISO 8601
linksobject

Pagination or related links, present only when the endpoint returns a paginated collection.

Response status codesGET /v1/plans/public
StatusClassDescriptionBody
2002xxActive + public plans with embedded prices and features.ListPublicPlansResponse
4294xxRate limit exceededErrorResponse
Response headers200
HeaderTypeDescription
Cache-Controlstringpublic, max-age=300.
Errors from GET /v1/plans/public
StatusCodeExample
429rate_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`).