CAPÍTULO 04

Crear con líneas, marcar pagada, rectificativa y exportar PDF

04 — Facturas

Las facturas son el recurso más usado de la API. Beply expone tanto operaciones genéricas REST (GET, POST, PUT, DELETE sobre /facturaclientes o /facturaproveedores) como endpoints especializados para los flujos completos (crear factura con líneas, marcar como pagada, rectificativa, exportar PDF).

Todas las facturas emitidas vía API se procesan en VeriFactu (o TicketBAI/SII según domicilio fiscal): hash, encadenado, QR y envío a Hacienda son automáticos.

Crear una factura de cliente

Endpoint dedicado que crea cabecera y líneas en una sola llamada.

Petición

POST https://<tu-instancia>.beply.es/api/3/crearFacturaCliente
Content-Type: application/x-www-form-urlencoded
Token: <tu-api-key>

Campos del body

CampoTipoRequeridoDescripción
codclientestringCódigo del cliente al que se factura
lineasJSON stringArray JSON con las líneas (ver abajo)
pagadaint1 si está cobrada al emitir, 0 (default) si pendiente
fechadateFecha de emisión, por defecto hoy. Envío: YYYY-MM-DD (ej. 2026-05-20).
horatime (HH:MM:SS)Hora de emisión
codpagostringForma de pago (TRANSF, EFECT, TARJETA…)
codseriestringSerie de facturación
direccion, ciudad, provincia, codpostalstringDatos del destinatario si difieren del cliente

Estructura de cada línea

CampoTipoRequeridoDescripción
referenciastring✅ (o descripcion)Referencia de un producto del catálogo
descripcionstring✅ (o referencia)Texto libre si la línea no es un producto
cantidadnumberPor defecto 1
pvpunitarionumberPrecio por unidad. Si la línea referencia un producto, se toma del catálogo
dtopornumberDescuento %
dtopor2numberSegundo descuento % (en cascada)
codimpuestostringCódigo del IVA aplicable (IVA21, IVA10…)
irpfnumber% de retención IRPF

Ejemplo con cURL

curl https://miempresa.beply.es/api/3/crearFacturaCliente \
  -H "Token: a1b2c3d4..." \
  -d "codcliente=1" \
  -d 'lineas=[{"referencia":"PROD-001","cantidad":2},{"descripcion":"Mano de obra","cantidad":1,"pvpunitario":35.00,"codimpuesto":"IVA21"}]' \
  -d "pagada=0" \
  -d "codpago=TRANSF"

Ejemplo con JavaScript

const params = new URLSearchParams()
params.set('codcliente', '1')
params.set('lineas', JSON.stringify([
  { referencia: 'PROD-001', cantidad: 2 },
  { descripcion: 'Mano de obra', cantidad: 1, pvpunitario: 35.00, codimpuesto: 'IVA21' },
]))
params.set('pagada', '0')
params.set('codpago', 'TRANSF')

const res = await fetch('https://miempresa.beply.es/api/3/crearFacturaCliente', {
  method: 'POST',
  headers: { 'Token': 'a1b2c3d4...' },
  body: params,
})
const factura = await res.json()

Respuesta de éxito (HTTP 200)

crearFacturaCliente devuelve la factura y sus líneas en dos campos separados:

{
  "doc": {
    "idfactura": "1",
    "codigo": "FAC2026A1",
    "codcliente": "1",
    "codejercicio": "2026",
    "codserie": "A",
    "numero": "1",
    "fecha": "20-05-2026",
    "hora": "14:27:16",
    "neto": 85,
    "totaliva": 17.85,
    "total": 102.85,
    "pagada": false,
    "vencida": true,
    "editable": true,
    "codpago": "TRANSF",
    "codalmacen": "ALG",
    "coddivisa": "EUR"
  },
  "lines": [
    {
      "idlinea": 1,
      "idfactura": 1,
      "referencia": "PROD-001",
      "descripcion": "Producto del catálogo",
      "cantidad": 2,
      "pvpunitario": 25,
      "pvptotal": 50,
      "iva": 21,
      "codimpuesto": "IVA21"
    },
    {
      "idlinea": 2,
      "idfactura": 1,
      "descripcion": "Mano de obra",
      "cantidad": 1,
      "pvpunitario": 35,
      "pvptotal": 35,
      "iva": 21,
      "codimpuesto": "IVA21"
    }
  ]
}

📋 Notas sobre la respuesta:

  • Tipos: idfactura viene como string ("1") dentro de doc, pero como int (1) dentro de cada línea. Es asimetría heredada — si compilas en TypeScript estricto, normaliza al recibir (Number(doc.idfactura)).
  • Formato de fechas: envías en YYYY-MM-DD (ISO), pero las respuestas vienen en DD-MM-YYYY. Si tu integración necesita un formato concreto, conviértelo al recibir. Ver README — Formato de fechas.
  • Código de factura: sigue el patrón FAC{año}{serie}{numero} (ej. FAC2026A1).
  • IVA: se calcula automáticamente al aplicar codimpuesto.
  • VeriFactu: si la cuenta lo tiene activado, los campos hash, qr_url y datos de envío a la AEAT se devuelven dentro de doc.

Marcar una factura como pagada

POST https://<tu-instancia>.beply.es/api/3/pagarFacturaCliente/<idfactura>

Body

CampoTipoRequeridoDescripción
fechapagodateFecha en la que se cobró. Envío: YYYY-MM-DD.
codpagostringForma de pago (TRANSF, EFECT, TARJETA…)
pagadaint1 para marcar pagada, 0 para revertir

Ejemplo

curl https://miempresa.beply.es/api/3/pagarFacturaCliente/5821 \
  -H "Token: a1b2c3d4..." \
  -d "fechapago=2026-05-25" \
  -d "codpago=TRANSF" \
  -d "pagada=1"

Para facturas de proveedor usa pagarFacturaProveedor/<id> con los mismos campos.

Crear factura rectificativa

POST https://<tu-instancia>.beply.es/api/3/crearFacturaRectificativaCliente

Body

CampoTipoRequeridoDescripción
idfacturaintID de la factura original a rectificar
fechadateFecha de la rectificación
horatimeHora
refund_<idlinea>numberCantidad a devolver de la línea con ID <idlinea>

Ejemplo: devolver 2 unidades de la línea 1782

curl https://miempresa.beply.es/api/3/crearFacturaRectificativaCliente \
  -H "Token: a1b2c3d4..." \
  -d "idfactura=5821" \
  -d "fecha=2026-05-22" \
  -d "refund_1782=2"

La rectificativa se enlaza automáticamente con la original mediante el campo idfacturarect.

ℹ️ Sobre las líneas: solo se incluyen en la rectificativa las líneas que indiques con refund_<idlinea>. Las líneas de la factura original que NO referencias quedan como están (no se rectifican). Para una rectificación total, envía un refund_<idlinea> por cada línea de la factura original con la cantidad completa.

Comprobar si una factura ya fue rectificada

curl "https://miempresa.beply.es/api/3/facturaclientes?filter[idfacturarect]=5821" \
  -H "Token: a1b2c3d4..."

Si la respuesta es una lista vacía, no ha sido rectificada.

Exportar el PDF de una factura

GET https://<tu-instancia>.beply.es/api/3/exportarFacturaCliente/<idfactura>

Parámetros opcionales (query string)

ParamDefaultDescripción
typePDFFormato: PDF, XLS, CSV
langconfiguradoCódigo de idioma (es_ES, en_EN…)
formatpredeterminadoID numérico de un formato de impresión personalizado

Ejemplo

curl https://miempresa.beply.es/api/3/exportarFacturaCliente/5821?type=PDF \
  -H "Token: a1b2c3d4..." \
  -o factura.pdf

La respuesta es un binario (el archivo en sí), no JSON.

Endpoints análogos para otros documentos:

  • exportarAlbaranCliente/<id>
  • exportarPedidoCliente/<id>
  • exportarPresupuestoCliente/<id>
  • exportarFacturaProveedor/<id>

Disponible desde la versión 2024.5 del motor.

Listar y filtrar facturas

Usa la operación genérica GET /api/3/facturaclientes con los parámetros de 02 — Listar, filtrar y ordenar.

Ejemplos útiles

Facturas pendientes de cobro de los últimos 30 días:

GET /api/3/facturaclientes?filter[pagada]=0&filter[fecha_gte]=2026-04-20

Facturas de un cliente concreto ordenadas por fecha desc:

GET /api/3/facturaclientes?filter[codcliente]=1&sort[fecha]=DESC

Facturas con importe superior a 1.000 €:

GET /api/3/facturaclientes?filter[total_gt]=1000

Facturas de proveedor

Todos los endpoints anteriores tienen su equivalente para proveedores:

ClienteProveedor
crearFacturaClientecrearFacturaProveedor
pagarFacturaCliente/<id>pagarFacturaProveedor/<id>
crearFacturaRectificativaClientecrearFacturaRectificativaProveedor
exportarFacturaCliente/<id>exportarFacturaProveedor/<id>
/api/3/facturaclientes/api/3/facturaproveedores

El campo de cliente (codcliente) se reemplaza por codproveedor.

Próximos pasos

¿Te ha resultado útil esta página?

¿Aún tienes dudas?

Habla con nuestro equipo y te resolvemos cualquier duda al instante.