#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ón7 días naturales
Alcance1 RFC
IniciaAl 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.

JSON
{ "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ónEndpoint
Reactivar un RFC pausadoPATCH /billing/rfcs/{id} con active: true
Conectar un RFC nuevo con CIECPOST /fiscal-entities
Desvincular un RFC conectadoDELETE /fiscal-entities/{id}
Configurar un destino de exportaciónPOST /storage-connectors
Reanudar un destino pausadoPATCH /storage-connectors/{id} con connector_status: "active"
Copiar el histórico a tu almacenamientoPOST /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

GET/billing/plan-usage

Devuelve 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
curl https://api.clarisfy.com/v1/billing/plan-usage \
  -H "Authorization: Bearer clf_live_secret_9K3mZ1pQ7rTx8vB4nH6dLwYe"
JSON
{
  "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
}
CampoTipoDescripción
plan_codestringClave del plan (p. ej. ent_bronze).
plan_namestringNombre del plan.
api_accessbooleantrue si el plan otorga acceso a la API.
has_fixed_quotabooleantrue si hay cuota contratada (>0); false = pago por uso.
seats_contractedintegerAsientos RFC contratados.
seats_usedintegerAsientos RFC ocupados (RFCs activos).
seats_availableintegerAsientos libres.
overageintegerExcedente: RFCs usados por encima de la cuota.
subscription_statusstringtrialing, active, past_due, cancelled o expired.
trial_startedbooleantrue si la prueba única ya se redimió (con el primer RFC activo).
trial_days_remainingintegerDías enteros restantes de la prueba (0 fuera de prueba).
trial_ends_atstring | nullFin de la ventana de prueba (ISO 8601), o null.

#Activa o suspende un RFC

PATCH/billing/rfcs/{fiscal_entity_id}

Activa o suspende la conexión de tu organización a un RFC:

  • active: true → la conexión pasa a active y se sincroniza con el SAT (ocupa un asiento).
  • active: false → la conexión pasa a suspended: 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ámetroTipoDescripción
fiscal_entity_idstringIdentificador de la FiscalEntity (fe_…). También se acepta el UUID crudo.

#Cuerpo de la petición

CampoTipoDescripción
activebooleanRequerido. true activa (sincroniza), false suspende.

#Ejemplo

cURL
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:

JSON
{
  "fiscal_entity_id": "6f0f1d3e-2b3c-4d5e-8f90-1a2b3c4d5e6f",
  "rfc": "VECJ880326XYZ",
  "name": "Mi empresa",
  "active": false,
  "billable_this_month": true
}
CampoTipoDescripción
fiscal_entity_idstringIdentificador de la FiscalEntity.
rfcstringRFC del contribuyente.
namestringNombre a mostrar: apodo, razón social o el RFC.
activebooleantrue = conexión activa (sincroniza); false = suspendida.
billable_this_monthbooleantrue si el RFC tuvo al menos una sincronización exitosa este mes.

#Errores

Código HTTPCausa
400fiscal_entity_id con formato inválido.
402Dos causas distintas, ver abajo: un asiento excedido, o una factura vencida.
404Tu 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.

JSON
{
  "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.

JSON
{
  "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."
}