Addons
/v1/addons — productos recurrentes reutilizables que se agregan a una
suscripción existente para aumentar su monto de cobro por periodo. A
diferencia de un Plan, un addon no se suscribe directamente: se define una
sola vez en tu catálogo y luego se adjunta a una o varias suscripciones
usando los endpoints de Subscriptions.
El objeto Addon
{
"id": "addon_01HZXK7QJ5M8Z9X2R3TVQ7A1B2",
"code": "soporte-prioritario",
"name": "Soporte prioritario",
"price_monthly_cents": 1500000,
"price_annual_cents": 15000000,
"description": "Atención en menos de 1 hora hábil",
"active": true,
"created_at": "2026-09-12T15:00:00Z"
}| Campo | Tipo | Descripción |
|---|---|---|
id | string | Identificador único del addon |
code | string | Código único y legible |
name | string | Nombre visible del addon |
price_monthly_cents | integer | Precio mensual, en centavos COP |
price_annual_cents | integer | null | Precio anual, en centavos COP |
description | string | null | Descripción libre |
active | boolean | Si el addon puede adjuntarse a suscripciones |
created_at | datetime | Fecha de creación (ISO-8601 UTC) |
Crear un addon
POST /v1/addons
Request body
{
"code": "soporte-prioritario",
"name": "Soporte prioritario",
"price_monthly_cents": 1500000,
"price_annual_cents": 15000000,
"description": "Atención en menos de 1 hora hábil",
"active": true
}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
code | string | Sí | Código único por desarrollador y entorno |
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; si se omite se usa price_monthly_cents * 12 en ciclos anuales |
description | string | No | Descripción libre |
active | boolean | No | Por defecto true |
Response — 201 Created
Devuelve el objeto Addon creado.
curl -X POST https://api.rekurra.dev/v1/addons \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"code": "soporte-prioritario",
"name": "Soporte prioritario",
"price_monthly_cents": 1500000
}'Errores posibles
| Status | error.type | Causa |
|---|---|---|
400 | invalid_request | Falta code o name, o price_monthly_cents no es positivo |
401 | authentication_error | API key inválida o ausente |
409 | invalid_request | Ya existe un addon con ese code |
Listar addons
GET /v1/addons
Soporta paginación estándar: ?limit= (default 25, máx 100) y
?starting_after=<id>.
curl "https://api.rekurra.dev/v1/addons?limit=25" \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"Response — 200 OK
{ "data": [ /* Addon[] */ ], "has_more": false, "next_cursor": null }Obtener un addon
GET /v1/addons/{id}
curl https://api.rekurra.dev/v1/addons/addon_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"Errores posibles
| Status | error.type | Causa |
|---|---|---|
404 | invalid_request | El addon no existe o no pertenece a tu cuenta |
Actualizar un addon
PATCH /v1/addons/{id}
Acepta cualquier subconjunto de los campos de creación (excepto code).
curl -X PATCH https://api.rekurra.dev/v1/addons/addon_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{ "price_monthly_cents": 2000000 }'Errores posibles
| Status | error.type | Causa |
|---|---|---|
400 | invalid_request | Campo con formato inválido |
404 | invalid_request | El addon no existe |
Desactivar un addon
DELETE /v1/addons/{id}
Desactivación suave: marca active: false. Las suscripciones que ya
tienen este addon adjunto no se ven afectadas, pero ya no podrá adjuntarse
a nuevas suscripciones. No elimina el historial de uso.
curl -X DELETE https://api.rekurra.dev/v1/addons/addon_01HZXK7QJ5M8Z9X2R3TVQ7A1B2 \
-H "Authorization: Bearer rk_live_XXXXXXXXXXXXXXXXXXXXXXXX"Response — 200 OK
Devuelve el objeto Addon con active: false.