Recibir e-CF
Recibir también es una obligación. Cuando un proveedor te emite un e-CF, tienes que acusar recibo y después decidir si lo apruebas o lo rechazas comercialmente. FiscalFlow hace lo primero solo; lo segundo es tuyo.
Como llegan los documentos
FiscalFlow funciona como tu endpoint de recepción ante la DGII: las URLs publicadas en el directorio de la DGII para tu RNC apuntan a esta plataforma. Un proveedor consulta el directorio, encuentra esas URLs y te transmite el e-CF directamente. Tu no expones nada.
Al recibir un documento, FiscalFlow genera y firma el ARECF (acuse de recibo) automáticamente y lo devuelve al emisor. Esto ocurre sin que hagas nada y no es configurable: es la respuesta que la DGII exige dentro de la ventana de tiempo del acuse.
Para ver qué URLs tiene publicadas un RNC, incluido el tuyo:
/api/v1/directory/{rnc}
curl https://api.fiscalflowsupport.com/api/v1/directory/101000000 \
-H "X-API-Key: ffs_live_ejemplodeclavenoreal000000000000000000"
{
"success": true,
"data": {
"rnc": "101000000",
"name": "MI EMPRESA SRL",
"enabled": true,
"urls": {
"reception": "https://api.fiscalflowsupport.com/api/v1/mi-empresa/fe/recepcion/api/ecf",
"acknowledgment": "https://api.fiscalflowsupport.com/api/v1/mi-empresa/fe/acuserecibo/api/ecf",
"commercial_approval": "https://api.fiscalflowsupport.com/api/v1/mi-empresa/fe/aprobacioncomercial/api/ecf"
}
}
}
Un RNC que no está en el directorio devuelve 200 con enabled: false y
urls: null: sirve para comprobar, antes de emitirle, si un cliente ya está en
facturación electrónica.
X-API-Key, agrégala. Si tu empresa todavía no tiene certificado cargado, la
respuesta es 503.
El buzón
curl -H "X-API-Key: ffs_live_ejemplodeclavenoreal000000000000000000" \
https://api.fiscalflowsupport.com/api/v1/inbox
{
"success": true,
"data": {
"current_page": 1,
"per_page": 25,
"total": 84,
"data": [
{
"uuid": "3b8e1f52-9c4d-4a6b-8f10-2d7e5c9a1b34",
"environment": "ecf",
"encf": "E310000000915",
"rnc_emisor": "130000001",
"rnc_comprador": "101000000",
"tipo_ecf": "31",
"monto_total": "23600.00",
"issue_date": "2026-08-13",
"status": 0,
"approval_status": null,
"received_at": "2026-08-13T18:44:02+00:00",
"file_name": "130000001E310000000915.xml",
"xml_content": "<?xml versión=\"1.0\"?>..."
}
]
}
}
data, así que los
documentos están en data.data, no en data. Es distinto del listado de
emisión, que devuelve un arreglo plano con meta. Y cada elemento incluye el
xml_content completo: una página de 25 documentos pesa varios megabytes. Si solo
quieres los encabezados, quedate con los campos que necesites y descarta el resto del lado del cliente.
El buzón abarca todas las empresas de tu organización, no solo la de tu key.
Filtra por rnc_comprador si administras varios RNC. No admite parámetros de consulta:
la paginación es lo único que controlas, con ?page=.
GET /api/v1/inbox/{uuid} devuelve un documento con su acuse y, si ya la hubo, su
aprobación comercial.
status es el estado del acuse, no del documento: 0 significa e-CF
recibido y 1, e-CF no recibido. La decisión comercial va aparte, en
approval_status.
Aprobación comercial
El ACECF es un paso distinto del acuse: el acuse dice "lo recibi", la aprobación comercial dice "estoy de acuerdo con lo que dice". Se envía al emisor con tu certificado digital, así que la empresa receptora necesita tener uno cargado.
curl -X POST \
-H "X-API-Key: ffs_live_ejemplodeclavenoreal000000000000000000" \
https://api.fiscalflowsupport.com/api/v1/inbox/3b8e1f52-9c4d-4a6b-8f10-2d7e5c9a1b34/approve
{
"success": true,
"message": "e-CF approved commercially.",
"data": {
"encf": "E310000000915",
"status": 1,
"file_name": "101000000E310000000915.xml",
"commercial_approval_at": "2026-08-14T09:30:12+00:00",
"approval_source": "manual"
}
}
Rechazar lleva el mismo camino, con un motivo opcional de hasta 500 caracteres:
curl -X POST \
-H "X-API-Key: ffs_live_ejemplodeclavenoreal000000000000000000" \
-H "Content-Type: application/json" \
-d '{"reason": "Cantidades no coinciden con la orden de compra 4471"}' \
https://api.fiscalflowsupport.com/api/v1/inbox/3b8e1f52-9c4d-4a6b-8f10-2d7e5c9a1b34/reject
Tras cualquiera de las dos, el approval_status del documento en el buzón queda en
approved o rejected. Es una decisión de una sola vez.
Company not found for this reception.. Un fallo al firmar o al transmitir
devuelve 500 con Failed to approve: y el detalle. Ninguna de las dos respuestas usa
el sobre de error.code del resto de la API.
Enterarte de que llegó algo
En vez de sondear el buzón, suscríbete al webhook document.reception.received. Se
dispara en cuanto un e-CF entra:
{
"event": "document.reception.received",
"company_id": 12,
"encf": "E310000000915",
"rnc_emisor": "130000001",
"tipo_ecf": "31",
"monto_total": 23600.00,
"timestamp": "2026-08-13T18:44:02+00:00"
}
Y document.approval.created te avisa cuando se registra una aprobación comercial.
Ver Webhooks.