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

Issue an occurrence of a recurring series now

The occurrence is made an invoice if it is not one yet, and that invoice is issued as POST /invoices/{ref}/issue issues one: the answer is the issued invoice, sending it again is safe, and a document that booked and could not be delivered is a 200 carrying send_error. An occurrence made an invoice by an attempt that did not book stays an invoice, and the next attempt issues that one. Refused with OCCURRENCE_SKIPPED (409) for an occurrence an admin skipped, SERIES_NOT_ACTIVE (409) for a draft series and OCCURRENCE_HAS_NO_LINES (422) where the series states no line for the occurrence. Metered against the platform_write bucket as well as default.

POST
/recurring-series/{ref}/occurrences/{period}/issue

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.

period*string

The first day of the occurrence’s billing period, YYYY-MM-DD, as a list of occurrences states it.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/recurring-series/string/occurrences/string/issue"
{  "object": "invoice",  "id": "string",  "external_id": "string",  "customer_id": "string",  "customer_name": "string",  "currency": "string",  "issue_date": "string",  "title": "string",  "auto_send": true,  "layout_ref": "string",  "status": "draft",  "issued_at": "string",  "platform_ref": "string",  "platform_number": -9007199254740991,  "send_error": {    "reason": "string",    "platform_reason": "string"  },  "series_id": "string",  "period_from": "string",  "period_to": "string",  "created_at": "string",  "updated_at": "string",  "lines": [    {      "id": "string",      "product_id": "string",      "product_number": "string",      "product_name": "string",      "recognition_method": "value",      "agreed_value": 0,      "hourly_rate": 0,      "discount": 0,      "description_override": "string",      "position": -9007199254740991,      "assignees": [        {          "user_id": "string",          "distribution_percentage": 0,          "hourly_rate_override": 0,          "removed": true        }      ],      "series_line_id": "string"    }  ]}

Add a line to a recurring series POST

With `this-and-following` the line is a recurring one from the occurrence `period` names (the start of the series where it is left out): earlier occurrences never see it. With `this-only` it is a one-time line on that one occurrence. The line is placed after the lines the occurrence has: a new line never moves one that was there. Occurrences that are already invoices, and not issued, follow the change. **Not idempotent**: a line carries no key of its own, and adding twice adds two.

List the people of the company GET

Everyone who can open the key's company, each with their role in it, oldest change first: the organisation admins and every member of the company. Read-only: people are invited, removed and given a role in the workspace.