Referencia de APIPlans

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"
}
CampoTipoDescripción
idstringIdentificador único del plan
codestringCódigo único y legible (ej. pro-mensual)
namestringNombre visible del plan
price_monthly_centsintegerPrecio del ciclo mensual, en centavos COP
price_annual_centsinteger | nullPrecio del ciclo anual, en centavos COP
trial_daysinteger | nullDías de prueba antes del primer cobro
descriptionstring | nullDescripción libre
activebooleanSi el plan admite nuevas suscripciones
created_atdatetimeFecha 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
}
CampoTipoRequeridoDescripción
codestringSíCódigo único y legible
namestringSíNombre visible
price_monthly_centsintegerSíPrecio mensual en centavos COP
price_annual_centsintegerNoPrecio anual en centavos COP
trial_daysintegerNoDías de prueba
descriptionstringNoDescripción libre
activebooleanNoPor 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

Statuserror.typeCausa
400invalid_requestFalta code, name o price_monthly_cents, o code con formato inválido
401authentication_errorAPI key inválida o ausente
409invalid_requestYa 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

Statuserror.typeCausa
404invalid_requestEl 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

Statuserror.typeCausa
400invalid_requestCampo con formato inválido
404invalid_requestEl 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.