Plans
/v1/plans — productos recurrentes que tú defines y vendes a tus clientes.
Ver también el concepto Plan.
El objeto Plan
{
"id": "plan_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
"code": "pro-mensual",
"name": "Plan Pro",
"price_monthly_cents": 5000000,
"price_annual_cents": 50000000,
"trial_days": 7,
"description": "Acceso completo a todas las funciones",
"active": true,
"created_at": "2026-08-24T15:00:00Z"
}| Campo | Tipo | Descripción |
|---|---|---|
id | string | Identificador único del plan |
code | string | Código único y legible (ej. pro-mensual) |
name | string | Nombre visible del plan |
price_monthly_cents | integer | Precio del ciclo mensual, en centavos COP |
price_annual_cents | integer | null | Precio del ciclo anual, en centavos COP |
trial_days | integer | null | Días de prueba antes del primer cobro |
description | string | null | Descripción libre |
active | boolean | Si el plan admite nuevas suscripciones |
created_at | datetime | Fecha de creación (ISO-8601 UTC) |
Crear un plan
POST /v1/plans
Request body
{
"code": "pro-mensual",
"name": "Plan Pro",
"price_monthly_cents": 5000000,
"price_annual_cents": 50000000,
"trial_days": 7,
"description": "Acceso completo a todas las funciones",
"active": true
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
code | string | Sí | Código único y legible |
name | string | Sí | Nombre visible |
price_monthly_cents | integer | Sí | Precio mensual en centavos COP |
price_annual_cents | integer | No | Precio anual en centavos COP |
trial_days | integer | No | Días de prueba |
description | string | No | Descripción libre |
active | boolean | No | Por defecto true |
Response — 201 Created
Devuelve el objeto Plan creado.
curl -X POST https://api.rekurra.dev/v1/plans \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"code": "pro-mensual",
"name": "Plan Pro",
"price_monthly_cents": 5000000,
"trial_days": 7
}'Errores posibles
| Status | error.type | Causa |
|---|---|---|
400 | invalid_request | Falta code, name o price_monthly_cents, o code con formato inválido |
401 | authentication_error | API key inválida o ausente |
409 | invalid_request | Ya existe un plan con ese code |
Listar planes
GET /v1/plans
Soporta paginación estándar: ?limit= (default 25, máx 100) y
?starting_after=<id>.
curl "https://api.rekurra.dev/v1/plans?limit=25" \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"Response — 200 OK
{ "data": [ /* Plan[] */ ], "has_more": false, "next_cursor": null }Obtener un plan
GET /v1/plans/{id}
curl https://api.rekurra.dev/v1/plans/plan_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"Errores posibles
| Status | error.type | Causa |
|---|---|---|
404 | invalid_request | El plan no existe o no pertenece a tu cuenta |
Actualizar un plan
PATCH /v1/plans/{id}
Acepta cualquier subconjunto de los campos de creación.
curl -X PATCH https://api.rekurra.dev/v1/plans/plan_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{ "name": "Plan Pro (nuevo nombre)" }'Errores posibles
| Status | error.type | Causa |
|---|---|---|
400 | invalid_request | Campo con formato inválido |
404 | invalid_request | El plan no existe |
Desactivar un plan
DELETE /v1/plans/{id}
Desactivación suave: marca active: false. Las suscripciones existentes que
usan este plan no se ven afectadas.
curl -X DELETE https://api.rekurra.dev/v1/plans/plan_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"Response — 200 OK
Devuelve el objeto Plan con active: false.