List all recurring invoices
List your recurring invoice templates with cursor-based pagination.
In: header
Query Parameters
Number of objects to return. Integer between 1 and 100. Defaults to 25.
251 <= value <= 100Cursor for forward pagination. Use the uuid of the last object on the previous page.
uuidCursor for backward pagination. Use the uuid of the first object on the current page.
uuidRecurring plan status. Exact match on status.
Recurring plan status. Comma-separated list. Any of the values matches.
Client ID (UUID v7). Exact match on client_id.
uuidClient ID (UUID v7). Comma-separated list. Any of the values matches.
Issuance frequency (e.g. monthly, yearly). Exact match on frequency.
Issuance frequency (e.g. monthly, yearly). Comma-separated list. Any of the values matches.
Next run date. Greater than or equal to the given value.
date-timeNext run date. Less than or equal to the given value.
date-timeNext run date. Strictly greater than the given value.
date-timeNext run date. Strictly less than the given value.
date-timeFilter by classification tag (lowercase slug). Supports multiple values with tags[in]=a,b (JSON_CONTAINS, OR semantics — matches recurring invoices carrying ANY of the tags). Exact match on tags.
Filter by classification tag (lowercase slug). Supports multiple values with tags[in]=a,b (JSON_CONTAINS, OR semantics — matches recurring invoices carrying ANY of the tags). Comma-separated list. Any of the values matches.
Sort order. Use a field for ascending or a - prefix for descending (e.g. -created). Allowed fields: created, next_run_at. Combined with the cursor, ordering stays deterministic (a stable secondary sort by the cursor id, Stripe-style). When omitted, results follow the default cursor order (created descending).
"created" | "-created" | "next_run_at" | "-next_run_at"Response Body
application/json
application/json
application/json
application/json
application/json
application/json
import { Factuarea } from "@factuarea/sdk";const factuarea = new Factuarea({ apiKey: process.env.FACTUAREA_API_KEY! });// List endpoints return an async-iterable Page (cursors handled for you).for await (const item of await factuarea.recurringInvoices.list({ limit: 25 })) { console.log(item.id);}{
"data": [
{
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a08",
"object": "recurring_invoice",
"client": {
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a01",
"name": "Acme Corporation"
},
"series": {
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0e",
"code": "F-2026"
},
"status": "active",
"frequency": "monthly",
"name": "Cuota mantenimiento mensual Acme",
"description": "Contrato de soporte y mantenimiento Plan Pro",
"notes": "Renovación automática. Facturar el día 1 de cada mes.",
"email_to": "facturacion@acme.example",
"send_automatically": true,
"days_before_due": 30,
"max_occurrences": 12,
"occurrences_count": 3,
"remaining_occurrences": 9,
"holiday_handling": "next_business_day",
"start_on": "2026-01-01",
"end_on": "2026-12-31",
"next_run_at": "2026-02-01T09:00:00Z",
"last_run_at": "2026-01-01T09:00:00Z",
"cancelled_at": null,
"subtotal": 200,
"taxes_total": 42,
"total": 242,
"currency": "EUR",
"lines": [
{
"object": "recurring_invoice_line",
"description": "Cuota soporte mensual",
"quantity": 1,
"unit_price": 200,
"tax_rate": 21,
"retention": 0,
"surcharge": 0,
"subtotal": 200,
"taxes": 42,
"total": 242
}
],
"metadata": {
"erp_code": "IVA-GEN",
"ledger_account": "477000"
},
"external_id": "ERP-REC-2026-0008",
"tags": [
"suscripcion",
"mantenimiento"
],
"custom_fields": [
{
"field": "contrato",
"value": "CTR-2026-0007"
}
],
"created_at": "2025-12-20T15:00:00Z",
"updated_at": "2026-01-01T09:05: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"
}
}