#Hechos financieros

El modelo de hechos financieros convierte los CFDIs de una Fiscal Entity en una serie de devengo por periodo de efecto (period-of-effect), distinta de los rollups de facturas vigentes: una factura I/E se cuenta en su mes de emisión aunque después se cancele (accrual), y una cancelación que cruza de mes genera una reversa (reversal) negativa en el mes en que ocurrió.

#Resumen por periodo con reversas

GET/cfdi/financial-facts

Devuelve los hechos financieros del RFC en un rango de periodos YYYY-MM:

  • accrual (devengo): toda factura I/E emitida en el periodo, incluidas las que después se cancelaron — congela la serie como se declaró. origin_period == period, monto positivo.
  • reversal (reversa): factura I/E cancelada en el periodo cuyo mes de emisión fue anterior (cancelación cruza-periodo). Monto negativo, con origin_period = el mes de emisión reversado. Las cancelaciones intra-periodo netean solas contra su devengo y no generan reversa.

net_by_period agrega el neto de cada periodo (Σ devengos + Σ reversas). Alcance: tipo I/E (excluye P/N/T), ambas direcciones, bucketing en America/Mexico_City.

Parámetro (query)TipoDescripción
fiscalEntityIdstringRequerido. Identificador de la Fiscal Entity (fe_…).
fromstringRequerido. Periodo inicial inclusivo, YYYY-MM.
tostringRequerido. Periodo final inclusivo, YYYY-MM. Rango ≤24 meses.
cURL
curl "https://api.clarisfy.com/api/v1/cfdi/financial-facts?fiscalEntityId=fe_9a1c2b3d4e5f6071&from=2026-01&to=2026-06" \
  -H "Authorization: Bearer clf_live_secret_9K3mZ1pQ7rTx8vB4nH6dLwYe"
JSON
{
  "items": [
    {
      "period": "2026-01",
      "fact_type": "accrual",
      "origin_period": "2026-01",
      "direction": "emitida",
      "cfdi_type": "I",
      "invoice_count": 2,
      "total_amount": "100000.00"
    },
    {
      "period": "2026-03",
      "fact_type": "reversal",
      "origin_period": "2026-01",
      "direction": "emitida",
      "cfdi_type": "I",
      "invoice_count": 1,
      "total_amount": "-100000.00"
    }
  ],
  "net_by_period": [
    { "period": "2026-01", "accrual_total": "100000.00", "reversal_total": "0", "net": "100000.00" },
    { "period": "2026-03", "accrual_total": "0", "reversal_total": "-100000.00", "net": "-100000.00" }
  ]
}
CampoTipoDescripción
items[].periodstringPeriodo de efecto YYYY-MM.
items[].fact_typestringaccrual o reversal.
items[].origin_periodstringPeriodo de devengo. Para accrual == period; para reversal, el mes de emisión reversado.
items[].directionstringemitida o recibida.
items[].cfdi_typestringI o E.
items[].invoice_countintegerCFDIs agregados en la fila.
items[].total_amountstringNUMERIC firmado como string: accrual positivo, reversal negativo.
net_by_period[].periodstringPeriodo YYYY-MM.
net_by_period[].accrual_totalstringΣ devengos del periodo.
net_by_period[].reversal_totalstringΣ reversas del periodo (≤0).
net_by_period[].netstringaccrual_total + reversal_total — el neto del periodo.

#Errores

Código HTTPCausa
400fiscalEntityId inválido, to anterior a from, o rango mayor a 24 meses.
404Tu organización no tiene una conexión activa a esa Fiscal Entity.

#Drill-down: CFDIs detrás de un devengo/reversa

GET/cfdi/financial-facts/items

Lista los CFDIs individuales detrás de una fila de /cfdi/financial-facts, con el mismo criterio exacto (drill-down al detalle por factura):

  • factType=accrual: facturas emitidas en el rango (por issued_at), incluidas las canceladas después.
  • factType=reversal: facturas canceladas en el rango (por cancelled_at) cuyo mes de emisión fue anterior al de cancelación (cruza-periodo).

Paginación por cursor, igual que /cfdi/invoices. from/to aquí son fechas, no periodos.

Parámetro (query)TipoDescripción
fiscalEntityIdstringRequerido. Identificador de la Fiscal Entity (fe_…).
factTypestringRequerido. accrual o reversal.
cfdiTypestringRequerido. I o E.
directionstringOpcional. emitida o recibida.
fromstringRequerido. Fecha inicial inclusiva (ISO 8601).
tostringRequerido. Fecha final exclusiva (ISO 8601). Rango ≤24 meses.
cursorstringCursor opaco de la página anterior.
pageSizeintegerFilas por página (1–200, por defecto 50).
cURL
curl "https://api.clarisfy.com/api/v1/cfdi/financial-facts/items?fiscalEntityId=fe_9a1c2b3d4e5f6071&factType=reversal&cfdiType=I&from=2026-01-01T00:00:00Z&to=2026-06-30T23:59:59Z" \
  -H "Authorization: Bearer clf_live_secret_9K3mZ1pQ7rTx8vB4nH6dLwYe"
JSON
{
  "items": [
    {
      "cfdi_uuid": "12345678-1234-1234-1234-123456789abc",
      "issued_at": "2026-01-15T10:30:00+00:00",
      "cancelled_at": "2026-03-04T09:00:00+00:00",
      "folio": "00042",
      "direction": "emitida",
      "counterparty_rfc": "ACME920101AA1",
      "counterparty_name": "Cliente A SA",
      "total": "100000.00"
    }
  ],
  "next_cursor": null
}
CampoTipoDescripción
items[].cfdi_uuidstringFolio fiscal (UUID) del CFDI.
items[].issued_atstringFecha de emisión (ISO 8601).
items[].cancelled_atstring | nullFecha de cancelación, si aplica.
items[].foliostring | nullFolio del CFDI.
items[].directionstringemitida o recibida.
items[].counterparty_rfcstringReceptor si direction es emitida, emisor si es recibida.
items[].counterparty_namestring | nullNombre de la contraparte.
items[].totalstringNUMERIC como string.
next_cursorstring | nullCursor para la siguiente página; null si no hay más.

#Errores

Código HTTPCausa
400fiscalEntityId/cursor inválido, o rango mayor a 24 meses.
404Tu organización no tiene una conexión activa a esa Fiscal Entity.

#Exportación CSV del detalle

GET/cfdi/financial-facts/export

Descarga el detalle por factura del reporte de hechos financieros en CSV, listo para Excel/Sheets/ERP. Usa el mismo predicado que /cfdi/financial-facts/items (misma tz America/Mexico_City, misma exclusión intra-periodo), pero sin paginación y sin los filtros factType/cfdiType/direction: trae todo el rango — devengo y reversa, ambos tipos I/E, ambas direcciones. Una misma factura puede aparecer dos veces (devengo en su mes de emisión y reversa en su mes de cancelación) si ambos caen en el rango.

Parámetro (query)TipoDescripción
fiscalEntityIdstringRequerido. Identificador de la Fiscal Entity (fe_…).
fromstringRequerido. Periodo inicial inclusivo, YYYY-MM.
tostringRequerido. Periodo final inclusivo, YYYY-MM. Rango ≤24 meses.
cURL
curl "https://api.clarisfy.com/api/v1/cfdi/financial-facts/export?fiscalEntityId=fe_9a1c2b3d4e5f6071&from=2026-01&to=2026-06" \
  -H "Authorization: Bearer clf_live_secret_9K3mZ1pQ7rTx8vB4nH6dLwYe" \
  -o reporte-financiero.csv

La respuesta no es JSON: es un archivo text/csv en streaming con Content-Disposition: attachment; filename="reporte-financiero_{rfc}_{from}_{to}.csv". Columnas, en orden:

ColumnaDescripción
periodo_efectoPeriodo YYYY-MM del hecho.
tipo_hechodevengo o reversa.
periodo_origenMes de devengo (== periodo_efecto en devengo; mes de emisión reversado en reversa).
direccionemitida o recibida.
tipo_cfdiI o E.
uuidFolio fiscal del CFDI.
folioFolio del CFDI (vacío si no aplica).
fecha_emisionFecha de emisión (ISO 8601).
fecha_cancelacionFecha de cancelación, vacío si vigente.
contraparte_rfcRFC de la contraparte.
contraparte_nombreNombre de la contraparte (vacío si no se conoce).
totalMonto firmado: positivo en devengo, negativo en reversa.

#Errores

Código HTTPCausa
400fiscalEntityId inválido, to anterior a from, o rango mayor a 24 meses.
404Tu organización no tiene una conexión activa a esa Fiscal Entity.

#Exportación del reporte financiero anual (esquema interno)

GET/cfdi/xbrl/financial-report/export

Serializa los hechos financieros de un ejercicio fiscal completo a un archivo XML en un esquema interno (experimental): contextos por periodo y contexto anual (1-ene a 31-dic), cada uno con el RFC del contribuyente, la unidad en pesos (MXN) y los montos anuales netos (devengo − reversa): ingresos (neto de emitidas tipo I) y costos (neto de recibidas tipo I/E).

Parámetro (query)TipoDescripción
fiscalEntityIdstringRequerido. Identificador de la Fiscal Entity (fe_…).
yearintegerRequerido. Ejercicio fiscal a exportar (2000–2100).
cURL
curl "https://api.clarisfy.com/api/v1/cfdi/xbrl/financial-report/export?fiscalEntityId=fe_9a1c2b3d4e5f6071&year=2026" \
  -H "Authorization: Bearer clf_live_secret_9K3mZ1pQ7rTx8vB4nH6dLwYe" \
  -o reporte.xml

La respuesta no es JSON: es un archivo application/xml (adjunto), listo para revisión — no para presentación directa.

#Errores

Código HTTPCausa
400fiscalEntityId inválido.
404Tu organización no tiene una conexión activa a esa Fiscal Entity.