GET /transactions

Get all transactions

Retrieve a paginated list of accounting transactions for the authenticated user's account, ordered by created_at descending (most recent first).

Opt-in per-label filtering: pass any of filter[label_id], filter[release_id], filter[isrc] or filter[upc] to switch to server-recomputed per-label REVENUE rows sourced from the royalty line-item layer (one row per payment period). Filtered rows carry a scope of label, transaction_type of REVENUE, a single monetary gross_usd, and a meta.gross_definition discriminator; ledger balance_before/balance_after are null. gross_usd matches the customer-facing UI + CSV column of the same name: gross revenue AFTER the statement-provider fee (e.g. Merlin/Orchard) and BEFORE LabelGrid platform/UGC fees; net revenue (after LabelGrid fees) and the final payout are on the statements endpoint. filter[start_date]/filter[end_date] (Y-m-d) narrow by payment period and require an entity filter. Only labels you directly own are visible; an unowned label_id/release_id returns 404 and an unowned upc/isrc returns an empty data array. With no filter the response is unchanged.

This endpoint returns one of two shapes depending on whether an entity filter is present. The @response schema below is the union of both — filtered-only keys (scope, period, gross_usd) and the filtered meta fields (scope, filter, gross_definition, note) are present only in filtered mode, and every ledger field is nullable so a filtered row (where those fields are null) validates against the same schema.

Per-release rollup: add group_by=release (which requires filter[label_id]) to get one REVENUE row per release under that label, grouped by payment period, instead of one per-label total. Amounts not attributable to a specific release (and any per-release rounding residue) surface as an explicit remainder row with release_id: null per period — never silently apportioned or dropped — so the per-release rows plus the remainder always sum exactly to the per-label total the non-grouped path returns for the same filters. Grouped rows carry scope: "release" and a release_id (null on the remainder row); meta adds group_by: "release". Any other group_by value, or group_by=release without filter[label_id], returns 422.

Parameters

Responses