Factuarea API
Facturas de compra

Listar todas las facturas de compra

Lista las facturas de compra recibidas de proveedores con paginación por cursor.

GET
/purchase_invoices
AuthorizationBearer <token>

En: header

Parámetros de consulta

limit?integer

Número de objetos a devolver. Entero entre 1 y 100. Por defecto 25.

Predeterminado25
Rango1 <= value <= 100
starting_after?string

Cursor para paginación hacia delante. Usa el uuid del último objeto de la página anterior.

Formatouuid
ending_before?string

Cursor para paginación hacia atrás. Usa el uuid del primer objeto de la página actual.

Formatouuid
status?string

Estado de la factura de compra. Coincidencia exacta en status.

status[in]?string

Estado de la factura de compra. Lista separada por comas. Coincide cualquiera de los valores.

supplier_id?string

ID del proveedor (UUID v7). Coincidencia exacta en supplier_id.

Formatouuid
supplier_id[in]?string

ID del proveedor (UUID v7). Lista separada por comas. Coincide cualquiera de los valores.

created[gte]?string

Fecha de creación (ISO 8601). Mayor o igual que el valor dado.

Formatodate-time
created[lte]?string

Fecha de creación (ISO 8601). Menor o igual que el valor dado.

Formatodate-time
created[gt]?string

Fecha de creación (ISO 8601). Estrictamente mayor que el valor dado.

Formatodate-time
created[lt]?string

Fecha de creación (ISO 8601). Estrictamente menor que el valor dado.

Formatodate-time
issued_on[gte]?string

Fecha de emisión. Mayor o igual que el valor indicado.

Formatodate
issued_on[lte]?string

Fecha de emisión. Menor o igual que el valor indicado.

Formatodate
issued_on[gt]?string

Fecha de emisión. Estrictamente mayor que el valor indicado.

Formatodate
issued_on[lt]?string

Fecha de emisión. Estrictamente menor que el valor indicado.

Formatodate
total[gte]?number

Importe total. Mayor o igual que el valor dado.

total[lte]?number

Importe total. Menor o igual que el valor dado.

total[gt]?number

Importe total. Estrictamente mayor que el valor dado.

total[lt]?number

Importe total. Estrictamente menor que el valor dado.

currency?string

Código de moneda ISO 4217. Coincidencia exacta con currency.

currency[in]?string

Código de moneda ISO 4217. Lista separada por comas. Coincide cualquiera de los valores.

external_invoice_number?string

Número de factura emitido por el proveedor. Coincidencia exacta con external_invoice_number.

tags?string

Filtrar por tag de clasificación (slug en minúscula). Admite múltiples valores con tags[in]=a,b (JSON_CONTAINS, semántica OR — coincide con las facturas de compra que llevan CUALQUIERA de los tags). Coincidencia exacta sobre tags.

tags[in]?string

Filtrar por tag de clasificación (slug en minúscula). Admite múltiples valores con tags[in]=a,b (JSON_CONTAINS, semántica OR — coincide con las facturas de compra que llevan CUALQUIERA de los tags). Lista separada por comas. Coincide cualquiera de los valores.

sort?string

Orden de los resultados. Usa un campo para ascendente o un prefijo - para descendente (p. ej. -created). Campos permitidos: created, total, issued_on, due_on. Combinado con el cursor, el orden se mantiene determinista (un orden secundario estable por el id del cursor, al estilo Stripe). Si se omite, los resultados siguen el orden de cursor por defecto (created descendente).

Valor en"created" | "-created" | "total" | "-total" | "issued_on" | "-issued_on" | "due_on" | "-due_on"

Cuerpo de la respuesta

application/json

application/json

application/json

application/json

application/json

application/json

{
  "data": [
    {
      "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a07",
      "object": "purchase_invoice",
      "external_invoice_number": "INV-2026-001-DI",
      "external_id": "ERP-COMPRA-2026-0007",
      "internal_code": "GASTO-2026-0007",
      "supplier": {
        "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a02",
        "name": "Distribuciones Ibéricas, S.L."
      },
      "status": "paid",
      "issued_on": "2026-01-05",
      "received_on": "2026-04-18",
      "due_on": "2026-02-04",
      "subtotal": 350,
      "taxes_total": 73.5,
      "total_retention": 0,
      "total": 423.5,
      "currency": "EUR",
      "paid_amount": 423.5,
      "pending_amount": 0,
      "payment_status": "paid",
      "paid_at": "2026-01-10",
      "payment_method": "transferencia",
      "payment_terms_days": 30,
      "bank_account": null,
      "expense_account": "6280001",
      "expense_category_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8c01",
      "deductible_percentage": 100,
      "operation_class": "corriente",
      "exclude_347": false,
      "tax_period": "2026-Q2",
      "is_reverse_charge": false,
      "tags": [
        "suministros",
        "oficina"
      ],
      "custom_fields": [
        {
          "field": "centro_coste",
          "value": "CC-OFICINA"
        }
      ],
      "internal_notes": "Revisar con contabilidad antes del cierre trimestral.",
      "attachment": {
        "filename": "factura-suministros-abril-2026.pdf",
        "mime_type": "application/pdf",
        "size_bytes": 241,
        "download_url": "/v1/purchase_invoices/019e822c-555a-709d-99d7-2cfeac9fc920/file"
      },
      "lines": [
        {
          "object": "purchase_invoice_line",
          "description": "Material oficina pedido Q1",
          "quantity": 1,
          "unit_price": 350,
          "tax_rate": 21,
          "retention_rate": 0,
          "subtotal": 350,
          "taxes": 73.5,
          "retention_amount": 0,
          "vat_deductible": true,
          "total": 423.5
        }
      ],
      "metadata": {
        "erp_code": "IVA-GEN",
        "ledger_account": "477000"
      },
      "notes": "Pedido material oficina Q1.",
      "created_at": "2026-01-08T10:00:00Z",
      "updated_at": "2026-01-10T12:00:00Z"
    }
  ],
  "has_more": true,
  "next_cursor": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0c"
}

{
  "error": {
    "type": "authentication_error",
    "code": "missing_api_key",
    "message": "No se ha proporcionado una API key válida en el header Authorization.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#missing_api_key",
    "request_id": "req_01HKQS5N8VR7QXJ9K3T6BWPMZA"
  }
}

{
  "error": {
    "type": "authorization_error",
    "code": "insufficient_scope",
    "message": "Esta API key no tiene el scope requerido para esta operación.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#insufficient_scope",
    "request_id": "req_01HKQS5NBC3P8M1KX4V7SLNHQD"
  }
}

{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "El campo `name` es obligatorio y no puede estar vacío.",
    "param": "name",
    "doc_url": "https://docs.factuarea.com/guides/errors#parameter_invalid",
    "request_id": "req_01HKQS5NGS8Z3T6Q1D2E7FYVSI"
  }
}

{
  "error": {
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded",
    "message": "Has excedido el rate limit de 60 peticiones por minuto. Reintenta tras 30 segundos.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#rate_limit_exceeded",
    "request_id": "req_01HKQS5NKW1C6W9T4G5H0JBZVL"
  }
}

{
  "error": {
    "type": "api_error",
    "code": "internal_error",
    "message": "Ha ocurrido un error inesperado. Si persiste, contacta con soporte adjuntando el request_id.",
    "param": null,
    "doc_url": "https://docs.factuarea.com/guides/errors#internal_error",
    "request_id": "req_01HKQS5NLX2D7X0U5H6J1KCAWM"
  }
}