API Parser Factura y VEP

Guia de uso para clientes que consumen la API de lectura de comprobantes argentinos y VEPs.

Inicio

La API recibe la URL publica de una imagen o PDF de factura, nota de credito, nota de debito, factura E o VEP argentino y devuelve un JSON con los datos detectados.

URL facturashttps://vxtlogistica.com/api_reader/api_parser_factura.php
URL VEPshttps://vxtlogistica.com/api_reader/api_parser_vep.php
MetodoPOST
FormatoContent-Type: application/json
Costo1 credito por cada solicitud procesada.
La API devuelve los campos que puede leer con confianza. Si un dato no aparece o no se puede leer, no se incluye en el JSON.
La salida normal no incluye metadatos de evidencia. Si el cliente envia include_evidence: true, cada campo importante puede incluir confianza y evidencia visual en _meta.

Credenciales

Cada cliente recibe un client_id y un secret. Ambos deben enviarse en cada solicitud.

X-Client-Id: CLIENT_ID
X-Client-Secret: CLIENT_SECRET
Content-Type: application/json

Alternativa con Authorization

Tambien se puede enviar el secret como Bearer, manteniendo el client id en header.

Authorization: Bearer CLIENT_SECRET
X-Client-Id: CLIENT_ID
Content-Type: application/json
No enviar el secret en aplicaciones frontend publicas. Usarlo siempre desde un backend propio.

Creditos

El servicio descuenta automaticamente 1 credito por cada uso. La respuesta exitosa incluye el saldo anterior y el saldo posterior.

{
  "credits": {
    "mode": "database",
    "consumed": 1,
    "balance_before": 100,
    "balance_after": 99,
    "movement_id": 10,
    "reference_id": "7b7f3e..."
  }
}

Si el cliente no tiene saldo disponible, la API no procesa la imagen y responde INSUFFICIENT_CREDITS.

Request

Enviar un JSON con la URL de la imagen o PDF. La URL debe ser accesible publicamente por HTTPS o HTTP.

{
  "image_url": "https://dominio.com/facturas/factura-a-0001.jpg"
}

Campos de entrada

CampoRequeridoDescripcion
image_urlSiURL publica de la imagen o PDF del comprobante.
urlNoAlias de image_url.
openai_tokenNoToken OpenAI propio del cliente. Si no se envia, se usa el token configurado por el servicio.
include_evidenceNoSi es true, agrega _meta, confidence, evidence y quality. Por defecto es false.
Aunque el campo se llama image_url, tambien acepta URLs de PDF. Usar api_parser_factura.php para comprobantes y api_parser_vep.php para VEPs.

Ejemplo curl

Factura

curl -X POST "https://vxtlogistica.com/api_reader/api_parser_factura.php" \
  -H "Content-Type: application/json" \
  -H "X-Client-Id: CLIENT_ID" \
  -H "X-Client-Secret: CLIENT_SECRET" \
  -d '{
    "image_url": "https://dominio.com/facturas/factura-a-0001.jpg"
  }'

VEP

curl -X POST "https://vxtlogistica.com/api_reader/api_parser_vep.php" \
  -H "Content-Type: application/json" \
  -H "X-Client-Id: CLIENT_ID" \
  -H "X-Client-Secret: CLIENT_SECRET" \
  -d '{
    "image_url": "https://dominio.com/veps/vep-04-2026.pdf"
  }'

Respuesta exitosa

{
  "success": true,
  "data": {
    "parsed": {
      "comprobante": {
        "tipo": "Factura",
        "letra": "A",
        "codigo_tipo": "001",
        "punto_venta": "0056",
        "numero": "00018287",
        "fecha_emision": "2026-07-03",
        "cae": "12345678901234",
        "cae_vencimiento": "2026-07-13",
        "moneda": "PES"
      },
      "emisor": {
        "razon_social": "EMPRESA SA",
        "cuit": "30111111118",
        "condicion_iva": "IVA Responsable Inscripto",
        "domicilio": "Av. Ejemplo 123"
      },
      "receptor": {
        "razon_social": "CLIENTE SRL",
        "cuit": "30222222229",
        "condicion_iva": "IVA Responsable Inscripto"
      },
      "items": [
        {
          "codigo": "SERV-001",
          "descripcion": "Servicio mensual",
          "cantidad": 1,
          "precio_unitario": 1000,
          "alicuota_iva": 21,
          "total": 1210
        }
      ],
      "iva": [
        {
          "alicuota": 21,
          "base_imponible": 1000,
          "importe": 210
        }
      ],
      "totales": {
        "importe_neto_gravado": 1000,
        "iva_total": 210,
        "total": 1210
      }
    },
    "source": {
      "image_url": "https://dominio.com/facturas/factura-a-0001.jpg"
    },
    "credits": {
      "mode": "database",
      "consumed": 1,
      "balance_before": 100,
      "balance_after": 99,
      "movement_id": 10,
      "reference_id": "7b7f3e..."
    }
  }
}

Lector de VEPs

El endpoint api_parser_vep.php lee VEPs, Volante Electronico de Pago, y devuelve los datos visibles del volante.

URLhttps://vxtlogistica.com/api_reader/api_parser_vep.php
MetodoPOST
Costo1 credito por solicitud procesada.

Respuesta VEP

{
  "success": true,
  "data": {
    "parsed": {
      "vep": {
        "numero": "123456789012",
        "estado": "Pendiente",
        "fecha_generacion": "2026-04-10",
        "fecha_vencimiento": "2026-04-30"
      },
      "contribuyente": {
        "cuit": "30111111118",
        "razon_social": "EMPRESA SA"
      },
      "organismo": {
        "nombre": "ARCA",
        "concepto": "Volante Electronico de Pago"
      },
      "obligacion": {
        "impuesto": "IVA",
        "periodo": "04/2026"
      },
      "importes": {
        "capital": 1000,
        "intereses_resarcitorios": 0,
        "total": 1000
      }
    },
    "source": {
      "image_url": "https://dominio.com/veps/vep-04-2026.pdf"
    },
    "credits": {
      "mode": "database",
      "consumed": 1,
      "balance_before": 100,
      "balance_after": 99,
      "movement_id": 11,
      "reference_id": "7b7f3e..."
    }
  }
}

Campos habituales

GrupoDatos habituales
vepNumero, estado, fecha de generacion, vencimiento, codigo de barras, QR, entidad y canal de pago.
contribuyenteCUIT, razon social, condicion y domicilio.
generadorCUIT, razon social, usuario y dependencia.
pagadorCUIT, razon social, banco, cuenta y medio de pago.
organismoNombre, codigo, dependencia y concepto.
obligacionImpuesto, recurso, concepto, subconcepto, formulario, periodo, anticipo y cuota.
importesCapital, intereses, multas, otros y total.
detalleFilas visibles de conceptos u obligaciones.
pagosPagos visibles con fecha, banco, comprobante, importe y estado.

Evidencia opcional

Por defecto, la API no devuelve metadatos de evidencia para mantener compatibilidad con clientes existentes. Si el request trae include_evidence: true, agrega _meta y quality.

{
  "image_url": "https://dominio.com/facturas/factura-a-0001.jpg",
  "include_evidence": true
}
{
  "comprobante": {
    "punto_venta": "0056",
    "numero": "00018287",
    "_meta": {
      "punto_venta": {
        "confidence": 0.96,
        "evidence": "0056 - 00018287"
      },
      "numero": {
        "confidence": 0.94,
        "evidence": "0056 - 00018287"
      }
    }
  },
  "quality": {
    "overall_confidence": 0.91,
    "needs_review": false,
    "low_confidence_fields": []
  }
}
CampoDescripcion
confidenceNumero entre 0 y 1. Es una estimacion del modelo, no una garantia matematica.
evidenceTexto visible usado para justificar el valor extraido.
overall_confidenceEstimacion general de la calidad del parseo completo.
needs_reviewtrue cuando hay campos dudosos o inconsistencias entre partes del comprobante.
low_confidence_fieldsLista de campos que conviene revisar manualmente.
La mejora de punto de venta y numero aplica siempre, aun sin include_evidence. Para comprobantes argentinos, el parser prioriza el patron Punto de venta - Numero, por ejemplo 0056 - 00018287. El codigo de tipo, como 001, se guarda en codigo_tipo y no debe confundirse con el punto de venta.

Campos parseados

La estructura puede variar segun el comprobante y la calidad de imagen. Los grupos esperados son:

GrupoDatos habituales
comprobanteTipo, letra, codigo, punto de venta, numero, fechas, CAE, moneda, cotizacion y concepto.
emisorRazon social, CUIT, ingresos brutos, inicio de actividades, condicion IVA, domicilio y contacto.
receptorRazon social, CUIT o documento, condicion IVA, domicilio, condicion de venta y email.
itemsCodigo, descripcion, cantidad, unidad, precio unitario, bonificacion, IVA y total por renglon.
ivaAlicuotas, bases imponibles e importes.
tributosPercepciones, impuestos internos u otros tributos visibles.
totalesSubtotal, neto gravado, exento, no gravado, IVA, tributos, descuentos y total.
comprobantes_asociadosComprobantes relacionados en notas de credito o debito.
exportacionDatos especificos de factura E: destino, incoterms, forma de pago, cliente exterior y observaciones.
raw_textTexto OCR relevante detectado en la imagen.

Token OpenAI opcional

Normalmente no hace falta enviar token OpenAI: el servicio usa el token configurado en la API. Si el cliente necesita usar su propio token, puede enviarlo en el body.

{
  "image_url": "https://dominio.com/facturas/factura-a-0001.jpg",
  "openai_token": "sk-..."
}
Enviar openai_token solo desde servidores propios. No incluirlo en apps web o moviles expuestas al usuario final.

Errores frecuentes

ErrorHTTPSignificado
UNAUTHORIZED401Falta client/secret o las credenciales son invalidas.
INSUFFICIENT_CREDITS402El cliente no tiene creditos disponibles.
INVALID_JSON422El body no es JSON valido.
MISSING_IMAGE_URL422No se envio image_url ni url.
INVALID_IMAGE_URL422La URL no es valida o no usa HTTP/HTTPS.
OPENAI_TOKEN_MISSING500No hay token OpenAI configurado y tampoco se envio openai_token.
INTERNAL_ERROR500Error interno o rechazo de OpenAI.

Ejemplo sin creditos

{
  "success": false,
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "No hay creditos disponibles.",
    "credits": {
      "balance": 0,
      "required": 1
    }
  }
}

Recomendaciones

  • Usar imagenes nitidas, sin cortes y con el comprobante completo visible.
  • Evitar fotos torcidas, borrosas o con sombras fuertes.
  • Subir la imagen a una URL temporal privada pero accesible para la API.
  • No asumir que todos los campos van a venir siempre: validar campos opcionales en la integracion.
  • Guardar la respuesta completa para auditoria si el sistema del cliente necesita trazabilidad.