Tabba.
IntegrationerSådan virker TabbaFeatures

© 2026 Tabba. Alle rettigheder forbeholdes.

Udviklere
Udviklere
Udviklere
Overview
Take a line of a recurring series away DELETEList the recurring series of the company GETRead one recurring series GETList the occurrences of a recurring series GETRead one occurrence of a recurring series GETChange the header fields of a recurring series that the body states PATCHChange a line of a recurring series PATCHCreate a recurring series POSTCancel a recurring series POSTAdd a line to a recurring series POSTIssue an occurrence of a recurring series now POST

Andre spor

AI clientsREST API
Recurring series

Change a line of a recurring series

The fields the body states are changed as the line stands on the occurrence period names. With this-and-following the change holds from that occurrence on, and earlier occurrences keep what they had. With this-only it holds on that occurrence alone, and what the line says before and after is left as it is. The result is what the same edit in the workspace leaves: on the first occurrence every change is the line’s own start, whatever scope is asked; the product always holds from the occurrence on; and a field an occurrence already states for itself stays its own until that field is changed for this and following. A one-time line is on one occurrence, so either scope changes it in place. The same change sent again writes nothing more. Refused with OCCURRENCE_ISSUED (409) when the occurrence is issued, and with SERIES_LINE_NOT_FOUND (404) when the line is not on that occurrence.

PATCH
/recurring-series/{ref}/lines/{lineRef}

Authorization

bearerAuth
AuthorizationBearer <token>

An API key minted by an admin under Settings → Developers. It is bound to one company and has a scope: read, or read_write. A request without one, or with one that is not ours, is answered 401 and metered by its client address (x-rate-limits).

In: header

Path Parameters

ref*string

The record's id, or ext:<external_id> for the record that carries your own key.

lineRef*string

The id of a recurring line, or the line_id of a one-time line as its occurrence states it.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/recurring-series/string/lines/string" \  -H "Content-Type: application/json" \  -d '{    "scope": "this-and-following",    "period": "string",    "line": {}  }'
{  "object": "series_line",  "id": "string",  "kind": "series",  "scope": "this-and-following",  "period": "string",  "series_status": "draft"}

Change the header fields of a recurring series that the body states PATCH

A field the body leaves out stays as it is. The lines are not touched, except that a change of `start_date` or `frequency` moves every period and so resets each line to what it started with. Once the series has issued an invoice its customer, currency, schedule and title are locked (`SERIES_SETUP_LOCKED`, 409); `layout_ref` never is. Moving `end_date` on such a series ends it by that date, exactly as the cancel route does, with the credit notes an end books; the cancel route is the one that reports them. A schedule that leaves out occurrences with registered work is refused (`SCHEDULE_DROPS_REGISTERED_WORK`, 409) until the body states `acknowledge_dropped_work`, and a change met by an occurrence that is being issued is refused whole (`ISSUE_IN_PROGRESS`, 409).

Create a recurring series POST

A series is Tabba’s own record: nothing is asked of the accounting platform until one of its occurrences is issued. With an `external_id` no series carries, the series is created active with its lines, each complete, and the answer is 201; occurrences whose period has started are invoices at once. With one a series carries, the header of that series is saved, as `PATCH` saves it, and the answer is 200: **its lines are left as they are**. A line has a timeline of its own, so the lines of a series that exists are changed through the line routes. Two creates under one `external_id` at the same moment make one series.

scope*string

this-and-following: from the occurrence period names, onward. this-only: on that occurrence alone.

Value in

  • "this-and-following"
  • "this-only"
period*string

The occurrence the change holds from: the first day of its billing period, YYYY-MM-DD.

Match^\d{4}-\d{2}-\d{2}$
line*

A field left out stays as the occurrence has it. assignees, where stated, is the whole roster.