Visión general

La Verifactu API te permite generar, enviar y consultar facturas cumpliendo con Verifactu y TicketBAI. Es una API REST con autenticación por API Key y respuestas en JSON.

Base URL
https://api.verifactu-api.com/v1
Formato
JSON
Auth
Bearer <API_KEY>

Autenticación

Incluye tu API Key en la cabecera Authorization de todas las peticiones.

# curl
curl -X GET "https://api.verifactu-api.com/v1/nifs" \
  -H "Authorization: Bearer <tu_api_key>" \
  -H "Content-Type: application/json"

// JavaScript (fetch)
await fetch('https://api.verifactu-api.com/v1/nifs', {
  headers: { 'Authorization': 'Bearer '+process.env.VERIFACTU_API_KEY }
})

Errores

La API utiliza códigos HTTP estándar. En caso de error, el cuerpo incluye un objeto con code, message y, opcionalmente, details.

{
  "error": {
    "code": "invalid_recipient",
    "message": "El NIF del receptor no es válido",
    "details": { "field": "receptor.nif" }
  }
}

Sandbox

Usa el entorno de pruebas para validar tu integración sin efectos en producción.

Host
https://sandbox.verifactu-api.com/v1
Clave
sk_dev_... (no compartas tu clave pública)

Límites

Aplicamos rate limiting por plan. Si superas el límite, devolveremos 429 Too Many Requests.

Developer
100 req/min
Startup
1.000 req/min
Enterprise
Personalizado

NIFs

GET /v1/nifs

Lista los NIFs configurados en tu cuenta.

curl -s -H "Authorization: Bearer <api_key>" \
  https://api.verifactu-api.com/v1/nifs | jq
POST /v1/nifs/validate

Valida un NIF antes de generar una factura.

curl -X POST https://api.verifactu-api.com/v1/nifs/validate \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"nif":"B00000000"}'

Facturas

POST /v1/facturas

Crea una factura y la envía a Verifactu/TicketBAI según la configuración.

// Node.js
import { VerifactuAPI } from '@verifactu/sdk'
const api = new VerifactuAPI(process.env.VERIFACTU_API_KEY)

const factura = await api.facturas.crear({
  emisor: { nif: 'B00000000' },
  receptor: { nif: '00000000A', nombre: 'Cliente Demo' },
  lineas: [ { concepto: 'Servicio', cantidad: 1, precio: 9.99 } ]
})
GET /v1/facturas/{id}

Obtiene una factura por su identificador.

curl -H "Authorization: Bearer <api_key>" \
  https://api.verifactu-api.com/v1/facturas/fac_123
GET /v1/facturas/{id}/estado

Consulta el estado de procesamiento y envío.

curl -H "Authorization: Bearer <api_key>" \
  https://api.verifactu-api.com/v1/facturas/fac_123/estado

Procesamiento en lote

POST /v1/facturas/lote

Permite enviar un conjunto de facturas para procesarlas de forma asíncrona.

curl -X POST https://api.verifactu-api.com/v1/facturas/lote \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"facturas":[{"emisor":{"nif":"B00000000"},"receptor":{"nif":"00000000A","nombre":"Demo"},"lineas":[{"concepto":"Servicio","cantidad":1,"precio":9.99}]}]}'

Webhooks

Registra un endpoint para recibir eventos en tiempo real. Los webhooks están firmados y debes validar la firma antes de procesar.

POST /v1/webhooks

Registra un webhook de notificaciones.

curl -X POST https://api.verifactu-api.com/v1/webhooks \
  -H "Authorization: Bearer <api_key>" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://miapp.com/webhooks/verifactu","eventos":["factura.creada","factura.estado.actualizado"]}'
// Verificación de firma (Node.js/Express)
app.post('/webhooks/verifactu', rawBody(), (req, res) => {
  const signature = req.header('X-Verifactu-Signature')
  if (!verify(signature, req.rawBody)) return res.sendStatus(401)
  const event = JSON.parse(req.rawBody)
  handle(event)
  res.sendStatus(200)
})

SDKs

Usa nuestras librerías oficiales para acelerar tu integración y aplicar buenas prácticas por defecto.

Soporte

¿Dudas o incidencias? Escríbenos y te ayudamos rápidamente.

Canales
Email, WhatsApp y soporte prioritario según plan.