Probá la API de Factumel
Una colección Postman descargable contiene las 23 operaciones. Las consultas son independientes y las operaciones de emisión se ejecutan sólo a pedido. Las solicitudes POST se bloquean cuando la clave no comienza por fmk_test_.
Descargar colección Postman v1 ↗
Preparar un ambiente de TEST
Creá una clave con los scopes necesarios desde Credenciales API, copiá el secreto en el entorno del servidor y conseguí el identificador de una empresa de prueba. No publiques credenciales ni uses una clave fmk_live_ para practicar.
export FACTUMEL_API_KEY="fmk_test_..."
export COMPANY_ID="empresa-de-test"
curl --fail-with-body -sS "https://factumel.com/api/v1/companies?limit=10" \
-H "Authorization: Bearer $FACTUMEL_API_KEY"
curl --fail-with-body -sS \
"https://factumel.com/api/v1/companies/$COMPANY_ID/issuance-readiness?documentType=111" \
-H "Authorization: Bearer $FACTUMEL_API_KEY"Crear un borrador idempotente
El externalId es opcional por compatibilidad de la API, pero es obligatorio en los SDKs y lo recomendamos para todas las integraciones. Reutilizá el ID estable de tu factura en tu sistema de origen. El JSON que sigue es un ejemplo técnico de TEST, no una factura fiscal válida por sí sola.
curl --fail-with-body -sS -X POST "https://factumel.com/api/v1/documents" \
-H "Authorization: Bearer $FACTUMEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"companyId": "EMPRESA_DE_TEST",
"externalId": "pedido-test-1001",
"documentType": "111",
"currencyCode": "UYU",
"items": [
{ "description": "Servicio", "quantity": 1,
"unitPrice": 1000, "taxRate": 22 }
]
}'Reemplazá EMPRESA_DE_TEST con el ID real de una empresa TEST propia. El endpoint devuelve HTTP 201 para un borrador nuevo y 200 para un replay idempotente. No asumir que una creación exitosa significa que se consumió un CAE.
Recuperar errores de red sin facturar doble
curl --fail-with-body -sS -G \
"https://factumel.com/api/v1/documents/lookup" \
-H "Authorization: Bearer $FACTUMEL_API_KEY" \
--data-urlencode "companyId=$COMPANY_ID" \
--data-urlencode "externalId=pedido-test-1001"Ante cualquier timeout al crear, firmar o enviar, la operación puede haber ocurrido. Primero recuperá el comprobante existente, consultá su estado y conciliá el resultado de DGI. No hagas retries automáticos de emisión o envío.
Errores que una integración debe manejar
| HTTP | Qué hacer |
|---|---|
401 | Rotar/revisar clave y ambiente. |
403 | Solicitar scope específico. |
404 | Verificar recurso, organización y ambiente; no inferir existencia en otro tenant. |
409 | Conciliar estado e idempotencia antes de cualquier nueva acción. |
413 / 415 | Reducir JSON a 1 MiB / establecer Content-Type application/json. |
422 | Corregir parámetros o datos fiscales, sin reintentar idénticos. |
429 | Respetar Retry-After y consultar estado al reanudar si hubo incertidumbre. |
5xx / timeout | No presuponer fracaso de emisión o envío. Consultar y conciliar. |
Antes de integrar en producción
Comprobá aislamiento entre organizaciones y ambientes, validez de certificado y CAE, conectividad y habilitación DGI, manejo de estados UNKNOWN, webhooks duplicados y firma de eventos. Ni la colección de pruebas ni los SDKs acreditan homologación fiscal.