GEThttps://api.veriko.mx/v1/billing/subscription

Get user's active subscription

Audience
public
Auth
API key
Permission
billing:read_self

Returns the authenticated user's active subscription with the current plan, billing model, current cycle dates, effective limit, and quota summary. The source field indicates the origin: stripe (Stripe payment), admin_granted (manually granted), or system_default (default free plan). Every user always has exactly one active subscription — the response never includes data: null. The usage summary (used, remaining, resets_at, limit) lives at meta.quota so clients reading only the slug from data.attributes are not forced to parse the quota. Accepts API key authentication. If the billing module is disabled responds 503 with code billing_disabled. To see the available plans to switch to use GET /v1/plans; for current-cycle usage use GET /v1/usage/summary — its resets_at matches current_period_end from this subscription.

Request
curl -X GET 'https://api.veriko.mx/v1/billing/subscription' \
  -H 'Authorization: Bearer veriko_••••'

Python example — coming soon.

JavaScript example — coming soon.

PHP example — coming soon.

Response 200BillingSubscriptionResponse — User's active subscription with plan, cycle, and quota.
FieldTypeDescription
dataobject

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 billing_subscription.

e.g. billing_subscription
id*string

Local subscriptions row ID (integer as string). NOT the Stripe ID — that lives in attributes.stripe_subscription_id.

e.g. 4218
attributes*object

User's active subscription. Each user has exactly one active row; the origin is in source. The trial_*, cancel_* and stripe_subscription_id fields are null when not applicable (default free plans, admin grants, or steady-state subscriptions). All timestamps are UTC with Z suffix.

plan_slugstring

Active plan slug (free, basic, pro, …).

e.g. pro
plan_namestring

Display name of the plan for UI.

e.g. Pro
billing_modelstring

Plan billing model. free — no charge; tiered — flat fee; metered — charged by usage; hybrid — flat fee plus usage.

e.g. hybrid
sourcestring

Subscription origin. stripe = active Stripe payment. admin_granted = manually granted by an admin. system_default = default free plan, auto-created for users with no active billing.

e.g. stripe
statusstring

Subscription lifecycle status. active, trialing and past_due count as "access granted". past_due is a grace period: Stripe Smart Retries is retrying the charge. canceled — ended; unpaid — failed charges with no grace left; incomplete and incomplete_expired — the first payment never completed; paused — paused.

e.g. active
current_period_startstring (date-time)

ISO 8601 timestamp in UTC with explicit Z suffix. Example: "2026-05-01T05:14:38Z". Every datetime field uses this shape. The descriptor at meta.datetime makes the contract runtime-assertable.

e.g. 2026-05-01T05:14:38Z
current_period_endstring (date-time)

ISO 8601 timestamp in UTC with explicit Z suffix. Example: "2026-05-01T05:14:38Z". Every datetime field uses this shape. The descriptor at meta.datetime makes the contract runtime-assertable.

e.g. 2026-05-01T05:14:38Z
currencystring

Currency of the active cycle. MXN is Mexican pesos and USD, US dollars.

e.g. MXN
billing_intervalstring

Billing cadence. once is used for admin grants or cycles without automatic renewal. month bills monthly and year, yearly.

e.g. month
overage_enabledboolean

true if the user has opted into overage billing on a hybrid plan. When true, effective_limit jumps from included_validations to monthly_validation_limit.

e.g. false
included_validationsinteger | nullnullable

Validations included in the plan before overage. null for plans with no included/overage distinction.

e.g. 500
monthly_validation_limitinteger

Plan monthly cap. In hybrid with overage_enabled=true it acts as hard cap; in tiered/metered/free plans it is the primary limit.

e.g. 10000
beneficiaries_maxinteger

Beneficiary cap of the active plan. -1 = unlimited (every plan's default until pricing sets a value); >=0 acts as a hard cap.

e.g. -1
effective_limitinteger

Effective validation limit for the current cycle, after applying any admin override and the overage_enabled rule. This is the number a validation is checked against before it is served or refused.

e.g. 500
is_stripeboolean

Shortcut: equivalent to source == "stripe".

e.g. true
stripe_subscription_idstring | nullnullable

Stripe subscription ID. null when source != "stripe".

e.g. sub_1OaBcDeFgHiJk2
grant_reasonstring | nullnullable

Reason recorded when the subscription was granted by an admin. null if source != "admin_granted".

e.g. cortesía soporte
cancel_at_period_endboolean

true when the subscription is scheduled to cancel at cycle end (via POST /billing/subscription/cancel or legacy Stripe portal).

e.g. false
cancel_atstring | nullnullable

Explicit scheduled-cancellation timestamp (modern Stripe Customer Portal format). Mutually exclusive with cancel_at_period_end at the Stripe API level, but both may appear locally.

e.g. 2026-04-30T10:15:00Z
canceled_atstring | nullnullable

Timestamp when cancellation has already taken effect. null while the subscription is active.

e.g. 2026-04-30T10:15:00Z
trial_startstring | nullnullable

Trial period start, null if no trial.

e.g. 2026-04-30T10:15:00Z
trial_endstring | nullnullable

Trial period end, null if no trial.

e.g. 2026-04-30T10:15:00Z
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/billing/subscription
StatusClassDescriptionBody
2002xxUser's active subscription with plan, cycle, and quota.BillingSubscriptionResponse
4014xxAuthentication is required or the provided credentials are invalid.ErrorResponse
5035xxbilling_disabled — billing module is disabled.ErrorResponse
Errors from GET /v1/billing/subscription
StatusCodeExample
401unauthorized

Invalid or missing authentication credentials.

Envelope
meta.request_id
c4d5e6f7a8b9