Factuarea API
Presupuestos

Listar todos los presupuestos

Lista tus presupuestos de venta con paginación por cursor. Admite filtrado por `status[in]`, `client_id`, `issued_on[gte|lte]`.

GET
/quotes
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 del presupuesto. Coincidencia exacta en status.

status[in]?string

Estado del presupuesto. Lista separada por comas. Coincide cualquiera de los valores.

client_id?string

Client ID (UUID v7). Coincidencia exacta con client_id.

Formatouuid
client_id[in]?string

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

series_id?string

Series ID (UUID v7). Coincidencia exacta con series_id.

Formatouuid
series_id[in]?string

Series ID (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
valid_until[gte]?string

Fecha de validez. Mayor o igual que el valor dado.

Formatodate
valid_until[lte]?string

Fecha de validez. Menor o igual que el valor dado.

Formatodate
valid_until[gt]?string

Fecha de validez. Estrictamente mayor que el valor dado.

Formatodate
valid_until[lt]?string

Fecha de validez. Estrictamente menor que el valor dado.

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.

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 los presupuestos 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 los presupuestos 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, number, valid_until. 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" | "number" | "-number" | "valid_until" | "-valid_until"

Cuerpo de la respuesta

application/json

application/json

application/json

application/json

application/json

application/json

{
  "data": [
    {
      "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a04",
      "object": "quote",
      "number": "P-2026-00012",
      "series": {
        "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0e",
        "code": "F-2026"
      },
      "client": {
        "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a01",
        "name": "Acme Corporation"
      },
      "status": "sent",
      "issued_on": "2026-01-18",
      "valid_until": "2026-02-17",
      "accepted_at": null,
      "rejected_at": null,
      "converted_to_id": null,
      "converted_invoice_number": "F-2025-001",
      "subtotal": 500,
      "taxes_total": 105,
      "total_vat": 105,
      "total_retention": 0,
      "total_surcharge": 0,
      "total": 605,
      "currency": "EUR",
      "notes": "Presupuesto válido 30 días.",
      "terms": "Presupuesto valido durante 30 dias desde la fecha de emision.",
      "external_id": "CRM-PRES-2026-0012",
      "lines": [
        {
          "object": "quote_line",
          "description": "Auditoría inicial",
          "product": {
            "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a09",
            "name": "Consultoría hora estándar"
          },
          "quantity": 5,
          "unit_price": 100,
          "tax_rate": 21,
          "retention_rate": 0,
          "surcharge_rate": 0,
          "discount_percent": 0,
          "subtotal": 500,
          "taxes": 105,
          "total": 605
        }
      ],
      "metadata": {
        "erp_code": "IVA-GEN",
        "ledger_account": "477000"
      },
      "tags": [
        "comercial",
        "q1-2026"
      ],
      "custom_fields": [
        {
          "field": "campania",
          "value": "Promo primavera"
        }
      ],
      "link_expires_at": "2026-07-01T09:53:57+02:00",
      "link_is_active": true,
      "created_at": "2026-01-18T16:20:00Z",
      "updated_at": "2026-01-18T16:25: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"
  }
}