Exac para desarrolladores
Infraestructura mexicana de facturación y CFDI para desarrolladores y agentes de IA
Emite facturas, automatiza la descarga masiva de CFDI del SAT y ejecuta flujos de negocio en México mediante REST o MCP con un contrato por organización.
Producción y entorno de prueba
Inicio rápido
Haz tu primera solicitud autenticada
Comienza con una organización de prueba aislada y una API key de prueba.
- 1Abre la consola para desarrolladores
Abre /consola desde Exac, selecciona Prueba y entra a Claves API para tu workspace actual.
- 2Crea una API key de prueba
Crea una clave para Prueba y cópiala una sola vez. Exac prepara el entorno aislado automáticamente.
- 3Verifica la organización de prueba
Llama GET /v1/organization con la clave de prueba contra el servidor de prueba mostrado en OpenAPI.
- 4Ejecuta un flujo Test
Crea un contacto y un borrador CFDI; luego crea, consulta y cancela un timbrado de prueba. Los artefactos de sandbox no se envían al SAT y no tienen validez fiscal.
curl "https://grateful-squid-667.convex.site/v1/organization" \ --header "Authorization: Bearer <EXAC_API_KEY>"Primeros flujos de integración
Flujos canónicos
Usa la misma intención de dominio mediante REST o MCP. Estos ejemplos se validan contra los contratos de ejecución; reemplaza los identificadores y credenciales de ejemplo con valores de tu organización.
01Prueba el ciclo de un CFDI en sandboxCrea, timbra, descarga y cancela un CFDI de prueba sin validez fiscal usando únicamente operaciones REST de sandbox.
- 1
Verifica la organización
Confirma que la clave de sandbox resuelva a la organización aislada esperada.
REST · Producción y pruebaGET /v1/organizationGuía de reintentos: Esta lectura se puede repetir de forma segura.
- 2
Crea un cliente de prueba
Crea el cliente que usará el CFDI de prueba.
REST · Producción y pruebaPOST /v1/contactsGuía de reintentos: Reutiliza la misma clave solo para una solicitud idéntica.
- 3
Crea un borrador CFDI
Crea un borrador que puedas revisar antes del timbrado de prueba explícito.
REST · Producción y pruebaPOST /v1/cfdisGuía de reintentos: Reutiliza la misma clave solo para la carga idéntica del borrador.
- 4
Crea un timbrado de prueba
Sandbox crea un artefacto de prueba. No se envía al SAT y no tiene validez fiscal.
REST · Producción y pruebaPOST /v1/cfdis/cfdi:invoice-example/stampGuía de reintentos: Reintenta solo con la misma clave y documentRef.
- 5
Descarga el PDF de prueba
Descarga el documento de prueba generado desde el servidor de sandbox.
REST · Producción y pruebaGET /v1/documents/cfdi:invoice-example/files/pdfGuía de reintentos: Esta lectura de archivo se puede repetir de forma segura.
- 6
Cancela el CFDI de prueba
Ejercita la transición de cancelación contra datos de prueba aislados.
REST · Producción y pruebaPOST /v1/cfdis/cfdi:invoice-example/cancelGuía de reintentos: Reutiliza la misma clave solo para la misma solicitud de cancelación.
{ "steps": [ { "id": "verify-sandbox-organization", "rest": { "operationId": "getOrganization", "method": "GET", "path": "/v1/organization", "environments": [ "production", "sandbox" ] } }, { "id": "create-sandbox-contact", "rest": { "operationId": "createContact", "method": "POST", "path": "/v1/contacts", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "sandbox-create-contact" }, "body": { "kind": "customer", "legalName": "Estudio Jacaranda", "email": "administracion@jacaranda.example" } } }, { "id": "create-sandbox-cfdi", "rest": { "operationId": "createCfdiDraft", "method": "POST", "path": "/v1/cfdis", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "sandbox-create-cfdi" }, "body": { "customerId": "customer-example", "items": [ { "kind": "custom", "description": "Consultoría administrativa · julio 2026", "quantity": 1, "unitPrice": 10000, "satProductCode": "84111506", "satUnitCode": "E48", "taxRate": 0.16, "taxability": "standard" } ], "kind": "income", "cfdiUse": "G03", "payment": { "timing": "deferred_or_installments", "formCode": "99", "conditions": "Crédito a 30 días" } } } }, { "id": "stamp-sandbox-cfdi", "rest": { "operationId": "stampCfdi", "method": "POST", "path": "/v1/cfdis/cfdi:invoice-example/stamp", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "sandbox-stamp-cfdi" }, "body": {} } }, { "id": "download-sandbox-pdf", "rest": { "operationId": "downloadDocumentFile", "method": "GET", "path": "/v1/documents/cfdi:invoice-example/files/pdf", "environments": [ "production", "sandbox" ] } }, { "id": "cancel-sandbox-cfdi", "rest": { "operationId": "cancelCfdi", "method": "POST", "path": "/v1/cfdis/cfdi:invoice-example/cancel", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "sandbox-cancel-cfdi" }, "body": { "reason": "02" } } } ]}02Configurar acceso fiscalConfigura la identidad fiscal, carga el CSD y verifica la disponibilidad antes de crear CFDI.
- 1
Configura la identidad fiscal
Actualiza una sección de configuración de la organización a la vez.
REST · Solo producciónPATCH /v1/organizationMCP · Solo producciónupdate_organizationGuía de reintentos: Reutiliza el mismo Idempotency-Key únicamente para la misma carga de sección.
- 2
Carga el par CSD
Carga el certificado y la clave privada en base64; el material secreto nunca se devuelve.
REST · Solo producciónPUT /v1/organization/certificates/csdGuía de reintentos: Reintenta con la misma clave y la carga de certificado sin cambios.
- 3
Verifica la disponibilidad
Lee la proyección de la organización y confirma la disponibilidad fiscal antes de emitir.
REST · Producción y pruebaGET /v1/organizationMCP · Solo producciónget_organizationGuía de reintentos: Las lecturas se pueden repetir; no agregues un idempotency key.
{ "steps": [ { "id": "update-fiscal-settings", "rest": { "operationId": "updateOrganization", "method": "PATCH", "path": "/v1/organization", "environments": [ "production" ], "headers": { "Idempotency-Key": "workflow-fiscal-settings" }, "body": { "section": "fiscal", "legalName": "Empresa Ejemplo SA de CV", "rfc": "XAXX010101000", "taxSystem": "601", "address": { "postalCode": "82110" } } }, "mcp": { "tool": "update_organization", "arguments": { "idempotencyKey": "workflow-fiscal-settings", "input": { "section": "fiscal", "legalName": "Empresa Ejemplo SA de CV", "rfc": "XAXX010101000", "taxSystem": "601", "address": { "postalCode": "82110" } } }, "environments": [ "production" ] } }, { "id": "upload-csd", "rest": { "operationId": "uploadCertificate", "method": "PUT", "path": "/v1/organization/certificates/csd", "environments": [ "production" ], "headers": { "Idempotency-Key": "workflow-upload-csd" }, "body": { "certificateBase64": "BASE64_CER", "privateKeyBase64": "BASE64_KEY", "password": "certificate-password", "certificateFileName": "certificate.cer", "privateKeyFileName": "private.key" } } }, { "id": "verify-organization", "rest": { "operationId": "getOrganization", "method": "GET", "path": "/v1/organization", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_organization", "arguments": {}, "environments": [ "production" ] } } ]}03Emitir y enviar un CFDI en producciónFlujo de producción: crea un borrador, revísalo, timbra explícitamente ante el SAT y después envía el documento.
- 1
Crea el borrador
La creación solo produce un borrador. No timbra ni envía el CFDI; revisa el borrador devuelto antes de cualquier transición explícita.
REST · Producción y pruebaPOST /v1/cfdisMCP · Solo produccióncreate_cfdi_draftGuía de reintentos: Usa la misma clave para un reintento exacto; una carga modificada es una nueva solicitud.
- 2
Revisa el borrador
Usa el documentRef devuelto para revisar la proyección canónica del documento.
REST · Producción y pruebaGET /v1/cfdis/cfdi:invoice-exampleMCP · Solo producciónget_documentGuía de reintentos: Esta lectura se puede repetir y no lleva idempotency key.
- 3
Previsualiza el PDF del borrador (opcional)
Usa preview_pdf para revisar el documento renderizado antes de timbrar. La vista previa no tiene validez fiscal.
REST · Producción y pruebaGET /v1/documents/cfdi:invoice-example/files/preview_pdfMCP · Solo producciónget_document_fileGuía de reintentos: Esta lectura de archivo se puede repetir y no lleva idempotency key.
- 4
Timbra ante el SAT
El timbrado es una transición irreversible separada. Revisa primero el borrador.
REST · Producción y pruebaPOST /v1/cfdis/cfdi:invoice-example/stampMCP · Solo producciónstamp_cfdiGuía de reintentos: Reintenta únicamente con la misma clave y documentRef; las fallas del proveedor pueden requerir recuperación.
- 5
Envía el CFDI
Envía por correo el CFDI timbrado y sus archivos fiscales a un destinatario explícito.
REST · Solo producciónPOST /v1/documents/cfdi:invoice-example/sendMCP · Solo producciónsend_documentGuía de reintentos: Reutiliza la clave para el mismo destinatario y documento; el envío sigue siendo un efecto externo.
{ "steps": [ { "id": "create-cfdi-draft", "rest": { "operationId": "createCfdiDraft", "method": "POST", "path": "/v1/cfdis", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "workflow-create-cfdi" }, "body": { "customerId": "customer-example", "items": [ { "kind": "custom", "description": "Consultoría administrativa · julio 2026", "quantity": 1, "unitPrice": 10000, "satProductCode": "84111506", "satUnitCode": "E48", "taxRate": 0.16, "taxability": "standard" } ], "kind": "income", "cfdiUse": "G03", "payment": { "timing": "deferred_or_installments", "formCode": "99", "conditions": "Crédito a 30 días" } } }, "mcp": { "tool": "create_cfdi_draft", "arguments": { "idempotencyKey": "workflow-create-cfdi", "input": { "customerId": "customer-example", "items": [ { "kind": "custom", "description": "Consultoría administrativa · julio 2026", "quantity": 1, "unitPrice": 10000, "satProductCode": "84111506", "satUnitCode": "E48", "taxRate": 0.16, "taxability": "standard" } ], "kind": "income", "cfdiUse": "G03", "payment": { "timing": "deferred_or_installments", "formCode": "99", "conditions": "Crédito a 30 días" } } }, "environments": [ "production" ] } }, { "id": "inspect-cfdi-draft", "rest": { "operationId": "getCfdi", "method": "GET", "path": "/v1/cfdis/cfdi:invoice-example", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document", "arguments": { "documentRef": "cfdi:invoice-example" }, "environments": [ "production" ] } }, { "id": "preview-cfdi-draft-pdf", "rest": { "operationId": "downloadDocumentFile", "method": "GET", "path": "/v1/documents/cfdi:invoice-example/files/preview_pdf", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document_file", "arguments": { "documentRef": "cfdi:invoice-example", "file": "preview_pdf" }, "environments": [ "production" ] } }, { "id": "stamp-cfdi", "rest": { "operationId": "stampCfdi", "method": "POST", "path": "/v1/cfdis/cfdi:invoice-example/stamp", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "workflow-stamp-cfdi" }, "body": {} }, "mcp": { "tool": "stamp_cfdi", "arguments": { "documentRef": "cfdi:invoice-example", "idempotencyKey": "workflow-stamp-cfdi" }, "environments": [ "production" ] } }, { "id": "send-cfdi", "rest": { "operationId": "sendDocument", "method": "POST", "path": "/v1/documents/cfdi:invoice-example/send", "environments": [ "production" ], "headers": { "Idempotency-Key": "workflow-send-cfdi" }, "body": { "recipient": "administracion@jacaranda.example" } }, "mcp": { "tool": "send_document", "arguments": { "idempotencyKey": "workflow-send-cfdi", "input": { "documentRef": "cfdi:invoice-example", "recipient": "administracion@jacaranda.example" } }, "environments": [ "production" ] } } ]}04Crear un complemento de pagoRegistra uno o más pagos de una factura PPD. Exac distribuye los impuestos conocidos de la factura en cada pago parcial.
- 1
Revisa el CFDI relacionado
Usa taxes: "auto" cuando Exac tenga la factura timbrada. Para una factura externa desconocida, envía su taxObject SAT y los impuestos del pago; no se requiere importar XML.
REST · Producción y pruebaGET /v1/cfdis/cfdi:invoice-exampleMCP · Solo producciónget_documentGuía de reintentos: Esta lectura se puede repetir de forma segura.
- 2
Crea el borrador del complemento
En el primer pago usa installment 1 y el total de la factura como previousBalance. En pagos posteriores, incrementa installment y usa el saldo insoluto anterior. Exac resuelve los impuestos automáticos antes de crear el borrador.
REST · Producción y pruebaPOST /v1/cfdisMCP · Solo produccióncreate_cfdi_draftGuía de reintentos: Reutiliza la misma clave solo para el mismo pago.
- 3
Revisa antes de timbrar
Confirma saldos, parcialidad e impuestos del pago en la proyección canónica del borrador.
REST · Producción y pruebaGET /v1/cfdis/cfdi:payment-exampleMCP · Solo producciónget_documentGuía de reintentos: Esta lectura se puede repetir de forma segura.
- 4
Timbra el complemento
Timbra solo después de confirmar el UUID relacionado, la parcialidad, los saldos anterior, pagado e insoluto, y los impuestos proporcionales.
REST · Producción y pruebaPOST /v1/cfdis/cfdi:payment-example/stampMCP · Solo producciónstamp_cfdiGuía de reintentos: Reutiliza la misma clave solo para el mismo borrador revisado y fecha de emisión.
{ "steps": [ { "id": "inspect-related-cfdi", "rest": { "operationId": "getCfdi", "method": "GET", "path": "/v1/cfdis/cfdi:invoice-example", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document", "arguments": { "documentRef": "cfdi:invoice-example" }, "environments": [ "production" ] } }, { "id": "create-payment-complement-draft", "rest": { "operationId": "createCfdiDraft", "method": "POST", "path": "/v1/cfdis", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "workflow-create-payment-complement" }, "body": { "kind": "payment_complement", "customerId": "customer-example", "payment": { "formCode": "03", "paidLocalDateTime": "2026-07-15T12:00:00", "documents": [ { "uuid": "00000000-0000-4000-8000-000000000001", "amount": 11600, "installment": 1, "previousBalance": 11600, "taxes": "auto" } ] } } }, "mcp": { "tool": "create_cfdi_draft", "arguments": { "idempotencyKey": "workflow-create-payment-complement", "input": { "kind": "payment_complement", "customerId": "customer-example", "payment": { "formCode": "03", "paidLocalDateTime": "2026-07-15T12:00:00", "documents": [ { "uuid": "00000000-0000-4000-8000-000000000001", "amount": 11600, "installment": 1, "previousBalance": 11600, "taxes": "auto" } ] } } }, "environments": [ "production" ] } }, { "id": "inspect-payment-complement-draft", "rest": { "operationId": "getCfdi", "method": "GET", "path": "/v1/cfdis/cfdi:payment-example", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document", "arguments": { "documentRef": "cfdi:payment-example" }, "environments": [ "production" ] } }, { "id": "stamp-payment-complement", "rest": { "operationId": "stampCfdi", "method": "POST", "path": "/v1/cfdis/cfdi:payment-example/stamp", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "workflow-stamp-payment-complement" }, "body": {} }, "mcp": { "tool": "stamp_cfdi", "arguments": { "documentRef": "cfdi:payment-example", "idempotencyKey": "workflow-stamp-payment-complement" }, "environments": [ "production" ] } } ]}05Convertir recibos en CFDICrea un borrador de CFDI a partir de ventas seleccionadas de recibos. El timbrado permanece como una operación explícita separada.
- 1
Crea un recibo facturable
Usa invoiceRequested: true para conservar la identidad SAT y el tratamiento fiscal del producto al vender. Es opcional para recibos que nunca se facturarán.
REST · Producción y pruebaPOST /v1/sales-receiptsMCP · Solo produccióncreate_sales_receiptGuía de reintentos: Reutiliza la misma clave solo para la venta idéntica.
- 2
Convierte los recibos
La operación valida la propiedad y conciliación de los recibos y devuelve un borrador de CFDI. No timbra ni envía el CFDI.
REST · Producción y pruebaPOST /v1/cfdis/from-sales-receiptsMCP · Solo produccióncreate_cfdi_draft_from_sales_receiptsGuía de reintentos: Reintenta el mismo conjunto de recibos con la misma clave; nunca cambies el conjunto usando una clave existente.
- 3
Lee el CFDI resultante
Usa el documentRef de CFDI devuelto por la conversión para obtener el detalle canónico.
REST · Producción y pruebaGET /v1/cfdis/cfdi:invoice-exampleMCP · Solo producciónget_documentGuía de reintentos: Las lecturas se pueden repetir y no necesitan idempotency key.
{ "steps": [ { "id": "create-invoiceable-receipt", "rest": { "operationId": "createSalesReceipt", "method": "POST", "path": "/v1/sales-receipts", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "workflow-create-invoiceable-receipt" }, "body": { "saleType": "paid", "customer": { "kind": "stored", "customerId": "customer-example" }, "items": [ { "productId": "product-example", "description": "Servicio", "quantity": 1, "unitPrice": 1250 } ], "paymentForm": "03", "invoiceRequested": true } }, "mcp": { "tool": "create_sales_receipt", "arguments": { "idempotencyKey": "workflow-create-invoiceable-receipt", "input": { "saleType": "paid", "customer": { "kind": "stored", "customerId": "customer-example" }, "items": [ { "productId": "product-example", "description": "Servicio", "quantity": 1, "unitPrice": 1250 } ], "paymentForm": "03", "invoiceRequested": true } }, "environments": [ "production" ] } }, { "id": "create-cfdi-from-receipts", "rest": { "operationId": "createCfdiDraftFromSalesReceipts", "method": "POST", "path": "/v1/cfdis/from-sales-receipts", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "workflow-receipts-to-cfdi" }, "body": { "salesReceiptRefs": [ "sales_receipt:receipt-example" ], "customer": { "kind": "existing", "customerId": "customer-example" }, "cfdiUse": "S01" } }, "mcp": { "tool": "create_cfdi_draft_from_sales_receipts", "arguments": { "idempotencyKey": "workflow-receipts-to-cfdi", "input": { "salesReceiptRefs": [ "sales_receipt:receipt-example" ], "customer": { "kind": "existing", "customerId": "customer-example" }, "cfdiUse": "S01" } }, "environments": [ "production" ] } }, { "id": "read-converted-cfdi", "rest": { "operationId": "getCfdi", "method": "GET", "path": "/v1/cfdis/cfdi:invoice-example", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document", "arguments": { "documentRef": "cfdi:invoice-example" }, "environments": [ "production" ] } } ]}06Buscar y descargar un CFDIBusca en la colección de CFDI con filtros fiscales, recupera un documento y descarga su PDF o XML.
- 1
Busca CFDI
Usa kind y paymentTiming en lugar de un filtro genérico de tipo de documento.
REST · Producción y pruebaGET /v1/cfdisMCP · Solo producciónsearch_documentsGuía de reintentos: Esta lectura se puede repetir y usa paginación por cursor para las páginas siguientes.
- 2
Recupera el CFDI
Usa la referencia opaca de CFDI devuelta por la colección.
REST · Producción y pruebaGET /v1/cfdis/cfdi:invoice-exampleMCP · Solo producciónget_documentGuía de reintentos: Las lecturas se pueden repetir y no necesitan idempotency key.
- 3
Descarga el PDF
La ruta REST devuelve un adjunto; la herramienta MCP devuelve un recurso binario.
REST · Producción y pruebaGET /v1/documents/cfdi:invoice-example/files/pdfMCP · Solo producciónget_document_fileGuía de reintentos: Las lecturas de archivos se pueden repetir y no necesitan idempotency key.
- 4
Descarga el XML
Usa el mismo documentRef para recuperar el XML fiscal cuando esté disponible.
REST · Producción y pruebaGET /v1/documents/cfdi:invoice-example/files/xmlMCP · Solo producciónget_document_fileGuía de reintentos: Las lecturas de archivos se pueden repetir y no necesitan idempotency key.
{ "steps": [ { "id": "search-cfdis", "rest": { "operationId": "listCfdis", "method": "GET", "path": "/v1/cfdis", "environments": [ "production", "sandbox" ], "query": { "kind": "income", "status": "valid", "dateFrom": "2026-01-01", "dateTo": "2026-01-31", "limit": 20 } }, "mcp": { "tool": "search_documents", "arguments": { "input": { "category": "cfdi", "kind": "income", "status": "valid", "dateFrom": "2026-01-01", "dateTo": "2026-01-31", "limit": 20 } }, "environments": [ "production" ] } }, { "id": "get-cfdi", "rest": { "operationId": "getCfdi", "method": "GET", "path": "/v1/cfdis/cfdi:invoice-example", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document", "arguments": { "documentRef": "cfdi:invoice-example" }, "environments": [ "production" ] } }, { "id": "download-pdf", "rest": { "operationId": "downloadDocumentFile", "method": "GET", "path": "/v1/documents/cfdi:invoice-example/files/pdf", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document_file", "arguments": { "documentRef": "cfdi:invoice-example", "file": "pdf" }, "environments": [ "production" ] } }, { "id": "download-xml", "rest": { "operationId": "downloadDocumentFile", "method": "GET", "path": "/v1/documents/cfdi:invoice-example/files/xml", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document_file", "arguments": { "documentRef": "cfdi:invoice-example", "file": "xml" }, "environments": [ "production" ] } } ]}07Conciliar el estado CFDI con el SATConsulta al SAT el estado actual de un CFDI timbrado después de un resultado asíncrono o incierto del proveedor.
- 1
Actualiza el estado ante el SAT
La actualización requiere datos de verificación capturados del XML fiscal y concilia el estado local.
REST · Solo producciónPOST /v1/cfdis/cfdi:invoice-example/status/refreshMCP · Solo producciónrefresh_cfdi_statusGuía de reintentos: Reutiliza la misma clave para la misma observación del documento; es una lectura externa que cambia estado.
- 2
Lee el documento conciliado
Obtén el documento de nuevo para consumir el estado local canónico y la proyección de cancelación.
REST · Producción y pruebaGET /v1/cfdis/cfdi:invoice-exampleMCP · Solo producciónget_documentGuía de reintentos: Las lecturas se pueden repetir y no necesitan idempotency key.
{ "steps": [ { "id": "refresh-cfdi-status", "rest": { "operationId": "refreshCfdiStatus", "method": "POST", "path": "/v1/cfdis/cfdi:invoice-example/status/refresh", "environments": [ "production" ], "headers": { "Idempotency-Key": "workflow-refresh-cfdi-status" }, "body": {} }, "mcp": { "tool": "refresh_cfdi_status", "arguments": { "documentRef": "cfdi:invoice-example", "idempotencyKey": "workflow-refresh-cfdi-status" }, "environments": [ "production" ] } }, { "id": "read-reconciled-cfdi", "rest": { "operationId": "getCfdi", "method": "GET", "path": "/v1/cfdis/cfdi:invoice-example", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_document", "arguments": { "documentRef": "cfdi:invoice-example" }, "environments": [ "production" ] } } ]}08Sincronizar y reportar datos fiscalesPrograma la descarga masiva de CFDI del SAT mediante la sincronización de documentos y después consulta por separado los agregados CFDI y los totales declarados autorizados.
- 1
Verifica la FIEL
Lee la organización y continúa solo cuando readiness.fiel sea true. Carga la FIEL en la configuración de Exac cuando sea false.
REST · Producción y pruebaGET /v1/organizationMCP · Solo producciónget_organizationGuía de reintentos: Esta lectura se puede repetir de forma segura.
- 2
Programa una sincronización de documentos
Elige una fuente del SAT y un rango inclusivo de fechas; la respuesta solo confirma la programación.
REST · Solo producciónPOST /v1/tax/syncMCP · Solo producciónsync_sat_dataGuía de reintentos: Reutiliza la misma clave para la misma fuente y rango; consulta los resultados cuando termine el trabajo.
- 3
Consulta los agregados CFDI
Los totales CFDI excluyen ventas de recibos/POS y son distintos de los totales fiscales declarados.
REST · Producción y pruebaGET /v1/reports/cfdiMCP · Solo producciónget_cfdi_summaryGuía de reintentos: Este reporte es de solo lectura y se puede repetir.
- 4
Consulta los totales declarados
Los totales fiscales provienen únicamente de declaraciones analizadas; si no están disponibles permanecen como null y no se estiman.
REST · Solo producciónGET /v1/reports/taxesMCP · Solo producciónget_tax_summaryGuía de reintentos: Este reporte es de solo lectura y se puede repetir.
{ "steps": [ { "id": "verify-fiel-readiness", "rest": { "operationId": "getOrganization", "method": "GET", "path": "/v1/organization", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_organization", "arguments": {}, "environments": [ "production" ] } }, { "id": "sync-documents", "rest": { "operationId": "syncTaxData", "method": "POST", "path": "/v1/tax/sync", "environments": [ "production" ], "headers": { "Idempotency-Key": "workflow-sync-documents" }, "body": { "source": "documents", "dateFrom": "2026-01-01", "dateTo": "2026-01-31", "kind": "all" } }, "mcp": { "tool": "sync_sat_data", "arguments": { "idempotencyKey": "workflow-sync-documents", "input": { "source": "documents", "dateFrom": "2026-01-01", "dateTo": "2026-01-31", "kind": "all" } }, "environments": [ "production" ] } }, { "id": "read-cfdi-summary", "rest": { "operationId": "getCfdiReport", "method": "GET", "path": "/v1/reports/cfdi", "environments": [ "production", "sandbox" ], "query": { "monthFrom": "2026-01", "monthTo": "2026-01" } }, "mcp": { "tool": "get_cfdi_summary", "arguments": { "monthFrom": "2026-01", "monthTo": "2026-01" }, "environments": [ "production" ] } }, { "id": "read-tax-summary", "rest": { "operationId": "getTaxReport", "method": "GET", "path": "/v1/reports/taxes", "environments": [ "production" ], "query": { "fiscalYear": 2026 } }, "mcp": { "tool": "get_tax_summary", "arguments": { "fiscalYear": 2026 }, "environments": [ "production" ] } } ]}09Registrar un pago por cobrarRegistra un pago de cliente y asígnalo a saldos abiertos de recibos mediante una operación idempotente y auditable.
- 1
Registra y asigna el pago
La asignación debe referenciar recibos pertenecientes al cliente y a la organización.
REST · Producción y pruebaPOST /v1/accounts/receivables/customer-example/paymentsMCP · Solo producciónrecord_paymentGuía de reintentos: Reintenta únicamente el pago exacto con la misma clave para evitar un movimiento de dinero duplicado.
- 2
Verifica el saldo de la cuenta
Lee la proyección de la cuenta después de la mutación para mostrar los nuevos saldos operativos y fiscales.
REST · Producción y pruebaGET /v1/accounts/receivables/customer-exampleMCP · Solo producciónget_accountsGuía de reintentos: Las lecturas se pueden repetir y no necesitan idempotency key.
{ "steps": [ { "id": "record-payment", "rest": { "operationId": "createReceivablePayment", "method": "POST", "path": "/v1/accounts/receivables/customer-example/payments", "environments": [ "production", "sandbox" ], "headers": { "Idempotency-Key": "workflow-receivable-payment" }, "body": { "allocations": [ { "documentRef": "sales_receipt:receipt-example", "amount": 500 } ], "paymentForm": "03", "notes": "Bank transfer" } }, "mcp": { "tool": "record_payment", "arguments": { "idempotencyKey": "workflow-receivable-payment", "input": { "direction": "received", "customerId": "customer-example", "allocations": [ { "documentRef": "sales_receipt:receipt-example", "amount": 500 } ], "paymentForm": "03", "notes": "Bank transfer" } }, "environments": [ "production" ] } }, { "id": "read-receivable-account", "rest": { "operationId": "getReceivableAccount", "method": "GET", "path": "/v1/accounts/receivables/customer-example", "environments": [ "production", "sandbox" ] }, "mcp": { "tool": "get_accounts", "arguments": { "input": { "operation": "get", "kind": "receivable", "customerId": "customer-example" } }, "environments": [ "production" ] } } ]}El contrato está listo para construir
El artefacto OpenAPI 3.1 se genera desde el mismo registro de operaciones que el runtime REST y se verifica contra clientes generados de TypeScript y Python.
- Descargar OpenAPI 3.1 (JSON)Descargar
- Descargar catálogo de herramientas MCP (JSON)Descargar
- Comprobaciones de generación Node y PythonVerificado