AIONVEXAPI de facturación · v1Ingresar al panel

Conecta tu sistema con AIONVEX

Emite boletas y facturas mediante HTTPS y JSON, desde cualquier lenguaje o framework que admita estas llamadas.

https://api.aionvex.com/v1

Completa el negocio en el panel de proveedores y coordina con AIONVEX la activación, las series y las credenciales. La cuenta de prueba no emite.

Realiza las llamadas desde tu servidor para mantener privadas las credenciales. Cada clave identifica un negocio; no necesitas enviar el RUC del emisor.

Credenciales

¿Dónde obtenerlas? Ingresa al panel, abre Mis negocios, entra al negocio y busca Credenciales de integración / Generar credenciales. El negocio debe estar activado por AIONVEX. Copia la clave y el secreto: se muestran una sola vez. En esa misma sección puedes revocarlos.

Recibirás X-Api-Key y X-Api-Secret; esta API no utiliza un token Bearer. El correo y la contraseña del login sirven para acceder al panel, no para consumir la API.

HeaderQué enviar
X-Api-KeyClave del negocio. En todas las llamadas.
X-Api-SecretSecreto del negocio. En todas las llamadas.
Content-Typeapplication/json, al emitir.
Idempotency-KeyReferencia única de tu venta, al emitir. Ejemplo: VENTA-001. Guárdala antes de enviar.

La referencia admite hasta 128 caracteres: letras, números, punto, guion, guion bajo y dos puntos.

Emitir un comprobante

Elige la ruta y envía el JSON con los cuatro headers anteriores. Sustituye los datos ficticios por los de tu venta.

Boleta · POST /v1/boletas

{
    "serie": "B001",
    "fecha_emision": "2026-10-08",
    "tipo_moneda": "PEN",
    "forma_pago": "Contado",
    "cliente": {
        "tipo_doc": "1",
        "num_doc": "00000001",
        "razon_social": "CLIENTE DE EJEMPLO"
    },
    "items": [
        {
            "codigo": "P001",
            "descripcion": "Producto de ejemplo",
            "unidad": "NIU",
            "cantidad": 1,
            "precio_unitario": 118,
            "tip_afe_igv": "10",
            "porcentaje_igv": 18
        }
    ]
}

Factura · POST /v1/facturas

{
    "serie": "F001",
    "fecha_emision": "2026-10-08",
    "tipo_moneda": "PEN",
    "forma_pago": "Contado",
    "cliente": {
        "tipo_doc": "6",
        "num_doc": "20000000001",
        "razon_social": "CLIENTE DE EJEMPLO"
    },
    "items": [
        {
            "codigo": "P001",
            "descripcion": "Producto de ejemplo",
            "unidad": "NIU",
            "cantidad": 1,
            "precio_unitario": 118,
            "tip_afe_igv": "10",
            "porcentaje_igv": 18
        }
    ]
}

Usa tu serie habilitada: B001 y F001 son ejemplos. Si omites correlativo, se asigna el siguiente número de la serie.

Qué significa cada campo
CampoUso
fecha_emisionFecha de la venta: AAAA-MM-DD.
tipo_monedaPEN (soles), USD o EUR.
forma_pagoContado en estos ejemplos. Para Credito debes incluir cuotas.
cliente.tipo_doc"1" para DNI; "6" para RUC. Una factura requiere RUC.
cliente.num_docDocumento del comprador, como texto: DNI de 8 dígitos o RUC de 11 que empiece por 10 o 20.
cliente.razon_socialNombre o razón social del comprador.
itemsUna línea por producto o servicio.
unidadNIU para unidad de producto.
cantidadNúmero mayor que cero.
precio_unitarioPrecio de una unidad, según la configuración de precios del negocio. Usa punto decimal, sin S/ ni separadores de miles.
tip_afe_igv / porcentaje_igv"10" y 18 para el ejemplo gravado. La exoneración debe estar habilitada para el negocio.
Enviar con cURL o Postman

cURL: guarda el JSON de boleta en boleta.json y ejecuta este comando en esa carpeta, reemplazando las credenciales y la referencia. Para factura, cambia la ruta y usa factura.json.

curl --request POST 'https://api.aionvex.com/v1/boletas' --header 'X-Api-Key: TU_API_KEY' --header 'X-Api-Secret: TU_API_SECRET' --header 'Content-Type: application/json' --header 'Idempotency-Key: VENTA-001' --data-binary '@boleta.json'

En PowerShell usa curl.exe. En Postman, selecciona POST, pega la URL completa, agrega los headers y pega el JSON en Body / raw / JSON.

Ejemplo JavaScript con comentarios // (opcional)

Solo es un ejemplo de consumo: la API funciona con otros lenguajes. Para ejecutarlo, usa un archivo emitir.mjs, Node.js 18 o superior y las variables de entorno AIONVEX_API_KEY y AIONVEX_API_SECRET.

JSON no admite comentarios. En este ejemplo están en JavaScript; JSON.stringify los excluye al enviar.

// Ejecuta este ejemplo en el servidor de tu sistema con Node.js 18 o superior.
// Guarda las credenciales en variables de entorno; no las pongas en el navegador.
const apiKey = process.env.AIONVEX_API_KEY;
const apiSecret = process.env.AIONVEX_API_SECRET;
if (!apiKey || !apiSecret) throw new Error("Configura las dos credenciales del negocio.");

// Usa la referencia REAL de la venta en tu sistema y guardala antes del envio.
// Dos ventas diferentes necesitan referencias diferentes.
const referenciaVenta = "VENTA-EJEMPLO-001";

const comprobante = {
  serie: "B001",                 // Serie de boleta habilitada para este negocio.
  fecha_emision: "2026-10-08",    // Reemplaza por la fecha de la operacion: AAAA-MM-DD.
  tipo_moneda: "PEN",            // PEN = soles. Tambien se admiten USD y EUR.
  forma_pago: "Contado",         // Este ejemplo no incluye credito ni cuotas.
  cliente: {
    tipo_doc: "1",               // "1" = DNI. Para factura usa "6" = RUC.
    num_doc: "00000001",         // Dato ficticio. Usa el documento real como TEXTO.
    razon_social: "CLIENTE DE EJEMPLO" // Nombre del cliente o su razon social.
  },
  items: [{
    codigo: "P001",              // Codigo de tu producto o servicio.
    descripcion: "Producto de ejemplo",
    unidad: "NIU",              // NIU = unidad de producto.
    cantidad: 1,                // Numero mayor que cero; no lleva comillas.
    precio_unitario: 118.00,     // Precio por unidad. Usa la configuracion de precios del negocio.
    tip_afe_igv: "10",           // "10" = operacion gravada con IGV.
    porcentaje_igv: 18           // Porcentaje de IGV de este ejemplo gravado.
  }]
};

// JSON.stringify convierte el objeto a JSON valido: los comentarios NO se envian.
// Para una factura: cambia /boletas por /facturas, serie por F001,
// tipo_doc por "6" y num_doc por el RUC real del cliente (11 digitos).
const respuesta = await fetch("https://api.aionvex.com/v1/boletas", {
  method: "POST",                // POST crea un comprobante.
  headers: {
    "X-Api-Key": apiKey,         // Identifica el negocio que emite.
    "X-Api-Secret": apiSecret,   // Autentica la clave de ese negocio.
    "Content-Type": "application/json",
    "Idempotency-Key": referenciaVenta // Evita crear dos veces la misma venta.
  },
  body: JSON.stringify(comprobante)
});

const resultado = await respuesta.json();
if (!respuesta.ok) {
  // HTTP 422: muestra cada campo y sus mensajes para corregir la venta.
  if (respuesta.status === 422) {
    for (const [campo, mensajes] of Object.entries(resultado.errores ?? {})) {
      console.error(campo, mensajes.join("; "));
    }
  } else {
    console.error("HTTP", respuesta.status, resultado.mensaje);
  }
  // No generes otra referencia ni hagas un reintento automatico.
  // Para 409 o 503, conserva la referencia y revisa el resultado con AIONVEX.
  throw new Error("La emision no se confirmo.");
}

console.log("ID para guardar en tu venta:", resultado.datos?.id);
console.log("Respuesta:", resultado);
// Guarda datos.id junto con referenciaVenta en tu base de datos.
// HTTP 201 significa creado; consulta GET /boletas/{id} para conocer el estado SUNAT.
Campos adicionales

Para cuotas, descuentos, anticipos y otros campos, consulta el contrato OpenAPI. Los campos admitidos por documento son:

Facturas

anticipos, cliente, cod_local, contrato_colaboracion, correlativo, cuotas, descuentos_globales, detraccion, enviar_automatico, extras, fecha_emision, fecha_vencimiento, forma_pago, guias, items, leyenda, leyendas, mto_igv, mto_imp_venta, mto_oper_exoneradas, mto_oper_exportacion, mto_oper_gratuitas, mto_oper_gravadas, mto_oper_inafectas, observacion, pagos, percepcion, serie, sub_total, sum_otros_descuentos, tipo_moneda, tipo_operacion, total_anticipos, total_descuentos, total_impuestos, valor_venta

Boletas

anticipos, cliente, cod_local, contrato_colaboracion, correlativo, cuotas, descuentos_globales, detraccion, enviar_automatico, extras, fecha_emision, fecha_vencimiento, forma_pago, guias, items, leyenda, leyendas, mto_igv, mto_imp_venta, mto_oper_exoneradas, mto_oper_exportacion, mto_oper_gratuitas, mto_oper_gravadas, mto_oper_inafectas, observacion, pagos, percepcion, serie, sub_total, sum_otros_descuentos, tipo_moneda, tipo_operacion, total_anticipos, total_descuentos, total_impuestos, valor_venta

enviar_automatico puede omitirse o ser true. guias solo referencia guías existentes.

HTTP 201 significa comprobante creado. Guarda datos.id y consulta el estado para conocer el resultado de SUNAT.

Consultar estado

Usa el datos.id recibido al emitir y los dos headers de credenciales.

GET /v1/boletas/{id}
GET /v1/facturas/{id}
curl 'https://api.aionvex.com/v1/facturas/123' --header 'X-Api-Key: TU_API_KEY' --header 'X-Api-Secret: TU_API_SECRET'

Reemplaza 123 por tu ID. Revisa datos.sunat.estado, datos.sunat.codigo y datos.sunat.descripcion. Solo puedes consultar documentos emitidos por esta integración para tu negocio.

Ejemplo de respuesta reducida
{
    "estado": "exito",
    "mensaje": "Estado del comprobante consultado.",
    "datos": {
        "id": 123,
        "numero_completo": "F001-000001",
        "sunat": {
            "estado": "pendiente",
            "codigo": null,
            "descripcion": null
        }
    }
}

Descargar archivos

Envía los dos headers de credenciales. Para boletas, cambia facturas por boletas.

GET /v1/facturas/{id}/pdf?format=a4
GET /v1/facturas/{id}/xml
GET /v1/facturas/{id}/cdr

PDF: a4 (predeterminado), a5, ticket-80 o ticket-58. El CDR se descarga como ZIP. Los archivos pueden tardar en estar disponibles.

Ejemplo de descarga PDF
curl 'https://api.aionvex.com/v1/facturas/123/pdf?format=a4' --header 'X-Api-Key: TU_API_KEY' --header 'X-Api-Secret: TU_API_SECRET' --output factura.pdf

Los enlaces en datos.archivos son relativos: agrega https://api.aionvex.com delante y envía las credenciales.

Errores y reintentos

Si repites la misma referencia con el mismo JSON, recibes la respuesta guardada sin otra emisión, o un 409 si sigue en proceso o revisión. Una venta diferente necesita otra referencia.

HTTPQué hacer
422Revisa errores y corrige los campos. La validación local responde antes de enviar.
401 / 403Revisa credenciales, acceso y documentos habilitados.
409La referencia está en proceso, en revisión o tiene datos/configuración diferentes. Conserva la referencia y revisa el caso.
503Servicio no disponible o emisión sin confirmación. Conserva la referencia y solicita revisión.
429Espera el tiempo indicado por Retry-After.
404Revisa ruta, negocio e ID; el archivo puede estar pendiente.
400 / 405 / 415 / 413Revisa JSON, método, Content-Type y tamaño del envío.

No cambies la referencia para repetir una venta sin resultado confirmado. Una referencia ya registrada con otros datos no se sobrescribe.

Ejemplo de errores por campo
{
  "estado": "error",
  "mensaje": "Error de validación",
  "errores": {
    "cliente.num_doc": [
      "El RUC debe contener exactamente 11 digitos."
    ],
    "items.0.cantidad": [
      "La cantidad debe ser un numero mayor que cero."
    ]
  }
}

Cada campo contiene una lista de mensajes. items.0.cantidad señala la primera línea; _general indica un error sin campo específico.

Límites iniciales: 2 000 000 bytes, 500 líneas y 60 peticiones por minuto por clave; sujetos al plan. Esta API publica boletas y facturas. La configuración del negocio se gestiona con AIONVEX.