Base URL
- Producción: https://api.fisnodo.sun.com.py
Documentación para desarrolladores
Esta guía resume el flujo de integración para ERP, POS, ecommerce y sistemas internos que necesitan enviar documentos, validar datos, consultar estados y recibir eventos.
Estos son los conceptos que aparecen en casi todos los endpoints de la API.
Empezá con sandbox y validación. Pasá a facturación real cuando el contrato, la configuración y el seguimiento estén claros.
Creá o seleccioná tenant, empresa, sucursal, punto de emisión, canal de facturación, certificado o datos de autoimpresor según corresponda.
Usá /v1/documents/validate para revisar estructura, readiness y prevalidación SIFEN v150; usá sandbox cuando necesites artefactos sin emitir.
Creá el documento con Idempotency-Key y seguí su estado hasta una respuesta final del canal configurado.
Consultá artefactos y usá webhooks para actualizar el sistema origen sin polling constante.
El objetivo de la primera prueba no es emitir con validez fiscal. Es confirmar que el sistema origen puede enviar JSON, validar datos, generar artefactos de prueba y reconciliar estados.
Usá una llave de sandbox, X-Tenant-Id y un Idempotency-Key estable por documento de prueba.
Llamá POST /v1/documents/validate hasta que el contrato canónico y las reglas SIFEN v150 no devuelvan errores bloqueantes.
Usá POST /v1/sandbox/preview para revisar XML, KUDE o imprimible sin remisión a DNIT/SIFEN.
Guardá document_id, status_url y external_id para que el ERP/POS pueda consultar el resultado y mostrarlo al usuario.
El payload exacto depende del tipo de documento y del canal, pero el patrón de llamada es el mismo.
await fetch("https://api.fisnodo.sun.com.py/v1/documents", {
method: "POST",
headers: {
"Authorization": "Bearer <api-key>",
"X-Tenant-Id": "<tenant-id>",
"Idempotency-Key": "invoice-001",
"Content-Type": "application/json"
},
body: JSON.stringify(documento)
});requests.post(
"https://api.fisnodo.sun.com.py/v1/documents",
headers={
"Authorization": "Bearer <api-key>",
"X-Tenant-Id": "<tenant-id>",
"Idempotency-Key": "invoice-001"
},
json=documento,
)$ch = curl_init("https://api.fisnodo.sun.com.py/v1/documents");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <api-key>",
"X-Tenant-Id: <tenant-id>",
"Idempotency-Key: invoice-001",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode($documento),
]);using var request = new HttpRequestMessage(HttpMethod.Post, "/v1/documents");
request.Headers.Authorization = new("Bearer", "<api-key>");
request.Headers.Add("X-Tenant-Id", "<tenant-id>");
request.Headers.Add("Idempotency-Key", "invoice-001");
request.Content = JsonContent.Create(documento);
await client.SendAsync(request);Estos ejemplos cubren las piezas que suelen necesitar ERP, POS y ecommerce antes de pasar a producción.
{
"external_id": "erp-001",
"type": "invoice",
"issue_datetime": "2026-05-02T10:30:00-04:00",
"currency": "PYG",
"seller": { "ruc": "80000000-1", "legal_name": "Empresa Demo SA" },
"buyer": { "ruc": "1234567-8", "legal_name": "Cliente Demo" },
"items": [{
"description": "Servicio mensual",
"quantity": 1,
"unit_price": 100000,
"tax_rate": 10,
"tax_amount": 9091,
"total_amount": 100000
}],
"totals": { "subtotal": 90909, "tax_total": 9091, "grand_total": 100000 },
"payment_terms": { "condition": "cash", "method": "bank_transfer" }
}const response = await fetch(
`https://api.fisnodo.sun.com.py/v1/documents/${documentId}/artifacts`,
{ headers: { Authorization: "Bearer <api-key>", "X-Tenant-Id": tenantId } }
);
const artifacts = await response.json();
// Buscar KUDE, XML firmado, PDF/imprimible, payload normalizado y respuesta del canal.X-Webhook-Signature: t=1762000000,v1=<hmac-sha256>
{
"type": "document.accepted",
"document_id": "doc_123",
"external_id": "erp-001",
"status": "accepted"
}const signedPayload = `${timestamp}.${rawBody}`;
const expected = createHmac("sha256", webhookSecret)
.update(signedPayload)
.digest("hex");
const valid = signature.length === expected.length
&& timingSafeEqual(Buffer.from(signature), Buffer.from(expected));Los ejemplos de JavaScript, Python, PHP y C# incluyen creación de documentos, manejo de errores, sandbox preview y verificación de webhooks.
La referencia completa sigue disponible como OpenAPI JSON para importar en herramientas técnicas.
/v1/documents/validate/v1/documents/v1/documents/{id}/v1/documents/{id}/retry/v1/documents/{id}/timeline/v1/sandbox/preview/v1/companies/v1/emission-channels/v1/certificates/v1/webhooks/v1/webhooks/{id}/replayUsá el JSON para generar clientes, revisar schemas completos y automatizar pruebas de integración.
Descargar OpenAPI JSONLa integración debe tratar estados y errores como parte del contrato operativo, no como texto libre.
Usá el checklist de producción para ordenar responsabilidades entre negocio, contabilidad y desarrollo antes de enviar documentos reales.
Abrir checklist SIFEN