Ir al contenido

DOCUMENTACIÓN · API v1 · SIFEN

Emití documentos electrónicos desde tu propio sistema.

Una API REST sobre HTTPS, con JSON de ida y de vuelta. Vos mandás la venta; nosotros generamos el CDC, armamos el XML, lo firmamos con tu certificado y lo transmitimos a SIFEN. En la misma llamada te devolvemos el CDC, el número y el QR del documento.

Toda cuenta nueva arranca en el ambiente de pruebas de SIFEN: integrás, probás y recién cuando funciona pasás a producción. La URL no cambia — el ambiente lo define tu emisor.

LO PRIMERO

Cuatro cosas y ya podés leer el resto.

URL base

Todas las rutas cuelgan de acá. Solo HTTPS.

https://api.gcompy.com/api/v1

Autenticación

Una clave por cuenta, en el header. La generás desde el portal y se muestra una sola vez: guardala en tu servidor, nunca en el navegador ni en un repositorio.

X-API-Key: tu_clave

Los endpoints del portal (listados, eventos del receptor, cancelación) usan el token JWT que devuelve POST /auth/login.

Forma de la respuesta

La mayoría de los endpoints devuelve el mismo sobre. El payload real siempre está en data.

{ "success": true, "message": "OK", "data": { … } }

La regla que más cuesta

HTTP 200 no significa "aprobado por SIFEN". Significa que la llamada salió bien. Si SIFEN rechazó el documento, vas a recibir un 200 con data.estado = "rechazado" y el motivo en mensaje_set. Miralo siempre.

En producción, el veredicto llega después

SIFEN habilita dos canales de transmisión y en producción el canal síncrono no está habilitado: los documentos se transmiten por lote. En la práctica, para vos:

  • La llamada de emisión te devuelve 200 con estado: "preparado" — el documento ya está firmado, numerado y con su CDC y su QR definitivos
  • El veredicto de SIFEN (aprobado o rechazado) lo resolvemos nosotros contra el lote, y vos lo leés con GET /de/{cdc}
  • En el ambiente de pruebas el canal síncrono sí funciona: ahí la misma llamada suele volver ya aprobado

Programá siempre contra el caso de producción: emitís, guardás el CDC, entregás el comprobante y consultás el estado después. Si tu código asume "aprobado" en la respuesta, anda en pruebas y se rompe el día que pasás a producción.

Los montos son guaraníes enteros, sin decimales, y el precio_unitario ya incluye el IVA — como se factura en Paraguay. Las cantidades sí aceptan decimales (litros, kilos).

UNA FACTURA, DE PUNTA A PUNTA

Esta es la llamada que vas a hacer mil veces.

POST /de/factura/simple es la forma corta: le pasás el receptor y los ítems, y la plataforma completa todo lo que exige el Manual Técnico de SIFEN — timbrado, CDC, subtotales por tasa de IVA, firma y envío.

  • Si no mandás receptor, sale a consumidor final
  • referencia_externa es tu número de venta: repetirlo no duplica la factura
  • La respuesta trae el CDC, el número y el QR ya definitivos
  • El estado arranca en preparado y lo consultás después

¿Necesitás controlar cada grupo del XML (descuentos, cuotas, transporte, moneda extranjera)? Está POST /de/factura, la forma completa.

POST /api/v1/de/factura/simple
curl -X POST https://api.gcompy.com/api/v1/de/factura/simple \
  -H "X-API-Key: $GCOMPY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "receptor": {
      "ruc": "80012345",
      "nombre": "Cliente S.A.",
      "email": "compras@cliente.com.py"
    },
    "items": [
      { "codigo": "PROD-001",
        "descripcion": "Teclado mecanico USB",
        "cantidad": 2,
        "precio_unitario": 150000,
        "tasa_iva": 10 }
    ],
    "condicion_venta": 1,
    "referencia_externa": "venta-12345"
  }'

# 200 OK — el documento ya existe, con su CDC y su QR
{
  "success": true,
  "message": "OK",
  "data": {
    "cdc": "01801234500010010000522…",
    "estado": "preparado",
    "display_estado": "Pendiente de envío",
    "numero_factura": "001-001-0000522",
    "qr_url": "https://ekuatia.set.gov.py/consultas/qr?…",
    "monto_total": 300000,
    "mensaje_set": null
  }
}

# Después, el veredicto de SIFEN:
curl https://api.gcompy.com/api/v1/de/01801234500010010000522… \
  -H "X-API-Key: $GCOMPY_API_KEY"

{ "data": { "estado": "aprobado",
            "display_estado": "Aprobado por SIFEN",
            "mensaje_set": null } }

REFERENCIA

Todo lo que expone la API.

Los cinco tipos de documento electrónico que reconoce SIFEN, sus eventos y las consultas. Cada ruta va prefijada con /api/v1.

Emisión

MétodoRutaQué haceAuth
POST /de/factura/simple Factura electrónica en su forma corta. El endpoint de los puntos de venta. API Key
POST /de/factura Factura electrónica completa: control sobre cada grupo del XML. API Key
POST /de/nota-credito Nota de crédito asociada a un documento ya emitido. API Key
POST /de/nota-debito Nota de débito asociada a un documento ya emitido. API Key
POST /de/autofactura Autofactura: compras a quien no emite comprobante. API Key
POST /de/nota-remision Nota de remisión electrónica para el traslado de mercadería. API Key

En producción los seis se transmiten por el canal de lote, porque es el único que SIFEN habilita: la llamada te devuelve el documento en preparado —ya firmado, numerado y con su CDC— y el veredicto lo leés después. De eso nos ocupamos nosotros; vos no tenés que armar el lote. Si preferís manejarlo por tu cuenta, ahí abajo está el canal de lote directo.

Lotes

El canal asíncrono de SIFEN, expuesto tal cual. Es lo que usan los integradores que facturan por volumen o que calculan el CDC en su propio sistema.

MétodoRutaQué haceAuth
POST /lotes/precalculado Recibe hasta 50 documentos con el CDC ya calculado por tu sistema: los validamos uno por uno, los firmamos y los transmitimos. API Key
POST /lotes/precalculado/reintentar Reintenta los rechazados del batch conservando su CDC, y devuelve el veredicto de cada uno. API Key
POST /lotes Junta los documentos tuyos que están pendientes de envío, arma el lote y lo transmite. API Key
GET /lotes/{id} Estado del lote. API Key
GET /lotes/{id}/detalle El lote con el veredicto documento por documento. API Key
POST /lotes/{id}/consultar Le pide a SIFEN el resultado del lote ahora, sin esperar el ciclo automático. API Key

Reglas de SIFEN que la plataforma hace cumplir: hasta 50 documentos por lote, todos del mismo tipo y del mismo RUC emisor. El lote es idempotente por referencia_externa: reenviarlo devuelve el lote que ya existe en vez de re-transmitir — retransmitir CDCs hace que SIFEN bloquee el RUC por un rato.

Consulta y comprobantes

MétodoRutaQué haceAuth
GET /de/{cdc} Estado del documento y su línea de tiempo (creado, firmado, enviado, respuesta). API Key o JWT
GET /de/{cdc}/kude KuDE en PDF: el comprobante que se le entrega al cliente. API Key o JWT
GET /de/{cdc}/xml XML firmado tal como se envió a SIFEN. API Key o JWT
POST /de/{cdc}/consultar-sifen Le pregunta a SIFEN, en vivo, por el estado de ese CDC. API Key o JWT
GET /de Listado paginado con filtros por estado, fecha y búsqueda. JWT
GET /de/{cdc}/logs Historial de las llamadas a SIFEN de ese documento. JWT

Correcciones y eventos

MétodoRutaQué haceAuth
POST /de/{cdc}/reintentar Reenvía un documento rechazado, con o sin corrección. API Key o JWT
POST /de/{cdc}/cancelar Evento de cancelación en SIFEN (dentro de las 48 horas). JWT
POST /de/inutilizar Inutiliza un rango de números que no se van a usar. API Key o JWT
POST /eventos/conformidad Conformidad del receptor con un documento recibido. JWT
POST /eventos/disconformidad Disconformidad del receptor. JWT
POST /eventos/desconocimiento Desconocimiento de una operación que no reconocés. JWT
POST /eventos/notificacion-recepcion Notificación de recepción del documento. JWT

Cuenta y configuración

MétodoRutaQué haceAuth
POST /auth/login Devuelve el token JWT y su refresh.
POST /apikeys Genera una clave de API. Se muestra una sola vez. JWT
POST /emisor/certificado Sube tu certificado .p12. Se guarda cifrado y no se descarga. JWT
PATCH /emisor/ambiente Cambia entre pruebas y producción. JWT
POST /timbrados Carga un timbrado con su establecimiento y punto de expedición. JWT

El detalle campo por campo, con los códigos de error de cada endpoint y una colección Postman lista para importar, se entrega al integrarse. Pedila por WhatsApp o escribinos a info@gcompy.com.

QUÉ HACER CON CADA RESPUESTA

Seis estados, y qué hacer con cada uno.

estadoSignificaQué hacés
aprobado Válido fiscalmente. Entregás el KuDE y seguís.
aprobado_obs Aprobado, con observaciones de SIFEN. Es válido igual. Conviene leer la observación.
rechazado SIFEN no lo aceptó. El motivo viene en mensaje_set. Corregís el dato y reintentás con la misma referencia.
preparado Firmado y transmitido, sin veredicto todavía. Es el estado normal al emitir en producción. Consultás GET /de/{cdc} cada 30 segundos.
error_sifen SIFEN no respondió: caída o timeout. Nada: se reintenta solo. Vos consultás el estado.
contingencia Emitido en modo contingencia. Se regulariza automáticamente cuando SIFEN vuelve.

Un documento nunca se borra: cambia de estado. Es un registro fiscal y la DNIT puede auditarlo años después.

LO QUE PASA CUANDO ALGO SALE MAL

Reintentar no te va a duplicar una factura.

01

Idempotencia por referencia

Mandás tu número de venta en referencia_externa. Si la red se cortó y no sabés si llegó, repetís la llamada: te devolvemos el documento que ya existe, con el mismo CDC.

02

Rechazado se re-emite

Si el anterior fue rechazado, la misma referencia genera un documento nuevo con CDC nuevo. El rechazado queda guardado como historial de auditoría.

03

Si SIFEN se cae

El documento queda encolado y se reenvía solo, con reintentos espaciados. Antes de reenviar consultamos el CDC en SIFEN, así no se manda dos veces lo que ya entró.

CÓMO EMPEZAR

De la cuenta a la primera factura.

01

Creás tu cuenta

Con tu correo y los datos fiscales de la empresa. Nace en el ambiente de pruebas de SIFEN, donde nada tiene valor fiscal.

02

Cargás certificado y timbrado

El certificado lo emite un prestador habilitado y el timbrado sale de Marangatu. Cómo se consigue el certificado

03

Generás tu clave y emitís

Desde el portal, en Configuración. La clave se muestra una sola vez. Con eso ya podés llamar a /de/factura/simple.

¿Sos integrador y necesitás un sandbox para tus clientes? Trabajamos así con varias casas de software. Escribinos y lo armamos.

PREGUNTAS FRECUENTES

Lo que se pregunta antes de integrar.

¿En qué lenguaje puedo integrarme?
En el que uses. Es HTTP con JSON: si tu sistema puede hacer un POST, puede facturar. Hay integraciones andando en PHP, Python y JavaScript.
¿Tengo que armar el XML de SIFEN?
No. Vos mandás la venta en JSON. El XML del Manual Técnico, el CDC de 44 dígitos, la firma XMLDSig y el código QR los generamos nosotros.
¿Cómo pruebo sin emitir documentos con valor fiscal?
Toda cuenta arranca en el ambiente de pruebas de SIFEN. Emitís todo lo que quieras, sin efecto fiscal. Cuando tu integración funciona, se pasa la cuenta a producción — la URL de la API no cambia.
¿La respuesta me dice si SIFEN lo aprobó?
En producción no, y es lo primero que hay que entender: ahí los documentos se transmiten por lote, así que la emisión te devuelve el CDC y el QR con estado preparado, y el veredicto lo leés después con GET /de/{cdc}. En el ambiente de pruebas la respuesta suele volver ya resuelta — no programes contra ese caso.
¿Qué pasa si mando dos veces la misma venta?
Si usás referencia_externa con tu número de venta, la segunda llamada te devuelve el documento que ya existe en vez de emitir otro. Es lo que evita duplicados cuando se corta la red.
¿Hay límite de llamadas?
Hay un límite por clave para proteger el servicio; el volumen normal de un comercio no lo toca. Lo que se cobra es el documento emitido, según el plan.
¿El certificado digital lo dan ustedes?
No: lo emite un prestador de certificación habilitado por el MIC. Te decimos con quiénes hablar y qué pedir, y lo subís al portal cuando lo tengas.

¿Lo probamos?

Creás la cuenta, generás tu clave y emitís la primera factura de prueba hoy mismo.

Hablemos de tu empresa.

Contanos qué necesitás y te respondemos con una propuesta concreta.