#Billing
Clarisfy cobra por asiento de RFC: cada Fiscal Entity con la conexión activa ocupa un asiento de tu plan y se sincroniza con el SAT. Estos endpoints gestionan esa facturación por RFC.
#Prueba gratuita
Toda organización nueva recibe una prueba por única ocasión:
| Duración | 7 días naturales |
| Alcance | 1 RFC |
| Inicia | Al conectar el primer RFC con CIEC válida — no al crear la cuenta |
Durante la prueba, conectar un segundo RFC responde 402. No es un error transitorio: no lo reintentes, activa un plan.
{ "detail": "tu prueba gratuita cubre 1 RFC y ya tienes 1 conectado. Activa un plan para conectar más RFCs." }trial_days_remaining en Uso del plan es la fuente de verdad del tiempo restante; llega en 0 cuando la prueba terminó o nunca se redimió.
#Suspensión por falta de pago
Cada factura vence el día en que se emite. Si no se paga dentro de los 3 días naturales siguientes, la organización se suspende automáticamente:
- Sus conexiones pasan a
connection_status = "suspended". - Las descargas del SAT se detienen.
- Los endpoints que dependen de un RFC responden
402.
Mientras el adeudo siga vencido, las operaciones que reanudan, amplían o reducen el servicio responden 402:
| Operación | Endpoint |
|---|---|
| Reactivar un RFC pausado | PATCH /billing/rfcs/{id} con active: true |
| Conectar un RFC nuevo con CIEC | POST /fiscal-entities |
| Desvincular un RFC conectado | DELETE /fiscal-entities/{id} |
| Configurar un destino de exportación | POST /storage-connectors |
| Reanudar un destino pausado | PATCH /storage-connectors/{id} con connector_status: "active" |
| Copiar el histórico a tu almacenamiento | POST /storage-connectors/{id}/backfill |
Desvincular se bloquea porque sería la forma de dejar de deber lo ya devengado. No cancela el adeudo: se sigue debiendo igual.
El histórico se bloquea porque entregar los datos es un acto distinto de consultarlos: durante la suspensión Clarisfy no los entrega en bloque hacia tu infraestructura. El backfill responde 402, no un 200 con queued: 0 — eso se leería como "no hay nada que copiar" en lugar de "tienes una factura vencida".
Lo que no se bloquea: pausar un RFC (active: false), dar de alta un RFC en borrador —sin CIEC, no genera cobro—, leer por API todo lo ya descargado, y pausar, renombrar, retirar o probar un destino de exportación (la prueba no copia nada, así que puedes arreglar credenciales mientras resuelves el pago). Terminar el contrato y ejercer derechos ARCO tampoco dependen del pago; van por los canales de los Términos y condiciones.
Al liquidar el adeudo, las conexiones se reactivan y Clarisfy recupera la información fiscal del periodo pausado. La reactivación no pide capturar la CIEC de nuevo: una suspensión por pago nunca marca la credencial como inválida, así que ciec_status no cambia.
#Uso del plan
/billing/plan-usageDevuelve la identidad de tu plan y la ocupación de asientos RFC de tu organización (sin montos). Un asiento usado es un RFC con la conexión activa.
#Ejemplo
curl https://api.clarisfy.com/v1/billing/plan-usage \
-H "Authorization: Bearer clf_live_secret_9K3mZ1pQ7rTx8vB4nH6dLwYe"{
"plan_code": "ent_bronze",
"plan_name": "Enterprise Bronce",
"api_access": true,
"has_fixed_quota": true,
"seats_contracted": 50,
"seats_used": 52,
"seats_available": 0,
"overage": 2,
"subscription_status": "active",
"trial_started": true,
"trial_days_remaining": 0,
"trial_ends_at": null
}| Campo | Tipo | Descripción |
|---|---|---|
plan_code | string | Clave del plan (p. ej. ent_bronze). |
plan_name | string | Nombre del plan. |
api_access | boolean | true si el plan otorga acceso a la API. |
has_fixed_quota | boolean | true si hay cuota contratada (>0); false = pago por uso. |
seats_contracted | integer | Asientos RFC contratados. |
seats_used | integer | Asientos RFC ocupados (RFCs activos). |
seats_available | integer | Asientos libres. |
overage | integer | Excedente: RFCs usados por encima de la cuota. |
subscription_status | string | trialing, active, past_due, cancelled o expired. |
trial_started | boolean | true si la prueba única ya se redimió (con el primer RFC activo). |
trial_days_remaining | integer | Días enteros restantes de la prueba (0 fuera de prueba). |
trial_ends_at | string | null | Fin de la ventana de prueba (ISO 8601), o null. |
#Activa o suspende un RFC
/billing/rfcs/{fiscal_entity_id}Activa o suspende la conexión de tu organización a un RFC:
active: true→ la conexión pasa aactivey se sincroniza con el SAT (ocupa un asiento).active: false→ la conexión pasa asuspended: se detienen las sincronizaciones futuras. Si el RFC ya sincronizó este mes, sigue contando para el cobro de este mes.
#Parámetros de ruta
| Parámetro | Tipo | Descripción |
|---|---|---|
fiscal_entity_id | string | Identificador de la FiscalEntity (fe_…). También se acepta el UUID crudo. |
#Cuerpo de la petición
| Campo | Tipo | Descripción |
|---|---|---|
active | boolean | Requerido. true activa (sincroniza), false suspende. |
#Ejemplo
curl -X PATCH https://api.clarisfy.com/v1/billing/rfcs/fe_9a1c2b3d4e5f6071 \
-H "Authorization: Bearer clf_live_secret_9K3mZ1pQ7rTx8vB4nH6dLwYe" \
-H "Content-Type: application/json" \
-d '{"active": false}'Respuesta 200 OK — la fila de facturación del RFC actualizada:
{
"fiscal_entity_id": "6f0f1d3e-2b3c-4d5e-8f90-1a2b3c4d5e6f",
"rfc": "VECJ880326XYZ",
"name": "Mi empresa",
"active": false,
"billable_this_month": true
}| Campo | Tipo | Descripción |
|---|---|---|
fiscal_entity_id | string | Identificador de la FiscalEntity. |
rfc | string | RFC del contribuyente. |
name | string | Nombre a mostrar: apodo, razón social o el RFC. |
active | boolean | true = conexión activa (sincroniza); false = suspendida. |
billable_this_month | boolean | true si el RFC tuvo al menos una sincronización exitosa este mes. |
#Errores
| Código HTTP | Causa |
|---|---|
400 | fiscal_entity_id con formato inválido. |
402 | Dos causas distintas, ver abajo: un asiento excedido, o una factura vencida. |
404 | Tu organización no tiene una conexión (no eliminada) a esa FiscalEntity. |
#Los dos 402
Ambos sólo ocurren con active: true; suspender nunca se bloquea. Distínguelos por el campo checkout_url: si viene, es un asiento por pagar; si no, es un adeudo vencido.
Asiento excedido — activar el RFC pasa de los asientos contratados de tu plan. Trae un link de pago por SPEI para el asiento adicional; el RFC no se activa hasta que la transferencia se confirma.
{
"status": "payment_required",
"message": "Alcanzaste el límite de RFC de tu plan. Paga el asiento adicional para activar este RFC.",
"checkout_url": "https://pay.conekta.io/checkout/..."
}Factura vencida — tu organización tiene una factura abierta que pasó los 3 días naturales de gracia, así que el servicio está suspendido por falta de pago y no se puede reanudar con esta llamada. El mensaje trae el monto y la fecha de vencimiento. No lo reintentes: liquida la factura y las conexiones se reactivan solas.
{
"detail": "Tu organización tiene una factura vencida de $510.40 MXN que venció el 15 ago 2026. Págala para reactivar la sincronización."
}