Factumel — Tu facturación electrónica, más simple.
Ciclo fiscal

Comprobantes y DGI

El ciclo de un comprobante tiene pasos independientes. Firmar no significa enviar. Enviar no significa aceptar. La API conserva el mismo ID del CFE a lo largo del proceso.

OperaciónMétodo y endpointEfecto
Consultar CAEGET /api/v1/companies/{id}/caeRangos disponibles por empresa y ambiente.
PrechequeoGET /api/v1/companies/{id}/issuance-readiness?documentType=111Valida configuración básica y autorización por tipo.
Crear borradorPOST /api/v1/documentsPersiste y valida datos de entrada, sin numeración.
Una sola llamadaPOST /api/v1/documents/issue-and-submitCrea o recupera, firma e intenta transmitir con externalId obligatorio.
FirmarPOST /api/v1/documents/{id}/issuePrepara XML, reserva CAE, firma y valida XSD.
EnviarPOST /api/v1/documents/{id}/submitIntenta transmitir a DGI; puede preparar/firmar un borrador.
RecuperarGET /api/v1/documents/lookup?companyId=...&externalId=...Buscar el ID después de timeout o pérdida de respuesta.
LeerGET /api/v1/documents/{id}Datos, historial y estado almacenado.
Consultar DGIPOST /api/v1/documents/{id}/statusConsulta/actualiza respuesta fiscal del sobre.
Obtener PDFGET /api/v1/documents/{id}/pdfPDF fiscal firmado y validado, sin regenerar el CFE.
Obtener XMLGET /api/v1/documents/{id}/xmlDescarga XML firmado si fue validado.

El prechequeo es orientativo: canAttemptIssuance no garantiza conectividad SOAP, homologación ni aceptación de DGI. Un rango CAE puede agotarse entre la consulta y la emisión concurrente.

Emisión completa en una sola solicitud

El endpoint POST /api/v1/documents/issue-and-submit acepta el mismo JSON del borrador, con externalId obligatorio, y utiliza los controles existentes de creación y transmisión. Exige permisos documents:write y documents:submit.

Responde 202 cuando el proceso sigue pendiente y 200 si ya existe un resultado fiscal final. Consultá data.status: únicamente ACCEPTED indica aceptación por DGI. En fallos posteriores a la creación incluye documentId para conciliación. Nunca reintentes con otro externalId.

Para PRODUCTION esta modalidad está deshabilitada por defecto: el operador debe habilitar expresamente API_ONE_SHOT_LIVE_ENABLED=true, después de verificar el estado fiscal. Las rutas tradicionales conservan su funcionamiento.

Firmar y enviar

DOCUMENT_ID="ID_RETORNADO_EN_POST"
curl -sS -X POST "https://factumel.com/api/v1/documents/$DOCUMENT_ID/issue" \
  -H "Authorization: Bearer $FACTUMEL_API_KEY"

curl -sS -X POST "https://factumel.com/api/v1/documents/$DOCUMENT_ID/submit" \
  -H "Authorization: Bearer $FACTUMEL_API_KEY"

curl -sS -X POST "https://factumel.com/api/v1/documents/$DOCUMENT_ID/status" \
  -H "Authorization: Bearer $FACTUMEL_API_KEY"

Idempotencia

Reutilizá el mismo externalId de tu sistema por empresa y comprobante. Repetir la creación con exactamente los mismos datos devuelve el existente. Si el ID ya corresponde a un payload diferente, Factumel devuelve un conflicto. Nunca generes otro ID para disimular un timeout: buscá primero por companyId y externalId usando GET /api/v1/documents/lookup, y consultá su estado antes de reintentar.

Estados fiscales

EstadoInterpretación
DRAFTBorrador, todavía no emitido.
QUEUEDPreparación/CAE en progreso.
SIGNEDFirmado, sin aceptación fiscal confirmada.
SENTTransmitido, esperando respuesta definitiva.
ACCEPTEDAceptado por DGI.
OBSERVEDObservado; evaluar los datos de recepción.
REJECTEDRechazado; revisar el motivo y el procedimiento fiscal aplicable.

Los comprobantes fiscales emitidos no deben tratarse como registros CRUD. Una corrección fiscal puede requerir nota de crédito o débito con referencias; no se edita ni elimina un comprobante ya enviado como si fuera un borrador.

Notas, retenciones y operaciones especiales

El body de creación permite references, retentionLines, globalAdjustments, paymentMethods e indicadores DGI. No reutilices valores de un tipo de documento en otro sin validar las reglas oficiales. Consultá el OpenAPI y contrastá cada dato fiscal con el Formato CFE de DGI.