Accounting integrations and export artifacts (DATEV and other providers).
List exports available across all enabled providers
Lists the export kinds offered by providers whose integration is enabled — each entry is a provider/kind pair accepted by GET /accounting/exports/{provider}/{kind}. Providers without an enabled integration contribute no entries.
Required scope: accounting.read (Read accounting integration config).
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
List exports available across all enabled providers › Responses
OK
List recent export runs for the caller's organization
Returns recorded export runs (audit records), newest first, cursor-paginated (default 50, max 200 per page). Pass the previous response's pagination.cursor back as ?cursor= to walk further back; has_more is the authoritative continuation signal. ?sort= accepts created_at with an optional :asc/:desc suffix, and a cursor is bound to the ordering that issued it.
Required scope: accounting.read (Read accounting integration config).
query Parameters
limitPage size (default 50, max 200)
cursorOpaque continuation token from the previous response's pagination.cursor. Omit for the first page. Cursors are stateless and do not expire, but are only valid for the list and filters that produced them.
sortOrdering: occurred_at, with an optional :asc/:desc suffix (default occurred_at:desc) — the audit trail's own, which the history is read from. An unknown value is rejected. Cursors are bound to the ordering that issued them, so changing sort mid-walk needs a fresh first page.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
List recent export runs for the caller's organization › Responses
OK
Stream an export artifact
Streams the export file (CSV or ZIP depending on the export kind). The X-Accounting-Summary response header carries a base64-encoded JSON summary; X-Export-Sha256 fingerprints the payload; X-Audit-Id references the recorded export run.
Required scope: accounting.read (Read accounting integration config).
path Parameters
providerProvider id
kindExport kind
query Parameters
fromDeprecated: use period.gte instead. Removed on 2026-11-30.
toDeprecated: use period.lte instead. Removed on 2026-11-30.
period.gteFirst day of the period, included (YYYY-MM-DD). Required for bookings and invoices_pdf.
period.lteLast day of the period, included (YYYY-MM-DD). Required for bookings and invoices_pdf.
posting_modeOverride the stored posting mode for this export
amount_basisOverride the stored amount basis for this export
groupingOverride the stored grouping for this export
only_billableFilter master_data to billable customers (true/1)
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Stream an export artifact › Responses
Export artifact
List accounting integrations
Returns every registered accounting provider with its settings schema and exports, and the organization's integration with it under integration (absent until first saved). The integration has the shape GET /accounting/integrations/{provider}/settings answers; include=layered adds its layered settings here too.
Required scope: accounting.read (Read accounting integration config).
query Parameters
includeExtra data to add to the response: layered. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
List accounting integrations › Responses
OK
Get a single accounting integration's config
Returns the organization's integration with one registered provider. A provider that is registered but not yet configured responds 200 with an empty config shell (the first PATCH creates it); unregistered provider ids respond 404. include=layered adds, per setting that overrides an organization fact, the value that applies and its source. layered is sent without being asked until 2026-11-30; after that date it is sent only with include=layered.
Required scope: accounting.read (Read accounting integration config).
path Parameters
providerProvider id (e.g. datev)
query Parameters
includeExtra data to add to the response: layered. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. layered is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Get a single accounting integration's config › Responses
OK
Create or update an accounting integration's config
Creates the organization's integration with the provider on first save and updates it afterwards, and answers it in the shape GET /accounting/integrations/{provider}/settings answers. The config object is validated and normalized by the provider (defaults filled in) before it is stored. status (active or disabled) says whether exports may run; it replaces is_enabled. Requires the accounting.manage or org.update permission.
Required scope: accounting.manage (Manage accounting integration config).
path Parameters
providerProvider id (e.g. datev)
query Parameters
includeExtra data to add to the response: layered. Send a comma-separated list or repeat the parameter. An unknown name is refused with 400. layered is sent without being asked until 2026-11-30; after that date it is sent only when named here.
Headers
X-Workspace-IdSelects the workspace this request operates in, by workspace UUID or slug (e.g. a sandbox workspace for test integrations). Omitted: the organization's default live workspace. Unknown workspace: 404; workspace outside your organization: 403. Discover workspaces via GET /workspaces.
Workspace UUID or slug.
Create or update an accounting integration's config › Request Body
configProvider-specific configuration, validated against the provider's settings schema before it is stored.
display_nameHuman-readable name; omitted defaults to the provider's own display name.
statusactive: exports may run against the integration; disabled (the default): they are refused.
is_enabledtrue is status active, false is status disabled. Deprecated: use status instead. Removed on 2026-11-30.
Create or update an accounting integration's config › Responses
OK