Skip to main content
Finance writes can create invoices, allocate credits, trigger payment links, touch payment-provider validation, and send emails. Public API v1 therefore exposes guarded write endpoints instead of raw finance controller payloads. The authenticated company is always derived from the Bearer token. Public requests must not include companyId, addedByCoach, price, or VAT fields.

Scopes

Finance write guardrails

Finance write endpoints reject these caller-supplied fields:
Pricing and VAT come from the stored FITsociety product. Payment methods that require provider-side validation keep the existing payment-provider readiness, direct debit limit, IBAN, and BIC checks.

List invoices

Required scope: finance_invoices:read Query parameters: Response fields:

List client invoices

Required scope: finance_invoices:read The response uses data.page, data.limit, data.total, data.totalPages, data.hasNextPage, data.hasPrevPage, and data.invoices[] entries with invoiceId, invoiceNumber, invoiceType, status, paymentStatus, totalPrice, totalVat, currency, issueDate, dueDate, paymentMethod, title, client, subscriptionId, clientProductId, paymentTransactionId, pdfAvailable, source, createdAt, and updatedAt. The clientId path parameter must belong to the authenticated company.

Get invoice

Required scope: finance_invoices:read Response fields: The invoice detail endpoint does not return pdfLink, raw provider payloads, payment-provider snapshots, billing-profile snapshots, internal notes, or history arrays.

Get invoice PDF metadata

Required scope: finance_invoice_pdfs:read This endpoint returns a short-lived URL for an existing invoice PDF. It does not generate PDFs, does not append invoice history, and does not modify the invoice. If no PDF is stored yet, the response is 404 PDF_NOT_AVAILABLE. Response fields:

Send invoice reminder

Required scope: finance_invoice_messages:write Request body: Validation: Response fields:

Resend invoice copy

Required scope: finance_invoice_messages:write This endpoint accepts the Send invoice reminder request contract: optional notifyClient and optional clientMessage, with unknown fields rejected. The response uses data.delivery.type = invoice_copy and returns data.delivery.status, data.delivery.sentAt, and data.invoice.* with invoiceId, invoiceNumber, invoiceType, status, paymentStatus, totalPrice, totalVat, currency, issueDate, dueDate, paymentMethod, title, client, subscriptionId, clientProductId, paymentTransactionId, pdfAvailable, source, createdAt, and updatedAt.

List payments

Required scope: finance_payments:read Query parameters: page, limit (max 100), dateFrom, dateTo (max 366 days), clientId, invoiceId, and status. Response fields: Payment responses never include raw payment-provider payloads, customer IDs, mandate IDs, provider snapshots, or internal notes.

Get payment

Required scope: finance_payments:read Response fields:

List payment requests

Required scope: finance_payment_requests:read Query parameters: page, limit (max 100), status, and clientId when filtering linked-client requests. Response fields: Not exposed: public tokens, checkout/public URLs, return/webhook URLs, provider responses, payment transaction IDs, or ledger account IDs.

Get payment request

Required scope: finance_payment_requests:read Response fields:

Create payment request

Required scope: finance_payment_requests:write Request body: Forbidden caller-supplied fields: productPrice, price, priceExcVat, priceVat, vat, and vatPercentage. Unknown fields are rejected. Response fields: List and get endpoints never return checkout/public URLs.

Cancel payment request

Required scope: finance_payment_requests:write Request body: The payment request must belong to the authenticated company. Linked-client requests also require client access. Response fields:

List chargebacks

Required scope: finance_chargebacks:read Query parameters: page, limit (max 100), status, and clientId. Response fields: Not exposed: provider IDs, payment IDs, raw provider payloads, webhook payloads, or notification timestamps.

Get chargeback

Required scope: finance_chargebacks:read Response fields:

Product catalog overview

Required scope: finance_products:read This endpoint lists all active product catalog items across:
  • StoreModuleMembership
  • StoreModuleCreditPack
  • StoreModuleDay
  • StoreModuleSingle
The typed catalog endpoints below expose create, read, update, archive, and linked-client lookup for the same four product families. All catalog operations derive companyId from the access token. Clients must never send companyId. Query parameters: Envelope fields: Pagination fields: Common product response fields: Product-specific response fields: Single-product response fields: Not exposed: companyId, arbitrary coachId, coverImage, slug, popularity, ledger/accounting IDs, default billing profile IDs, availability tags, linked event templates, raw access config, service history, provider snapshots, image upload state, or any payment-provider credentials.

Product catalog endpoints

Required scopes:
  • Reads: finance_products:read
  • Creates, updates, and archives: finance_products:write
Write requests require an Idempotency-Key header. Typed list query parameters: Get supports includeArchived=true. Without it, archived products return not found.

Product catalog request fields

Common create/update fields: Membership-specific fields: Credit-pack-specific fields: Day/week-pass-specific fields: Single-session products only use the common fields. Rejected request fields include companyId, coachId, addedByCoach, payment, productPrice, priceExcVat, priceVat, vat, coverImage, slug, storeType, isDeleted, history, ledgerAccountId, defaultBillingProfileId, productAvailableTags, productAvailableEventTemplates, accessConfig, createdAt, and updatedAt. Unknown fields return PUBLIC_API_UNKNOWN_FIELDS.

Create product example

The response returns data.product.* fields from the single-product response contract on this page, plus:

Update product example

Patch requests are partial. An empty patch returns PUBLIC_API_NO_FIELDS_TO_UPDATE.

Archive product example

DELETE is a soft archive. It sets isArchived: true in the Public API DTO and does not remove existing client products, subscriptions, invoices, payments, or credit history. Archive response fields:

Product linked clients

Required scope: finance_products:read Use the matching path for memberships, day/week passes, or single sessions. Query parameters: Response fields: Not exposed: client email, phone, address, birth date, health data, billing profile snapshots, payment provider snapshots, benefit snapshots, legal signatures, agreement document snapshots, provider transaction IDs, SEPA IDs, idempotency keys, internal notes, email messages, or history arrays.

List assigned client products

Required scope: finance_products:read Response fields: Not exposed: billing snapshots, payment-provider snapshots, legal signatures, agreement documents, payment transaction IDs, idempotency keys, SEPA IDs, internal notes, email message bodies, or history arrays.

Get assigned client product

Required scope: finance_products:read Response fields:

List masked bank account status

Required scope: finance_payment_methods:read Response fields: Not exposed: raw IBAN, BIC, mandate IDs, provider customer IDs, disabled-by actor IDs, provider responses, or payment-provider payloads.

List subscriptions

Required scope: finance_subscriptions:read Query parameters: Response fields:

Get subscription

Required scope: finance_subscriptions:read Response fields:

Request subscription pause

Required scope: finance_subscription_actions:write This endpoint creates a membership action request for review. It does not directly pause billing, change subscription status, allocate credits, or mutate payment-provider state. Request body: Response fields:

Request subscription cancellation

Required scope: finance_subscription_actions:write This endpoint creates a membership action request for review. It does not directly cancel the subscription. Request body: Response fields:

Assign membership

Required scope: finance_memberships:write Request body: Response fields:

List client credits

Required scope: finance_credits:read Query parameters: Response fields:

List credit mutations

Required scope: finance_credits:read Query parameters: page, limit (max 100), creditId, dateFrom, dateTo (max 366-day range). Response fields:

Adjust credits

Required scope: finance_credits:write Request body: Response fields:

Assign product

Required scope: finance_products:write Supported product types: StoreModuleCreditPack, StoreModuleDay, StoreModuleSingle. Response fields:

Revoke product

Required scope: finance_products:write Supported revocations: Request body: Response fields: