Ir al contenido

Resellers: operar tu panel por API

Un reseller puede hacer por API lo mismo que hace en su panel: crear y administrar a sus clientes, sus planes, sus liquidaciones y su configuración. Cada operación usa la misma ruta, el mismo método y la misma respuesta que el panel — no existe un prefijo ni una copia de las rutas para máquina — así que todo lo que ves en Swagger para el panel del reseller es también la referencia por API.

Lo que una credencial no alcanza: el interior de una empresa cliente (sus documentos, sus contactos, su configuración — eso sigue siendo de personas), la API de documentos tributarios con el slug de tu propio tenant, y cualquier cliente que no sea tuyo. Fuera de esos límites, la credencial de escritura hace todo lo que hace un RESELLER_FULL_ACCESS en el panel.

En tu panel, en Reseller → Credenciales de API (/tu-tenant/reseller/credenciales), sólo el rol RESELLER_FULL_ACCESS ve esta pantalla y puede crear, renombrar y revocar. Al crear eliges:

  • Nombre — de 3 a 191 caracteres, para reconocerla en la lista.
  • Tipo — lectura o escritura.
  • Entorno — prueba o real.
  • Vencimiento — opcional, en el futuro.

La respuesta de crear es la única que trae el secreto: cópialo antes de cerrar el diálogo, porque no se vuelve a mostrar. Si lo pierdes, no hay forma de recuperarlo — tienes que revocar esa credencial y crear otra.

Tienes a lo más cuatro credenciales vigentes: una de lectura y una de escritura en real, y una de cada una en prueba. Si ya tienes una vigente del mismo tipo y entorno, crear otra responde 409 CREDENCIAL_VIGENTE_EXISTE con «ya tienes una credencial de escritura de real vigente; revócala para crear otra», y no se crea nada.

Rotar una credencial es revocar la vigente y crear otra — no existe una operación que regenere el secreto ni que le cambie el vencimiento a la que ya tienes. Entre que revocas y creas la nueva hay un corte: ninguna llamada con la credencial vieja funciona mientras no actualices tu sistema con la nueva. Planifica ese corte antes de rotar en producción.

Renombrar sólo cambia el nombre que ves en la lista; no afecta el secreto ni el vencimiento. Renombrar una credencial revocada responde 409 CREDENCIAL_REVOCADA. Revocar una que ya está revocada no falla: devuelve la credencial tal como quedó, sin cambiarla.

Con el CLI de REDCUMBRE y tu propia sesión (necesitas el rol RESELLER_FULL_ACCESS en la empresa), el mismo flujo está disponible desde la terminal:

Ventana de terminal
redcumbre reseller credenciales listar [--empresa <slug>]
redcumbre reseller credenciales crear \
--tipo lectura|escritura \
--entorno prueba|real \
--nombre "<nombre de la credencial>" \
[--vence 2027-12-31] \
[--empresa <slug>]
redcumbre reseller credenciales revocar <id> [--empresa <slug>]

--empresa es opcional si corres el comando dentro de un proyecto ya conectado con redcumbre init: el CLI usa la empresa de ese proyecto.

Al crear, el secreto nunca se imprime en la terminal: el CLI lo escribe directo en keys/reseller-<empresa>-<tipo>-<entorno>.json (con permisos 0600, igual que cualquier llave que descargas desde el panel) y la salida sólo te dice la ruta del archivo. listar nunca trae el secreto de ninguna credencial.

Con una credencial de prueba, nada de lo que haces toca datos reales:

  • Las lecturas devuelven siempre el mismo conjunto de ejemplo, igual para todo reseller: tres clientes (ejemplo-panaderia-el-sol, activo con plan asignado; ejemplo-taller-los-andes, suspendido; y ejemplo-consultora-sur, en preactivación sin plan), dos planes retail (ejemplo-retail-basico y ejemplo-retail-plus), tres liquidaciones (dos emitidas a los dos primeros clientes y una recibida de REDCUMBRE), su auditoría, sus métricas de uso, la configuración del reseller de ejemplo y un SaaS externo de ejemplo con su plan y su suscripción. Todos los identificadores de este conjunto son negativos y todos los slugs empiezan con ejemplo-: se reconocen a simple vista.
  • Las escrituras se validan igual que en producción y rechazan lo mismo, pero no persisten nada: la respuesta es la que recibirías si la operación hubiera ocurrido, sin crear ni cambiar una fila, sin cobrar, y sin avisar a ZITADEL, Lago, al SII, a ValidaFirma ni por correo. La única excepción es la propia clave de repetición: repetir la misma escritura con la misma clave devuelve la misma respuesta.
  • Un identificador o un slug que pertenece a un cliente real responde como inexistente — la credencial de prueba nunca ve ni toca tus datos reales.
  • Una operación que no tiene un comportamiento de ejemplo definido responde 400 OPERACION_NO_DISPONIBLE_EN_PRUEBA.

Con una credencial de real, cada llamada opera sobre tus clientes, tus planes y tus liquidaciones de verdad, con los mismos efectos — correos, cobros, documentos al SII — que la misma acción hecha por una persona en el panel.

Leer el DTE completo de una liquidación emitida

Sección titulada «Leer el DTE completo de una liquidación emitida»

El detalle de una liquidación trae, por cada documento tributario asociado, su tipo, folio, estado, monto y —sólo si el documento lo emitiste tú— el identificador del DTE. Con ese identificador lees el documento completo (detalle y archivos) por la API de documentos tributarios que ya usas para tus propios DTE, con una llave de máquina de tu propio tenant:

  • GET /tu-tenant/dte/:id — el detalle del documento.
  • GET /tu-tenant/dte/:id/archivos — sus archivos (PDF, XML, etc).

Esto vale sólo para las liquidaciones donde tú emites el documento (las que le facturas a tu cliente). En una liquidación recibida —la que REDCUMBRE te liquida a ti— el documento trae tipo, folio, estado y monto, pero sin identificador del DTE: ese documento está en el tenant de REDCUMBRE y no hay una vía de máquina para leerlo completo.

Para descargar directamente el PDF de la liquidación (no del DTE, sino del documento de liquidación en sí), usa GET /tu-tenant/liquidaciones/:id/pdf con la misma credencial — ver «Tope de llamadas» más abajo por su límite propio.

Toda lectura (GET) acepta las dos credenciales, de lectura y de escritura. Cualquier otro método —crear, editar, suspender, confirmar, emitir— exige la credencial de escritura; con la de lectura responde 403.

Cada operación del Swagger declara su credencial mínima en la extensión x-rcapi-credencial, con el valor lectura (que una credencial de escritura también satisface) o escritura.

Cada credencial tiene un tope de 10.000 llamadas por hora del reloj (zona America/Santiago), contando lecturas y escrituras por igual. Al superarlo, la llamada responde 429 LIMITE_EXCEDIDO sin ejecutarse, con las cabeceras Retry-After, X-RateLimit-Limit y X-RateLimit-Remaining. Si el contador no se puede verificar en ese momento, la respuesta es 503 TOPE_NO_VERIFICABLE, también sin ejecutar la operación. Este tope no tiene excepción ni en desarrollo: cuenta siempre, y nunca aplica a una persona operando desde el panel.

Descargar el PDF de una liquidación tiene su propio límite, más estrecho: 120 descargas por hora por credencial. Al superarlo, responde 429 DOWNLOAD_RATE_LIMIT_EXCEEDED. El panel no tiene este límite.

Toda escritura que crea algo o emite un documento —dar de alta un cliente, crear o clonar un plan, asignar o cambiar el plan de un cliente, registrar tu dominio propio, avisar un certificado reemplazado, confirmar liquidaciones, emitir una nota de crédito o una refactura, adjuntar un documento, contratar o cambiar de plan una suscripción adicional— exige una clave de repetición: el campo idempotencyKey en el cuerpo de la solicitud, elegida por tu propio sistema.

  • Sin esa clave, por máquina, la operación responde 400 CLAVE_DE_REPETICION_REQUERIDA y no se ejecuta.
  • Repetir la llamada con la misma clave y los mismos datos devuelve la respuesta de la primera vez, sin volver a ejecutar la operación — así un reintento de red nunca duplica el efecto.
  • La misma clave con otros datos responde 409 CLAVE_USADA_CON_OTROS_DATOS.
  • La misma clave mientras la primera llamada todavía está en curso responde 409 CLAVE_EN_CURSO: reintenta en unos segundos.
  • Si la primera llamada falló sin producir ningún efecto, repetir la clave vuelve a intentar la operación.

Una clave se conserva al menos 24 horas; pasado ese plazo se trata como si no existiera. El alta de un cliente, además de la clave, se reconoce por su slug: repetir el alta con el slug de un cliente que ya es tuyo y los mismos datos devuelve ese mismo cliente (200, sin crear otro); con otros datos responde 409 SLUG_YA_USADO. Las demás escrituras —editar un cliente, cambiar sus servicios, suspender, reactivar, reintentar un DTE de una liquidación— no necesitan clave: repetirlas deja el mismo resultado.

Con tu cuenta de reseller suspendida, las credenciales existentes siguen funcionando, pero no se crean nuevas y las operaciones que hacen crecer tu cartera se rechazan con 403 RESELLER_SUSPENDIDO y el mensaje «tu cuenta de reseller está suspendida; regulariza tu pago con REDCUMBRE», igual en el panel y por API:

  • crear una credencial;
  • dar de alta un cliente, o completar uno que estaba en borrador;
  • asignar o cambiar el plan de un cliente;
  • reactivar un cliente o pasarlo de preactivación a activo;
  • cambiar los servicios de un cliente;
  • contratar o subir de plan una suscripción adicional, y cancelar una bajada programada de una.

Siguen permitidas todas las lecturas, suspender un cliente, editar un plan que no está asignado, y bajar de plan una suscripción adicional. Cambiar el plan de un cliente, para subirlo o para bajarlo, se rechaza.

Código HTTPCódigoCuándo
400CLAVE_DE_REPETICION_REQUERIDAFalta idempotencyKey en una escritura que la exige
400CONTRASENA_TEMPORAL_NO_PERMITIDAEl alta de un cliente trae una contraseña temporal para su usuario inicial — por API cada persona recibe su invitación por correo
400OPERACION_NO_DISPONIBLE_EN_PRUEBAEsa operación no tiene un comportamiento de ejemplo con una credencial de prueba
401API_KEY_REVOKEDLa credencial está revocada
401API_KEY_EXPIREDLa credencial venció
403API_KEY_TENANT_MISMATCHEl slug de la ruta no es el de tu propio tenant
403NO_ES_RESELLERLa empresa no tiene perfil de reseller
403RESELLER_SUSPENDIDOTu cuenta de reseller está suspendida (ver arriba qué se bloquea)
403BAJA_SOLO_MASTERDar de baja, o cancelar la baja de, una suscripción de ValidaFirma — eso sólo lo hace el MASTER de REDCUMBRE
403—Credencial de lectura en una escritura, acceso al interior de un cliente, o a la API de documentos tributarios con tu propio slug
404—Un cliente que no es tuyo, de otro reseller, o una credencial de otro tenant — responde igual que un recurso inexistente
409CREDENCIAL_VIGENTE_EXISTEYa tienes una credencial vigente de ese tipo y entorno
409CREDENCIAL_REVOCADARenombrar una credencial que ya está revocada
409CORREO_CON_USUARIOEl correo del usuario inicial de un alta ya tiene una cuenta en la plataforma; agrégalo desde el panel
409SLUG_YA_USADOEl slug del alta es de un cliente tuyo que no está en borrador, con datos distintos
409CLAVE_USADA_CON_OTROS_DATOSLa clave de repetición ya se usó con un cuerpo distinto
409CLAVE_EN_CURSOLa primera llamada con esa clave todavía se está ejecutando
429LIMITE_EXCEDIDOSuperaste las 10.000 llamadas por hora de la credencial
429DOWNLOAD_RATE_LIMIT_EXCEEDEDSuperaste las 120 descargas de PDF de liquidación por hora
503TOPE_NO_VERIFICABLENo se pudo verificar el tope de llamadas en ese momento; reintenta

Los mensajes de error no incluyen el correo, la razón social, el RUT ni la dirección de tu cliente ni de ninguna persona: nombran al cliente por su slug y a un usuario inicial como «el usuario inicial N». El código del error (error en el cuerpo de la respuesta) es siempre el mismo con una credencial o con una sesión de persona; sólo cambia el texto.

En tu panel, en Reseller → SaaS externos (/tu-tenant/reseller/saas-externos), sólo el rol RESELLER_FULL_ACCESS crea, renombra y archiva; RESELLER_ADMIN y RESELLER_VIEWER sólo ven. Tu sistema puede hacer lo mismo por API con la credencial de escritura: mismas reglas, mismos límites, mismos rechazos.

Un SaaS externo. POST /{tenantSlug}/reseller/saas-externos con codigo (3 a 40 caracteres: minúsculas, números y guion bajo — no cambia después), nombre y, si quieres, descripcion. Repetir la misma alta con el mismo código y los mismos datos devuelve el SaaS existente (200); con otros datos, 409 CODIGO_YA_USADO. El código de un SaaS archivado no se reusa (409 CODIGO_RESERVADO_POR_ARCHIVADO). Tienes hasta 50 SaaS externos activos; superarlo responde 409 LIMITE_ALCANZADO.

Si es tu primer SaaS y tu plan mayorista no tiene cargo para ninguna de las tres métricas con que REDCUMBRE te cobra (eventos, suscripciones adicionales activas y SaaS conectados), el alta se rechaza con 409 MAYORISTA_SIN_CARGO: pídeselo a REDCUMBRE. Con tu cuenta de reseller suspendida tampoco puedes crear uno nuevo (403 RESELLER_SUSPENDIDO).

Después del alta puedes cambiar el nombre y la descripción (PATCH /{tenantSlug}/reseller/saas-externos/{codigo}); el código no cambia nunca. Archivar (POST .../{codigo}/archivar) es definitivo: se niega mientras el SaaS tenga una suscripción adicional activa, también con una baja programada que todavía no rige (409 SAAS_CON_SUSCRIPCIONES_ACTIVAS); al archivarlo se archivan también sus métricas, y sus eventos ya recibidos se conservan en la vista.

Una métrica propia. Pertenece siempre a un SaaS tuyo. POST /{tenantSlug}/reseller/metricas-propias con codigo, nombre, descripcion opcional, saas (el código del SaaS) y forma: conteo, suma o unico — ver Las formas de conteo. Con forma: "unico" puedes además marcarla recurrente: true; con conteo o suma, recurrente responde 400 RECURRENTE_SOLO_CON_UNICO. El código, el SaaS y la forma no cambian después; sólo el nombre y la descripción son editables. Tienes hasta 50 métricas activas por reseller (409 LIMITE_ALCANZADO), y el mismo código no se reusa si ya está archivado (409 CODIGO_RESERVADO_POR_ARCHIVADO).

Una métrica propia sólo se usa en un plan de suscripción adicional de su propio SaaS: nunca en un plan rCAPI, en el de otro SaaS o en el de otro reseller. Al archivar una métrica recurrente, la respuesta trae el número de identificadores activos que tenía; una recurrente archivada deja de contarse desde el período siguiente.

REDCUMBRE no opera SaaS externos propios: si tu empresa es la reseller REDCUMBRE, esta sección no aplica.

Enviar eventos con la credencial de escritura

Sección titulada «Enviar eventos con la credencial de escritura»

POST /{tenantSlug}/reseller/eventos recibe un lote de 1 a 100 eventos de consumo de tus SaaS externos, y es la única operación de esta superficie que sólo acepta una credencial de máquina: ninguna persona —tampoco el MASTER de REDCUMBRE— puede enviarlos desde el panel ni con su sesión; con una sesión de persona responde 403 SOLO_POR_CREDENCIAL. Se acepta sólo con la credencial de escritura; con la de lectura responde 403.

Un lote puede mezclar eventos de distintos SaaS externos tuyos. Cada evento recibe su propio resultado —aceptado, duplicado o rechazado con su motivo— en el mismo orden del lote; un rechazo no cancela el resto. El lote entero se rechaza (400 LOTE_INVALIDO) sólo si está vacío, trae más de 100 eventos o está mal formado (no es JSON, no es un arreglo, etc.).

{
"eventos": [
{ "saas": "mesa_ayuda", "metrica": "horas_soporte", "cliente": "panaderia-luna", "evento_id": "E-1", "ocurrido_en": "2026-10-08T14:03:00-03:00", "cantidad": 3 }
]
}

responde:

{ "resultados": [ { "evento_id": "E-1", "resultado": "aceptado" } ] }

Ver la referencia completa de la operación, con más ejemplos de lote y de respuesta, en Swagger.

Cada métrica propia agrega sus eventos de una sola forma, fija desde que la creas:

  • conteo — cuenta eventos. Cada evento aceptado suma 1, cualquiera sea su contenido.
  • suma — suma un valor. Cada evento aceptado trae cantidad (mayor que 0, hasta 4 decimales) y se suma al período. Ejemplo: horas_soporte de «Mesa de ayuda», con eventos de 3 y 2 horas, suma 5 horas en el período.
  • unico — cuenta identificadores distintos dentro del período. Cada evento trae identificador_contado; el mismo identificador reportado varias veces cuenta una sola vez. Ejemplo: sesiones_portal, con los identificadores «U-17» y «U-22» en el mismo período, cuenta 2, sin importar cuántas veces se reportó cada uno.
  • unico recurrente — como unico, pero el identificador queda dado de alta hasta que llega su baja, y cuenta en todos los períodos intermedios. Cada evento trae además operacion: alta o baja. Ejemplo: el alta de «U-17» en marzo lo cuenta en marzo, abril y mayo; la baja reportada en mayo hace que deje de contarse desde junio (mayo todavía lo cuenta). Archivar la métrica la deja de contar desde el período siguiente.

Sólo una métrica de forma unico puede ser recurrente; conteo y suma nunca.

Cada evento del lote admite exactamente estos campos — cualquier otro responde rechazado con CAMPO_NO_ADMITIDO y el nombre del campo que sobra:

CampoTipoCuándoQué es
saasstringsiempreCódigo de tu SaaS externo, el que escribiste al crearlo
metricastringsiempreCódigo de una métrica activa de ese SaaS
clientestringsiempreSlug o id de un cliente tuyo
evento_idstring, hasta 100 caracteressiempreIdentificador de este evento en tu sistema. Reenviarlo con el mismo valor no lo cobra de nuevo: se reporta duplicado
ocurrido_enstring, ISO 8601 con zonasiempreCuándo ocurrió el evento en tu sistema
cantidadnumber, mayor que 0, hasta 4 decimalessólo con una métrica sumaLo que se suma
identificador_contadostring, hasta 100 caracteressólo con una métrica unicoLo que se cuenta una vez (un usuario, una sesión, lo que tu SaaS mida)
operacionalta o bajasólo con una métrica unico y recurrenteDa de alta o de baja el identificador

Identificadores. evento_id e identificador_contado son identificadores internos de tu propio sistema —un número de ticket, un correlativo, un código interno— nunca un RUT, un correo, un nombre ni un teléfono. Los ejemplos de esta guía, del conjunto de prueba y del Swagger usan identificadores ficticios como E-1 y U-17.

Fecha. ocurrido_en se rechaza con FECHA_FUTURA si está más de 5 minutos adelante del momento en que llega, y con FECHA_FUERA_DE_PLAZO si ocurrió hace más de 13 meses. Ojo: el rechazo es por la fecha del evento, pero el cobro va al período en que el evento se recibió, no al de ocurrido_en — ver Cuándo se cobra.

Con tu credencial de escritura de prueba, envía eventos contra el SaaS externo de ejemplo ejemplo-saas y sus cuatro métricas, una por forma:

CódigoForma
ejemplo_conteoconteo
ejemplo_horassuma
ejemplo_unicoúnico
ejemplo_usuariosúnico recurrente

El conjunto trae además un cliente con suscripción (-1, con cupo en ejemplo_horas y sin ejemplo_conteo), uno sin suscripción (-3) y uno con un plan que no tiene ejemplo_conteo (-4), para ejercitar las dos causas de «sin cobro al cliente» sin tocar nada real. Cada evento recibe su resultado como si fuera real, pero nada se guarda ni se cobra, y no aparece en tu vista de eventos; reenviar el mismo evento_id responde duplicado. Un SaaS, una métrica o un cliente reales reciben en prueba el mismo rechazo que uno inexistente — la credencial de prueba nunca ve ni toca tus datos reales.

El tope de prueba es 1.000 eventos por hora por reseller y por SaaS de ejemplo, aparte del tope de producción.

Cada evento del lote recibe uno de tres resultados:

  • aceptado — se registró. Si tu cliente tiene suscripción y su plan tiene la métrica, el evento se cobra en esa suscripción; si no, el evento viene con sin_cobro_al_cliente y su causa — ver «Sin cobro al cliente».
  • duplicado — ya se había aceptado un evento con el mismo evento_id de ese reseller. No vuelve a sumar ni a cobrar.
  • rechazado — no se registró, con un motivo:
MotivoCuándo
SAAS_EXTERNO_NO_VALIDOEl código de saas no existe, está archivado, o es de otro reseller
METRICA_INEXISTENTEEl código de metrica no existe
METRICA_ARCHIVADALa métrica existe pero está archivada
METRICA_DE_OTRO_SAASLa métrica es de un SaaS tuyo distinto del declarado en saas
CLIENTE_NO_ES_DEL_RESELLEREl cliente no es tuyo (es de otro reseller, o no existe)
CAMPO_INVALIDOUn campo no cumple su formato; viene con campo nombrando cuál
CAMPO_NO_ADMITIDOUn campo que esa forma no usa; viene con campo nombrando cuál
FECHA_FUTURAocurrido_en más de 5 minutos en el futuro
FECHA_FUERA_DE_PLAZOocurrido_en hace más de 13 meses
RESELLER_SUSPENDIDOTu cuenta de reseller está suspendida
RESELLER_SIN_SUSCRIPCIONTu cuenta de reseller no tiene suscripción mayorista
LIMITE_EXCEDIDOSuperaste el tope de eventos por hora — ver abajo

Todo rechazo se guarda 13 meses con su motivo y aparece en tu vista de eventos, salvo SAAS_EXTERNO_NO_VALIDO y LIMITE_EXCEDIDO: esos dos no se guardan, sólo cuentan en sus propios contadores (ver El tope de eventos), porque no identifican un recurso tuyo real sobre el cual guardar algo.

Cada evento del lote —aceptado, duplicado o rechazado, sin excepción— cuenta contra el tope de 20.000 eventos por hora por SaaS externo, por hora del reloj de America/Santiago. El reseller tiene además un techo de 100.000 eventos por hora en total, sumando todos sus SaaS. Un evento rechazado con SAAS_EXTERNO_NO_VALIDO no identifica un SaaS tuyo, así que no cuenta contra ninguno de los dos: tiene su propio tope de 20.000 por hora por reseller.

Superar el tope de un SaaS o el techo del reseller responde, para ese evento, rechazado con motivo LIMITE_EXCEDIDO; ese rechazo tampoco se guarda y sólo suma al contador de ese tope — aunque ningún SaaS individual haya llegado al suyo. Si el contador no se puede verificar en ese momento, el lote completo responde 503 TOPE_NO_VERIFICABLE y no se guarda nada; reintenta tras el Retry-After.

Tu vista de eventos trae un contador por tipo de rechazo por tope (tope-saas, techo-reseller, saas-invalido), por hora y por SaaS, en GET /{tenantSlug}/reseller/eventos/contadores.

El cobro de un evento aceptado va al período en que REDCUMBRE lo recibió, no al período de ocurrido_en. Si tu sistema reporta hoy, con cinco días de atraso, un evento ocurrido la semana pasada —dentro de los 13 meses de plazo—, ese evento se cobra en el período de hoy, no en el de la semana pasada. Repórtalos lo más cerca posible del momento en que ocurren si quieres que el cobro refleje el período real.

Un evento aceptado siempre se le cobra a ti como reseller, sea o no sea cobrable a tu cliente. Cuando tu cliente no paga ese consumo, el resultado trae sin_cobro_al_cliente con una de dos causas:

  • sin-suscripcion — el cliente no tiene una suscripción adicional activa con ese SaaS.
  • plan-sin-metrica — el cliente tiene suscripción, pero el plan no incluye esa métrica.

En ningún caso ese evento se le cobra después a tu cliente, aunque contrate la suscripción o cambie de plan más tarde en el mismo período — salvo el alta de un identificador recurrente: si lo reportas antes de que el cliente contrate, o con una métrica que su plan todavía no tenía, empieza a contar desde que la suscripción parte o rige el plan que la incluye.

rCAPI nunca rechaza un evento por cupo: todo lo que reportas se acepta y se cobra igual, también lo que pasa el cupo incluido en el plan, al precio de adicional. Quien decide si corta el servicio eres tú, en tu propio SaaS, según «Al llegar al cupo» —seguir-cobrando o cortar— que configuraste para el plan o para la suscripción del cliente (editable en el panel, PUT /{tenantSlug}/reseller/tenants/{tenantId}/suscripciones-adicionales/{id}/al-llegar-al-cupo; cambiar el del plan no afecta a las suscripciones que ya existen).

Para saber si debes cortar, antes de prestar el servicio consulta el cupo del cliente — ver Consultar el cupo de un cliente. Además, al cruzar el 80 % y el 100 % del cupo de cada métrica recibes un aviso — ver Avisos del estado de tus clientes.

Tu sistema puede recibir un aviso firmado cada vez que cambia el estado de un cliente, su suscripción adicional o su cupo. Está explicado en Recibir avisos del estado de tus clientes.

El detalle de cada operación —sus campos, sus respuestas y la credencial mínima que exige— está en Swagger. Las credenciales en sí —crear, listar, renombrar, revocar— tienen su propia sección: Reseller · Credenciales en el panel, y Reseller · Credenciales (CLI) desde la terminal.