openapi: 3.0.0 servers: - description: Firefly III demo site url: https://demo.firefly-iii.org/api - description: "Local development server (do not use)" url: http://firefly.sd.internal/api info: title: Firefly III API v6.4.4 description: | This is the documentation of the Firefly III API. Please report any bugs or issues. You may use the "Authorize" button to try the API below.

Please keep in mind that the demo site does **not** accept requests from `curl`, `colly`, `wget`, etc. You must use a browser or a tool like Insomnia to make your test requests.

To learn more about the idiosyncrasies of this API, please read about the API in the [Firefly III API documentation](https://docs.firefly-iii.org/references/firefly-iii/api/).

This file was last generated on 2025-11-01 @ 20:51:03 (Europe/Amsterdam) version: "v6.4.4" contact: name: James Cole email: james@firefly-iii.org url: https://firefly-iii.org license: name: AGPLv3 url: 'https://www.gnu.org/licenses/agpl-3.0.en.html' tags: - name: about description: These endpoints deliver general system information, version- and meta information. - name: accounts description: Endpoints that deliver all of the user's asset, expense and other accounts (and the metadata) together with related transactions, piggy banks and other objects. Also delivers endpoints for CRUD operations for accounts. - name: attachments description: Endpoints to manage the attachments of the authenticated user, including up- and downloading of the files. - name: autocomplete description: Auto-complete endpoints show basic information about Firefly III models, like the name and maybe some amounts. They all support a search query and can be used to autocomplete data in forms. Autocomplete return values always have a "name"-field. - name: available_budgets description: Endpoints to manage the total available amount that the user has made available to themselves. Used in periodic budgeting. - name: bills description: Endpoints to manage a user's bills and all related objects. - name: budgets description: Endpoints to manage a user's budgets and get info on the related objects, like limits. - name: categories description: Endpoints to manage a user's categories and get information on transactions and other related objects. - name: charts description: The "charts" endpoints deliver optimised data for charts and graphs. - name: configuration description: These endpoints allow you to manage and update the Firefly III configuration. You need to have the "owner" role to update configuration. - name: currencies description: Endpoints to manage the currencies in Firefly III. Depending on the user's role you can also disable and enable them, or add new ones. - name: currency_exchange_rates description: All currency exchange rates. - name: data description: The "data"-endpoints manage generic Firefly III and user-specific data. - name: insight description: The "insight" endpoints try to deliver sums, balances and insightful information in the broadest sense of the word. - name: links description: Endpoints to manage links between transactions, and manage the type of links available. - name: object_groups description: Endpoints to control and manage all of the user's object groups. Can only be created in conjunction with another object (for example a piggy bank) and will auto-delete when no other items are linked to it. - name: piggy_banks description: Endpoints to control and manage all of the user's piggy banks and related objects and information. - name: preferences description: These endpoints can be used to manage the user's preferences, including some hidden ones. - name: recurrences description: Use these endpoints to manage the user's recurring transactions, trigger the creation of transactions and manage the settings. - name: rule_groups description: Manage all of the user's groups of rules and trigger the execution of entire groups. - name: rules description: These endpoints can be used to manage all of the user's rules. Also includes triggers to execute or test rules and individual triggers. - name: search description: Endpoints that allow you to search through the user's financial data. Different from the autocomplete endpoints, the search accepts more advanced arguments. - name: summary description: These endpoints deliver summaries, like sums, lists of numbers and other processed information. Mainly used for the main dashboard and pretty specific for Firefly III itself. - name: tags description: This endpoint manages all of the user's tags. - name: transactions description: The most-used endpoints in Firefly III, these endpoints are used to manage the user's transactions. - name: user_groups description: User groups are the objects around which "financial administrations" are built. - name: users description: Use these endpoints to manage the users registered within Firefly III. You need to have the "owner" role to access these endpoints. - name: webhooks description: These endpoints can be used to manage the user's webhooks and triggers them if necessary. paths: /v1/autocomplete/accounts: get: tags: - autocomplete operationId: getAccountsAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 - in: query name: date required: false schema: type: string format: string example: "2025-11-01" description: If the account is an asset account or a liability, the autocomplete will also return the balance of the account on this date. - in: query name: types description: Optional filter on the account type(s) used in the autocomplete. required: false explode: false schema: type: array items: $ref: '#/components/schemas/AccountTypeFilter' summary: Returns all accounts of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of accounts with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteAccountArray' /v1/autocomplete/bills: get: tags: - autocomplete operationId: getBillsAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all bills of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of bills with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteBillArray' /v1/autocomplete/budgets: get: tags: - autocomplete operationId: getBudgetsAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all budgets of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: A list of budgets with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteBudgetArray' /v1/autocomplete/categories: get: tags: - autocomplete operationId: getCategoriesAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all categories of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of categories with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteCategoryArray' /v1/autocomplete/currencies: get: tags: - autocomplete operationId: getCurrenciesAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all currencies of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: A list of currencies with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteCurrencyArray' /v1/autocomplete/currencies-with-code: get: tags: - autocomplete operationId: getCurrenciesCodeAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all currencies of the user returned in a basic auto-complete array. This endpoint is DEPRECATED and I suggest you DO NOT use it. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of currencies with very basic information and the currency code between brackets. This endpoint is DEPRECATED and I suggest you DO NOT use it. content: application/json: schema: $ref: '#/components/schemas/AutocompleteCurrencyCodeArray' /v1/autocomplete/object-groups: get: tags: - autocomplete operationId: getObjectGroupsAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all object groups of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: A list of object groups with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteObjectGroupArray' /v1/autocomplete/piggy-banks: get: tags: - autocomplete operationId: getPiggiesAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all piggy banks of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: A list of piggy banks with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompletePiggyArray' /v1/autocomplete/piggy-banks-with-balance: get: tags: - autocomplete operationId: getPiggiesBalanceAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all piggy banks of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of piggy banks with very basic balance information. content: application/json: schema: $ref: '#/components/schemas/AutocompletePiggyBalanceArray' /v1/autocomplete/recurring: get: tags: - autocomplete operationId: getRecurringAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all recurring transactions of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: A list of recurring transactions with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteRecurrenceArray' /v1/autocomplete/rule-groups: get: tags: - autocomplete operationId: getRuleGroupsAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all rule groups of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: A list of rule groups with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteRuleGroupArray' /v1/autocomplete/rules: get: tags: - autocomplete operationId: getRulesAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all rules of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: A list of rules with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteRuleArray' /v1/autocomplete/subscriptions: get: tags: - autocomplete operationId: getSubscriptionsAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all subscriptions of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of subscriptions with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteBillArray' /v1/autocomplete/tags: get: tags: - autocomplete operationId: getTagAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all tags of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of tags with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteTagArray' /v1/autocomplete/transaction-types: get: tags: - autocomplete operationId: getTransactionTypesAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all transaction types returned in a basic auto-complete array. English only. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of transaction types with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteTransactionTypeArray' /v1/autocomplete/transactions: get: tags: - autocomplete operationId: getTransactionsAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all transaction descriptions of the user returned in a basic auto-complete array. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of transaction descriptions with very basic information. content: application/json: schema: $ref: '#/components/schemas/AutocompleteTransactionArray' /v1/autocomplete/transactions-with-id: get: tags: - autocomplete operationId: getTransactionsIDAC parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The autocomplete search query. required: false schema: type: string format: string example: "string" - in: query name: limit description: The number of items returned. required: false schema: type: integer format: int32 example: 10 summary: Returns all transactions, complemented with their ID, of the user returned in a basic auto-complete array. This endpoint is DEPRECATED and I suggest you DO NOT use it. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of transactions with very basic information. This endpoint is DEPRECATED and I suggest you DO NOT use it. content: application/json: schema: $ref: '#/components/schemas/AutocompleteTransactionIDArray' /v1/chart/account/overview: get: tags: - charts summary: Dashboard chart with asset account balance information. description: | This endpoint returns the data required to generate a chart with basic asset account balance information. This is used on the dashboard. operationId: getChartAccountOverview parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: period description: | Optional period to group the data by. If not provided, it will default to '1M' or whatever is deemed relevant for the range provided. If you want to know which periods are available, see the enums or get the configuration value: `GET /api/v1/configuration/firefly.valid_view_ranges` required: false schema: type: string enum: - 1D - 1W - 1M - 3M - 6M - 1Y example: 1M - in: query name: preselected description: | Optional set of preselected accounts to limit the chart to. This may be easier than submitting all asset accounts manually, for example. If you want to know which selection are available, see the enums here or get the configuration value: `GET /api/v1/configuration/firefly.preselected_accounts` - `empty`: do not do a pre-selection - `all`: select all asset and all liability accounts - `assets`: select all asset accounts - `liabilities`: select all liability accounts If no accounts are found, the user's "frontpage accounts" preference will be used. If that is empty, all asset accounts will be used. required: false schema: type: string enum: - empty - all - assets - liabilities example: all responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: Line chart oriented chart information. Check out the model for more details. Each entry is a line (or bar) in the chart. content: application/json: schema: $ref: '#/components/schemas/ChartLine' /v1/chart/balance/balance: get: tags: - charts summary: Dashboard chart with balance information. description: | This endpoint returns the data required to generate a chart with balance information. operationId: getChartBalance parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: period description: | Optional period to group the data by. If not provided, it will default to '1M' or whatever is deemed relevant for the range provided. If you want to know which periods are available, see the enums or get the configuration value: `GET /api/v1/configuration/firefly.valid_view_ranges` required: false schema: type: string enum: - 1D - 1W - 1M - 3M - 6M - 1Y example: 1M - in: query name: preselected description: | Optional set of preselected accounts to limit the chart to. This may be easier than submitting all asset accounts manually, for example. If you want to know which selection are available, see the enums here or get the configuration value: `GET /api/v1/configuration/firefly.preselected_accounts` - `empty`: do not do a pre-selection - `all`: select all asset and all liability accounts - `assets`: select all asset accounts - `liabilities`: select all liability accounts If no accounts are found, the user's "frontpage accounts" preference will be used. If that is empty, all asset accounts will be used. required: false schema: type: string enum: - empty - all - assets - liabilities example: all - in: query name: accounts[] description: | Limit the chart to these asset accounts or liabilities. Only asset accounts and liabilities will be accepted. Other types will be silently dropped. This list of accounts will be OVERRULED by the `preselected` parameter. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: Line chart oriented chart information. Check out the model for more details. Each entry is a line (or bar) in the chart. content: application/json: schema: $ref: '#/components/schemas/ChartLine' /v1/chart/budget/overview: get: tags: - charts summary: Dashboard chart with budget information. description: | This endpoint returns the data required to generate a chart with basic budget information. operationId: getChartBudgetOverview parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: Bar chart oriented chart information. Check out the model for more details. Each entry is a line (or bar) in the chart. content: application/json: schema: $ref: '#/components/schemas/ChartLine' /v1/chart/category/overview: get: tags: - charts summary: Dashboard chart with category information. description: | This endpoint returns the data required to generate a chart with basic category information. operationId: getChartCategoryOverview parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: Line chart oriented chart information. Check out the model for more details. Each entry is a line (or bar) in the chart. content: application/json: schema: $ref: '#/components/schemas/ChartLine' /v1/data/bulk/transactions: post: summary: Bulk update transaction properties. For more information, see https://docs.firefly-iii.org/references/firefly-iii/api/specials/ description: | Allows you to update transactions in bulk. operationId: bulkUpdateTransactions tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: query description: The JSON query. required: true schema: type: string format: json responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "204": description: Empty response when the update was successful. A future improvement is to include the changed transactions. /v1/data/destroy: delete: tags: - data operationId: destroyData summary: Endpoint to destroy user data description: | A call to this endpoint deletes the requested data type. Use it with care and always with user permission. The demo user is incapable of using this endpoint. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "204": description: Empty response when data has been destroyed. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: objects description: The type of data that you wish to destroy. You can only use one at a time. required: true schema: $ref: '#/components/schemas/DataDestroyObject' /v1/data/export/accounts: get: summary: Export account data from Firefly III description: | This endpoint allows you to export your accounts from Firefly III into a file. Currently supports CSV exports only. operationId: exportAccounts tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/bills: get: summary: Export bills from Firefly III description: | This endpoint allows you to export your bills from Firefly III into a file. Currently supports CSV exports only. operationId: exportBills tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/budgets: get: summary: Export budgets and budget amount data from Firefly III description: | This endpoint allows you to export your budgets and associated budget data from Firefly III into a file. Currently supports CSV exports only. operationId: exportBudgets tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/categories: get: summary: Export category data from Firefly III description: | This endpoint allows you to export your categories from Firefly III into a file. Currently supports CSV exports only. operationId: exportCategories tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/piggy-banks: get: summary: Export piggy banks from Firefly III description: | This endpoint allows you to export your piggy banks from Firefly III into a file. Currently supports CSV exports only. operationId: exportPiggies tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/recurring: get: summary: Export recurring transaction data from Firefly III description: | This endpoint allows you to export your recurring transactions from Firefly III into a file. Currently supports CSV exports only. operationId: exportRecurring tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/rules: get: summary: Export rule groups and rule data from Firefly III description: | This endpoint allows you to export your rules and rule groups from Firefly III into a file. Currently supports CSV exports only. operationId: exportRules tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/tags: get: summary: Export tag data from Firefly III description: | This endpoint allows you to export your tags from Firefly III into a file. Currently supports CSV exports only. operationId: exportTags tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/export/transactions: get: summary: Export transaction data from Firefly III description: | This endpoint allows you to export transactions from Firefly III into a file. Currently supports CSV exports only. operationId: exportTransactions tags: - data parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts explode: false description: | Limit the export of transactions to these accounts only. Only asset accounts will be accepted. Other types will be silently dropped. required: false example: "1,2,3" schema: type: string format: string - in: query name: type description: The file type the export file (CSV is currently the only option). required: false schema: $ref: '#/components/schemas/ExportFileFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The exported transaction in a file.' content: application/octet-stream: schema: type: string format: binary /v1/data/purge: delete: tags: - data operationId: purgeData summary: Endpoint to purge user data description: | A call to this endpoint purges all previously deleted data. Use it with care and always with user permission. The demo user is incapable of using this endpoint. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "204": description: Empty response when data has been purged. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 /v1/insight/expense/expense: get: summary: Insight into expenses, grouped by expense account. description: | This endpoint gives a summary of the expenses made by the user, grouped by expense account. operationId: insightExpenseExpense tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you add the accounts ID's of expense accounts, only those accounts are included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. You can combine both asset / liability and expense account ID's. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of expense accounts and expense details. Each expense account has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/expense/asset: get: summary: Insight into expenses, grouped by asset account. description: | This endpoint gives a summary of the expenses made by the user, grouped by asset account. operationId: insightExpenseAsset tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of asset accounts and expense details. Each asset account has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/income/revenue: get: summary: Insight into income, grouped by revenue account. description: | This endpoint gives a summary of the income received by the user, grouped by revenue account. operationId: insightIncomeRevenue tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you add the accounts ID's of revenue accounts, only those accounts are included in the results. If you include ID's of asset accounts or liabilities, only deposits to those asset accounts / liabilities will be included. You can combine both asset / liability and deposit account ID's. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of revenue accounts and income details. Each revenue account has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/income/asset: get: summary: Insight into income, grouped by asset account. description: | This endpoint gives a summary of the income received by the user, grouped by asset account. operationId: insightIncomeAsset tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only deposits to those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of asset accounts and income details. Each asset account has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/transfer/asset: get: summary: Insight into transfers, grouped by account. description: | This endpoint gives a summary of the transfers made by the user, grouped by asset account or lability. operationId: insightTransfers tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only transfers between those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of asset accounts and transfer details. Each asset account has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTransfer' /v1/insight/expense/bill: get: summary: Insight into expenses, grouped by bill. description: | This endpoint gives a summary of the expenses made by the user, grouped by (any) bill. operationId: insightExpenseBill tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: bills[] description: | The bills to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of budget and expense details. Each budget has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/expense/no-bill: get: summary: Insight into expenses, without bill. description: | This endpoint gives a summary of the expenses made by the user, including only expenses with no bill. operationId: insightExpenseNoBill tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of expense details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/expense/budget: get: summary: Insight into expenses, grouped by budget. description: | This endpoint gives a summary of the expenses made by the user, grouped by (any) budget. operationId: insightExpenseBudget tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: budgets[] description: | The budgets to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of budget and expense details. Each budget has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/expense/no-budget: get: summary: Insight into expenses, without budget. description: | This endpoint gives a summary of the expenses made by the user, including only expenses with no budget. operationId: insightExpenseNoBudget tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of expense details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/expense/category: get: summary: Insight into expenses, grouped by category. description: | This endpoint gives a summary of the expenses made by the user, grouped by (any) category. operationId: insightExpenseCategory tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: categories[] description: | The categories to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of category and expense details. Each category has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/expense/no-category: get: summary: Insight into expenses, without category. description: | This endpoint gives a summary of the expenses made by the user, including only expenses with no category. operationId: insightExpenseNoCategory tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of expense details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/income/category: get: summary: Insight into income, grouped by category. description: | This endpoint gives a summary of the income received by the user, grouped by (any) category. operationId: insightIncomeCategory tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: categories[] description: | The categories to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only deposits to those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of category and income details. Each category has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/income/no-category: get: summary: Insight into income, without category. description: | This endpoint gives a summary of the income received by the user, including only income with no category. operationId: insightIncomeNoCategory tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only deposits to those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of income details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/transfer/category: get: summary: Insight into transfers, grouped by category. description: | This endpoint gives a summary of the transfers made by the user, grouped by (any) category. operationId: insightTransferCategory tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: categories[] description: | The categories to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only transfers between those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of category and transfer details. Each category has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/transfer/no-category: get: summary: Insight into transfers, without category. description: | This endpoint gives a summary of the transfers made by the user, including only transfers with no category. operationId: insightTransferNoCategory tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only transfers between those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of transfer details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/expense/tag: get: summary: Insight into expenses, grouped by tag. description: | This endpoint gives a summary of the expenses made by the user, grouped by (any) tag. operationId: insightExpenseTag tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: tags[] description: | The tags to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of tag and expense details. Each tag has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/expense/no-tag: get: summary: Insight into expenses, without tag. description: | This endpoint gives a summary of the expenses made by the user, including only expenses with no tag. operationId: insightExpenseNoTag tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of expense details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/income/tag: get: summary: Insight into income, grouped by tag. description: | This endpoint gives a summary of the income received by the user, grouped by (any) tag. operationId: insightIncomeTag tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: tags[] description: | The tags to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only deposits to those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of tag and income details. Each tag has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/income/no-tag: get: summary: Insight into income, without tag. description: | This endpoint gives a summary of the income received by the user, including only income with no tag. operationId: insightIncomeNoTag tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only deposits to those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of income details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/transfer/tag: get: summary: Insight into transfers, grouped by tag. description: | This endpoint gives a summary of the transfers created by the user, grouped by (any) tag. operationId: insightTransferTag tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: tags[] description: | The tags to be included in the results. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only transfers between those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of tag and transfer details. Each tag has one row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightGroup' /v1/insight/transfer/no-tag: get: summary: Insight into expenses, without tag. description: | This endpoint gives a summary of the transfers made by the user, including only transfers with no tag. operationId: insightTransferNoTag tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only transfers from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of transfer details. One row per currency.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/expense/total: get: summary: Insight into total expenses. description: | This endpoint gives a sum of the total expenses made by the user. operationId: insightExpenseTotal tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only withdrawals from those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'A list of sums in different currencies.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/income/total: get: summary: Insight into total income. description: | This endpoint gives a sum of the total income received by the user. operationId: insightIncomeTotal tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only deposits to those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of sums in different currencies.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/insight/transfer/total: get: summary: Insight into total transfers. description: | This endpoint gives a sum of the total amount transfers made by the user. operationId: insightTransferTotal tags: - insight parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: accounts[] description: | The accounts to be included in the results. If you include ID's of asset accounts or liabilities, only transfers between those asset accounts / liabilities will be included. Other account ID's will be ignored. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'A list of sums in different currencies.' content: application/json: schema: $ref: '#/components/schemas/InsightTotal' /v1/accounts/{id}/transactions: get: tags: - accounts summary: List all transactions related to the account. description: | This endpoint returns a list of all the transactions connected to the account. operationId: listTransactionByAccount parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. - in: query name: start description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned. required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of transactions content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' /v1/accounts/{id}/attachments: get: summary: Lists all attachments. description: Lists all attachments. operationId: listAttachmentByAccount tags: - accounts parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of attachments content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' /v1/accounts/{id}/piggy-banks: get: tags: - accounts summary: List all piggy banks related to the account. description: | This endpoint returns a list of all the piggy banks connected to the account. operationId: listPiggyBankByAccount parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of piggy banks content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankArray' /v1/accounts: get: tags: - accounts summary: List all accounts. description: | This endpoint returns a list of all the accounts owned by the authenticated user. operationId: listAccount parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: start description: | A date formatted YYYY-MM-DD. May be omitted. required: false schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. Must be after "start". Can not be the same as "start". May be omitted. required: false schema: type: string format: date - in: query name: date description: | A date formatted YYYY-MM-DD. When added to the request, Firefly III will show the account's balance on that day. required: false schema: type: string format: date - in: query name: type description: Optional filter on the account type(s) returned required: false schema: $ref: '#/components/schemas/AccountTypeFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of accounts content: application/vnd.api+json: schema: $ref: '#/components/schemas/AccountArray' post: tags: - accounts summary: Create new account. operationId: storeAccount parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 description: Creates a new account. The data required can be submitted as a JSON body or as a list of parameters (in key=value pairs, like a webform). responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'New account stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/AccountSingle' requestBody: content: application/json: schema: $ref: '#/components/schemas/AccountStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/AccountStore' description: JSON array with the necessary account information or key=value pairs. See the model for the exact specifications. required: true /v1/accounts/{id}: get: tags: - accounts summary: Get single account. description: | Returns a single account by its ID. operationId: getAccount parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. May be omitted. required: false schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. Must be after "start". Can not be the same as "start". May be omitted. required: false schema: type: string format: date - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. - in: query name: date description: | A date formatted YYYY-MM-DD. When added to the request, Firefly III will show the account's balance on that day. required: false schema: type: string format: date responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The requested account' content: application/vnd.api+json: schema: $ref: '#/components/schemas/AccountSingle' put: summary: Update existing account. description: | Used to update a single account. All fields that are not submitted will be cleared (set to NULL). The model will tell you which fields are mandatory. operationId: updateAccount parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. tags: - accounts requestBody: content: application/json: schema: $ref: '#/components/schemas/AccountUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/AccountUpdate' description: JSON array or form-data with updated account information. See the model for the exact specifications. required: true responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'Updated account stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/AccountSingle' delete: summary: Permanently delete account. description: | Will permanently delete an account. Any associated transactions and piggy banks are ALSO deleted. Cannot be recovered from. operationId: deleteAccount parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. tags: - accounts responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "204": description: Account deleted /v1/attachments: get: summary: List all attachments. description: | This endpoint lists all attachments. operationId: listAttachment tags: - attachments parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of attachments. content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' post: summary: Store a new attachment. description: | Creates a new attachment. The data required can be submitted as a JSON body or as a list of parameters. You cannot use this endpoint to upload the actual file data (see below). This endpoint only creates the attachment object. operationId: storeAttachment parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - attachments requestBody: content: application/json: schema: $ref: '#/components/schemas/AttachmentStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/AttachmentStore' description: "JSON array or key=value pairs with the necessary attachment information. See the model for the exact specifications." required: true responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'New attachment stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' /v1/attachments/{id}: get: summary: Get a single attachment. description: | Get a single attachment. This endpoint only returns the available metadata for the attachment. Actual file data is handled in two other endpoints (see below). operationId: getAttachment parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the attachment. tags: - attachments responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The requested attachment' content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentSingle' put: operationId: updateAttachment tags: - attachments summary: Update existing attachment. description: | Update the meta data for an existing attachment. This endpoint does not allow you to upload or download data. For that, see below. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the attachment. requestBody: content: application/json: schema: $ref: '#/components/schemas/AttachmentUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/AttachmentUpdate' description: JSON array with updated attachment information. See the model for the exact specifications. required: true responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'Updated attachment stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' delete: operationId: deleteAttachment summary: Delete an attachment. description: | With this endpoint you delete an attachment, including any stored file data. tags: - attachments parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the single attachment. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "204": description: Attachment deleted. /v1/attachments/{id}/download: get: summary: Download a single attachment. description: | This endpoint allows you to download the binary content of a transaction. It will be sent to you as a download, using the content type "application/octet-stream" and content disposition "attachment; filename=example.pdf". operationId: downloadAttachment parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the attachment. tags: - attachments responses: "200": description: "The requested attachment" content: application/octet-stream: schema: type: string format: binary "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/attachments/{id}/upload: post: summary: Upload an attachment. description: | Use this endpoint to upload (and possible overwrite) the file contents of an attachment. Simply put the entire file in the body as binary data. operationId: uploadAttachment parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the attachment. tags: - attachments responses: "204": description: 'Upload was a success' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' requestBody: content: application/octet-stream: schema: type: string format: binary /v1/available-budgets: get: summary: List all available budget amounts. description: | Firefly III calculates the total amount of money budgeted in so-called "available budgets". This endpoint returns all of these amounts and the periods for which they are calculated. operationId: listAvailableBudgets tags: - available_budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: start description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-30" responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of available budget amounts. content: application/vnd.api+json: schema: $ref: '#/components/schemas/AvailableBudgetArray' /v1/available-budgets/{id}: get: summary: Get a single available budget. description: Get a single available budget, by ID. operationId: getAvailableBudget parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the available budget. tags: - available_budgets responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The requested available budget' content: application/vnd.api+json: schema: $ref: '#/components/schemas/AvailableBudgetSingle' /v1/bills/{id}/attachments: get: summary: List all attachments uploaded to the bill. description: This endpoint will list all attachments linked to the bill. operationId: listAttachmentByBill tags: - bills parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the bill. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of attachments content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' /v1/bills/{id}/rules: get: summary: List all rules associated with the bill. description: This endpoint will list all rules that have an action to set the bill to this bill. operationId: listRuleByBill tags: - bills parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the bill. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of rules content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleArray' /v1/bills/{id}/transactions: get: summary: List all transactions associated with the bill. description: This endpoint will list all transactions linked to this bill. operationId: listTransactionByBill tags: - bills parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the bill. - in: query name: start description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of transactions content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' /v1/bills: get: summary: List all bills. description: This endpoint will list all the user's bills. operationId: listBill tags: - bills parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: start description: | A date formatted YYYY-MM-DD. If it is are added to the request, Firefly III will calculate the appropriate payment and paid dates. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. If it is added to the request, Firefly III will calculate the appropriate payment and paid dates. required: false schema: type: string format: date example: "2025-11-01" responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: A list of bills content: application/vnd.api+json: schema: $ref: '#/components/schemas/BillArray' post: summary: Store a new bill description: Creates a new bill. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeBill parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - bills requestBody: content: application/json: schema: $ref: '#/components/schemas/BillStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/BillStore' description: "JSON array or key=value pairs with the necessary bill information. See the model for the exact specifications." required: true responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'New bill stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BillSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' /v1/bills/{id}: get: summary: Get a single bill. description: Get a single bill. operationId: getBill parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the bill. - in: query name: start description: | A date formatted YYYY-MM-DD. If it is are added to the request, Firefly III will calculate the appropriate payment and paid dates. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. If it is added to the request, Firefly III will calculate the appropriate payment and paid dates. required: false schema: type: string format: date example: "2025-11-30" tags: - bills responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The requested bill' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BillSingle' put: operationId: updateBill tags: - bills description: Update existing bill. summary: Update existing bill. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the bill. requestBody: content: application/json: schema: $ref: '#/components/schemas/BillUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/BillUpdate' description: JSON array or key=value pairs with updated bill information. See the model for the exact specifications. required: true responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'Updated bill stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BillSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' delete: operationId: deleteBill description: Delete a bill. This will not delete any associated rules. Will not remove associated transactions. WILL remove all associated attachments. summary: Delete a bill. tags: - bills parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the bill. responses: "204": description: Bill deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets/{id}/limits/{limitId}/transactions: get: summary: List all transactions by a budget limit ID. description: List all the transactions within one budget limit. The start and end date are dictated by the budget limit. operationId: listTransactionByBudgetLimit tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. The budget limit MUST be associated to the budget ID. - in: path name: limitId required: true schema: type: string example: "123" description: The ID of the budget limit. The budget limit MUST be associated to the budget ID. - in: query name: type description: Optional filter on the transaction type(s) returned required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets/{id}/limits: get: operationId: listBudgetLimitByBudget description: | Get all budget limits for this budget and the money spent, and money left. You can limit the list by submitting a date range as well. The "spent" array for each budget limit is NOT influenced by the start and end date of your query, but by the start and end date of the budget limit itself. summary: Get all limits for a budget. tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the requested budget. - in: query name: start description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-30" responses: "200": description: A list of budget limits applicable to this budget. content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetLimitArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: operationId: storeBudgetLimit description: Store a new budget limit under this budget. summary: Store new budget limit. tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. requestBody: content: application/json: schema: $ref: '#/components/schemas/BudgetLimitStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/BudgetLimitStore' description: "JSON array or key=value pairs with the necessary budget information. See the model for the exact specifications." required: true responses: "200": description: 'New budget limit stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetLimitSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets/{id}/limits/{limitId}: get: summary: Get single budget limit. operationId: getBudgetLimit tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. The budget limit MUST be associated to the budget ID. - in: path name: limitId required: true schema: type: integer minimum: 1 example: 1 description: The ID of the budget limit. The budget limit MUST be associated to the budget ID. responses: "200": description: 'The requested budget limit' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetLimitSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateBudgetLimit tags: - budgets description: Update existing budget limit. summary: Update existing budget limit. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. The budget limit MUST be associated to the budget ID. - in: path name: limitId required: true schema: type: string example: "123" description: The ID of the budget limit. The budget limit MUST be associated to the budget ID. requestBody: content: application/json: schema: $ref: '#/components/schemas/BudgetLimitUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/BudgetLimitUpdate' description: JSON array with updated budget limit information. See the model for the exact specifications. required: true responses: "200": description: 'Updated budget limit stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetLimitSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteBudgetLimit description: Delete a budget limit. summary: Delete a budget limit. tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. The budget limit MUST be associated to the budget ID. - in: path name: limitId required: true schema: type: string example: "123" description: The ID of the budget limit. The budget limit MUST be associated to the budget ID. responses: "204": description: Budget limit deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budget-limits: get: operationId: listBudgetLimit summary: Get list of budget limits by date description: | Get all budget limits for for this date range. tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date example: "2025-11-30" responses: "200": description: A list of budget limits. content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetLimitArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets/{id}/transactions: get: summary: All transactions to a budget. description: Get all transactions linked to a budget, possibly limited by start and end operationId: listTransactionByBudget tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. - in: query name: start description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets/{id}/attachments: get: summary: Lists all attachments of a budget. description: Lists all attachments. operationId: listAttachmentByBudget tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. responses: "200": description: A list of attachments content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets/transactions-without-budget: get: summary: All transactions without a budget. description: Get all transactions NOT linked to a budget, possibly limited by start and end operationId: listTransactionWithoutBudget tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: start description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. required: false schema: type: string format: date example: "2025-11-30" responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets: get: summary: List all budgets. description: List all the budgets the user has made. If the start date and end date are submitted as well, the "spent" array will be updated accordingly. operationId: listBudget tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: start description: | A date formatted YYYY-MM-DD, to get info on how much the user has spent. You must submit both start and end. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to get info on how much the user has spent. You must submit both start and end. required: false schema: type: string format: date example: "2025-11-30" responses: "200": description: A list of budgets. content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new budget description: Creates a new budget. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeBudget parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - budgets requestBody: content: application/json: schema: $ref: '#/components/schemas/BudgetStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/BudgetStore' description: "JSON array or key=value pairs with the necessary budget information. See the model for the exact specifications." required: true responses: "200": description: 'New budget stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/budgets/{id}: get: summary: Get a single budget. description: Get a single budget. If the start date and end date are submitted as well, the "spent" array will be updated accordingly. operationId: getBudget parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the requested budget. - in: query name: start description: | A date formatted YYYY-MM-DD, to get info on how much the user has spent. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to get info on how much the user has spent. required: false schema: type: string format: date example: "2025-11-30" tags: - budgets responses: "200": description: 'The requested budget' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateBudget tags: - budgets description: Update existing budget. This endpoint cannot be used to set budget amount limits. summary: Update existing budget. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. requestBody: content: application/json: schema: $ref: '#/components/schemas/BudgetUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/BudgetUpdate' description: JSON array with updated budget information. See the model for the exact specifications. required: true responses: "200": description: 'Updated budget stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteBudget description: Delete a budget. Transactions will not be deleted. summary: Delete a budget. tags: - budgets parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the budget. responses: "204": description: Budget deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/categories/{id}/transactions: get: summary: List all transactions in a category. description: List all transactions in a category, optionally limited to the date ranges specified. operationId: listTransactionByCategory tags: - categories parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the category. - in: query name: start description: | A date formatted YYYY-MM-DD, to limit the result list. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to limit the result list. required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/categories/{id}/attachments: get: summary: Lists all attachments. description: Lists all attachments. operationId: listAttachmentByCategory tags: - categories parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the category. responses: "200": description: A list of attachments content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/categories: get: summary: List all categories. description: List all categories. operationId: listCategory tags: - categories parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of categories. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CategoryArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new category description: Creates a new category. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeCategory parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - categories requestBody: content: application/json: schema: $ref: '#/components/schemas/CategoryStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CategoryStore' description: "JSON array or key=value pairs with the necessary category information. See the model for the exact specifications." required: true responses: "200": description: 'New category stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CategorySingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/categories/{id}: get: summary: Get a single category. description: Get a single category. operationId: getCategory parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the category. - in: query name: start description: | A date formatted YYYY-MM-DD, to show spent and earned info. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to show spent and earned info. required: false schema: type: string format: date example: "2025-11-30" tags: - categories responses: "200": description: 'The requested category' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CategorySingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateCategory tags: - categories description: Update existing category. summary: Update existing category. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the category. requestBody: content: application/json: schema: $ref: '#/components/schemas/CategoryUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CategoryUpdate' description: JSON array with updated category information. See the model for the exact specifications. required: true responses: "200": description: 'Updated category stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CategorySingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteCategory description: Delete a category. Transactions will not be removed. summary: Delete a category. tags: - categories parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the category. responses: "204": description: Category deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/exchange-rates: get: summary: List all exchange rates that Firefly III knows. description: List exchange rates that Firefly III knows. operationId: listCurrencyExchangeRates tags: - currency_exchange_rates parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of all available currency exchange rates. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new currency exchange rate. description: Stores a new exchange rate. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeCurrencyExchangeRate parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - currency_exchange_rates requestBody: content: application/json: schema: $ref: '#/components/schemas/CurrencyExchangeRateStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CurrencyExchangeRateStore' description: "JSON array or key=value pairs with the necessary exchange rate information. See the model for the exact specifications." required: true responses: "200": description: 'New exchange stored, result in response. If a rate already exists for this currency pair and date, it will be updated.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/exchange-rates/{id}: get: summary: List a single specific exchange rate. description: List a single specific exchange rate by its ID. operationId: listSpecificCurrencyExchangeRate tags: - currency_exchange_rates parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the requested currency exchange rate. responses: "200": description: The exchange rate requested. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteSpecificCurrencyExchangeRate description: "Delete a specific currency exchange rate by its internal ID." summary: "Delete a specific currency exchange rate." tags: - currency_exchange_rates parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the requested currency exchange rate. responses: "204": description: "Currency exchange rate deleted." "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: summary: Update existing currency exchange rate. description: | Used to update a single currency exchange rate by its ID. Including the from/to currency is optional. operationId: updateCurrencyExchangeRate parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the currency exchange rate. tags: - currency_exchange_rates requestBody: content: application/json: schema: $ref: '#/components/schemas/CurrencyExchangeRateUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CurrencyExchangeRateUpdate' description: JSON array or form-data with updated exchange rate information. See the model for the exact specifications. required: true responses: "200": description: 'Updated exchange rate stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' /v1/exchange-rates/{from}/{to}: get: summary: List all exchange rates from/to the mentioned currencies. description: List all exchange rates from/to the mentioned currencies. operationId: listSpecificCurrencyExchangeRates tags: - currency_exchange_rates parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: from required: true schema: type: string example: "EUR" description: "The currency code of the 'from' currency." - in: path name: to required: true schema: type: string example: "USD" description: "The currency code of the 'to' currency." responses: "200": description: A list of currency exchange rates. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteSpecificCurrencyExchangeRates summary: "Deletes ALL currency exchange rates from 'from' to 'to'." description: "Deletes ALL currency exchange rates from 'from' to 'to'. It's important to know that the reverse exchange rates (from 'to' to 'from') will not be deleted and Firefly III will still be able to infer the correct exchange rate from the reverse one." tags: - currency_exchange_rates parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: from required: true schema: type: string example: "EUR" description: "The currency code of the 'from' currency." - in: path name: to required: true schema: type: string example: "USD" description: "The currency code of the 'to' currency." responses: "204": description: "Currency exchange rate(s) deleted." "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/exchange-rates/{from}/{to}/{date}: get: summary: List the exchange rate for the from and to-currency on the requested date. description: List the exchange rate for the from and to-currency on the requested date. operationId: listSpecificCurrencyExchangeRateOnDate tags: - currency_exchange_rates parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: from required: true schema: type: string example: "EUR" description: "The currency code of the 'from' currency." - in: path name: to required: true schema: type: string example: "USD" description: "The currency code of the 'to' currency." - in: path name: date required: true schema: type: string format: string example: "2025-11-01" responses: "200": description: A list of currency exchange rates. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteSpecificCurrencyExchangeRateOnDate description: "Delete the currency exchange rate from 'from' to 'to' on the specified date. It's important to know that the reverse exchange rate (from 'to' to 'from') will not be deleted and Firefly III will still be able to infer the correct exchange rate from the reverse one." summary: "Delete the currency exchange rate from 'from' to 'to' on the specified date." tags: - currency_exchange_rates parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: from required: true schema: type: string example: "EUR" description: "The currency code of the 'from' currency." - in: path name: to required: true schema: type: string example: "USD" description: "The currency code of the 'to' currency." - in: path name: date required: true schema: type: string format: string example: "2025-11-01" responses: "204": description: "Currency exchange rate(s) deleted." "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: summary: Update existing currency exchange rate. description: | Used to update a single currency exchange rate by its currency codes and date operationId: updateCurrencyExchangeRateByDate parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: from required: true schema: type: string example: "EUR" description: "The currency code of the 'from' currency." - in: path name: to required: true schema: type: string example: "USD" description: "The currency code of the 'to' currency." - in: path name: date required: true schema: type: string format: string example: "2025-11-01" tags: - currency_exchange_rates requestBody: content: application/json: schema: $ref: '#/components/schemas/CurrencyExchangeRateUpdateNoDate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CurrencyExchangeRateUpdate' description: JSON array or form-data with updated exchange rate information. See the model for the exact specifications. required: true responses: "200": description: 'Updated exchange rate stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' /v1/exchange-rates/by-date/{date}: post: summary: Store new currency exchange rates under this date description: Stores a new set of exchange rates. The date is fixed (in the URL parameter) and the data required can be submitted as a JSON body. operationId: storeCurrencyExchangeRatesByDate parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: date required: true schema: type: string format: string example: "2025-11-01" tags: - currency_exchange_rates requestBody: content: application/json: schema: $ref: '#/components/schemas/CurrencyExchangeRateStoreByDate' description: "JSON array with the necessary currency exchange rate information. See the model for the exact specifications." required: true responses: "200": description: 'New exchange rates stored, result in response. If a rate already existed for any submitted entry, it will be updated.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateArray' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/exchange-rates/by-currencies/{from}/{to}: post: summary: Store new currency exchange rates under this from/to pair. description: Stores a new set of exchange rates for this pair. The date is variable, and the data required can be submitted as a JSON body. operationId: storeCurrencyExchangeRatesByPair parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: from required: true schema: type: string example: "EUR" description: "The currency code of the 'from' currency." - in: path name: to required: true schema: type: string example: "USD" description: "The currency code of the 'to' currency." tags: - currency_exchange_rates requestBody: content: application/json: schema: $ref: '#/components/schemas/CurrencyExchangeRateStoreByPair' description: "JSON array with the necessary currency exchange rate information. See the model for the exact specifications." required: true responses: "200": description: 'New exchange rates stored, result in response. If a rate already existed for any submitted entry, it will be updated.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyExchangeRateArray' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/link-types/{id}/transactions: get: tags: - links summary: List all transactions under this link type. description: | List all transactions under this link type, both the inward and outward transactions. operationId: listTransactionByLinkType parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the link type. - in: query name: start description: | A date formatted YYYY-MM-DD, to limit the results. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to limit the results. required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned. required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions content: application/json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/link-types: get: tags: - links summary: List all types of links. description: | List all the link types the system has. These include the default ones as well as any new ones. operationId: listLinkType parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of link types. content: application/vnd.api+json: schema: $ref: '#/components/schemas/LinkTypeArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: tags: - links summary: Create a new link type operationId: storeLinkType parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 description: Creates a new link type. The data required can be submitted as a JSON body or as a list of parameters (in key=value pairs, like a webform). responses: "200": description: 'New link type stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/LinkTypeSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkType' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/LinkType' description: JSON array with the necessary link type information or key=value pairs. See the model for the exact specifications. required: true /v1/link-types/{id}: get: tags: - links summary: Get single a link type. description: | Returns a single link type by its ID. operationId: getLinkType parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the link type. responses: "200": description: 'The requested link type' content: application/vnd.api+json: schema: $ref: '#/components/schemas/LinkTypeSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: summary: Update existing link type. description: | Used to update a single link type. All fields that are not submitted will be cleared (set to NULL). The model will tell you which fields are mandatory. You cannot update some of the system provided link types, indicated by the editable=false flag when you list it. operationId: updateLinkType parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the link type. tags: - links requestBody: content: application/json: schema: $ref: '#/components/schemas/LinkTypeUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/LinkTypeUpdate' description: JSON array or form-data with updated link type information. See the model for the exact specifications. required: true responses: "200": description: 'Updated link type stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/LinkTypeSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: summary: Permanently delete link type. description: | Will permanently delete a link type. The links between transactions will be removed. The transactions themselves remain. You cannot delete some of the system provided link types, indicated by the editable=false flag when you list it. operationId: deleteLinkType parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the link type. tags: - links responses: "204": description: Link type deleted "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/transaction-links: get: tags: - links summary: List all transaction links. description: | List all the transaction links. operationId: listTransactionLink parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of transaction links content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionLinkArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: tags: - links summary: Create a new link between transactions operationId: storeTransactionLink description: Store a new link between two transactions. For this end point you need the journal_id from a transaction. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 responses: "200": description: 'New transaction link stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionLinkSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' requestBody: content: application/json: schema: $ref: '#/components/schemas/TransactionLinkStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TransactionLinkStore' description: JSON array with the necessary link type information or key=value pairs. See the model for the exact specifications. required: true /v1/transaction-links/{id}: get: tags: - links summary: Get a single link. description: | Returns a single link by its ID. operationId: getTransactionLink parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction link. responses: "200": description: 'The requested link' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionLinkSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: summary: Permanently delete link between transactions. description: | Will permanently delete link. Transactions remain. operationId: deleteTransactionLink parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction link. tags: - links responses: "204": description: Transaction link deleted "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: summary: Update an existing link between transactions. description: | Used to update a single existing link. operationId: updateTransactionLink parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction link. tags: - links requestBody: content: application/json: schema: $ref: '#/components/schemas/TransactionLinkUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TransactionLinkUpdate' description: JSON array or form-data with updated link type information. See the model for the exact specifications. required: true responses: "200": description: 'Updated link type stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionLinkSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/object-groups/{id}/piggy-banks: get: tags: - object_groups summary: List all piggy banks related to the object group. description: | This endpoint returns a list of all the piggy banks connected to the object group. operationId: listPiggyBankByObjectGroup parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. responses: "200": description: A list of piggy banks content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/object-groups/{id}/bills: get: summary: List all bills with this object group. description: List all bills with this object group. operationId: listBillByObjectGroup tags: - object_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the account. responses: "200": description: A list of bills. content: application/vnd.api+json: schema: $ref: '#/components/schemas/BillArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/object-groups: get: summary: List all object groups. description: List all object groups. operationId: listObjectGroups tags: - object_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of object groups content: application/vnd.api+json: schema: $ref: '#/components/schemas/ObjectGroupArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/object-groups/{id}: get: summary: Get a single object group. description: Get a single object group. operationId: getObjectGroup parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the object group. tags: - object_groups responses: "200": description: The requested object group content: application/vnd.api+json: schema: $ref: '#/components/schemas/ObjectGroupSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateObjectGroup tags: - object_groups description: Update existing object group. summary: Update existing object group. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the object group requestBody: content: application/json: schema: $ref: '#/components/schemas/ObjectGroupUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ObjectGroupUpdate' description: JSON array with updated piggy bank information. See the model for the exact specifications. required: true responses: "200": description: 'Updated object group stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/ObjectGroupSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteObjectGroup description: Delete a object group. summary: Delete a object group. tags: - object_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the object group. responses: "204": description: Object group deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/piggy-banks/{id}/events: get: summary: List all events linked to a piggy bank. description: List all events linked to a piggy bank (adding and removing money). operationId: listEventByPiggyBank tags: - piggy_banks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the piggy bank responses: "200": description: A list of piggy bank related events content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankEventArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/piggy-banks/{id}/attachments: get: summary: Lists all attachments. description: Lists all attachments. operationId: listAttachmentByPiggyBank tags: - piggy_banks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the piggy bank. responses: "200": description: A list of attachments content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/piggy-banks: get: summary: List all piggy banks. description: List all piggy banks. operationId: listPiggyBank tags: - piggy_banks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of piggy banks content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new piggy bank description: Creates a new piggy bank. The data required can be submitted as a JSON body or as a list of parameters. operationId: storePiggyBank parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - piggy_banks requestBody: content: application/json: schema: $ref: '#/components/schemas/PiggyBankStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PiggyBankStore' description: "JSON array or key=value pairs with the necessary piggy bank information. See the model for the exact specifications." required: true responses: "200": description: 'New piggy bank stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/piggy-banks/{id}: get: summary: Get a single piggy bank. description: Get a single piggy bank. operationId: getPiggyBank parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the piggy bank. tags: - piggy_banks responses: "200": description: 'The requested piggy bank' content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updatePiggyBank tags: - piggy_banks description: Update existing piggy bank. summary: Update existing piggy bank. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the piggy bank requestBody: content: application/json: schema: $ref: '#/components/schemas/PiggyBankUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PiggyBankUpdate' description: JSON array with updated piggy bank information. See the model for the exact specifications. required: true responses: "200": description: 'Updated piggy bank stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deletePiggyBank description: Delete a piggy bank. summary: Delete a piggy bank. tags: - piggy_banks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the piggy bank. responses: "204": description: Piggy bank deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/recurrences/{id}/transactions: get: summary: List all transactions created by a recurring transaction. description: List all transactions created by a recurring transaction, optionally limited to the date ranges specified. operationId: listTransactionByRecurrence tags: - recurrences parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the recurring transaction. - in: query name: start description: | A date formatted YYYY-MM-DD. Both the start and end date must be present. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. Both the start and end date must be present. required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/recurrences: get: summary: List all recurring transactions. description: List all recurring transactions. operationId: listRecurrence tags: - recurrences parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of recurring transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/RecurrenceArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new recurring transaction description: Creates a new recurring transaction. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeRecurrence tags: - recurrences parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 requestBody: content: application/json: schema: $ref: '#/components/schemas/RecurrenceStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RecurrenceStore' description: "JSON array or key=value pairs with the necessary recurring transaction information. See the model for the exact specifications." required: true responses: "200": description: 'New recurring transaction stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RecurrenceSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/recurrences/{id}: get: summary: Get a single recurring transaction. description: Get a single recurring transaction. operationId: getRecurrence parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the recurring transaction. tags: - recurrences responses: "200": description: 'The requested recurring transaction' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RecurrenceSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateRecurrence tags: - recurrences description: Update existing recurring transaction. summary: Update existing recurring transaction. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the recurring transaction. requestBody: content: application/json: schema: $ref: '#/components/schemas/RecurrenceUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RecurrenceUpdate' description: JSON array with updated recurring transaction information. See the model for the exact specifications. required: true responses: "200": description: 'Updated recurring transaction stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RecurrenceSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteRecurrence description: Delete a recurring transaction. Transactions created by the recurring transaction will not be deleted. summary: Delete a recurring transaction. tags: - recurrences parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the recurring transaction. responses: "204": description: Recurring transaction deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/recurrences/{id}/trigger: post: summary: Trigger the creation of a transaction for a specific recurring transaction description: | Trigger the creation of a transaction for a specific recurring transaction. All recurrences have a set of future occurrences. For those moments, you can trigger the creation of the transaction. That means the transaction will be created NOW, instead of on the indicated date. The transaction will be dated to _today_. So, if you recurring transaction that occurs every Monday, you can trigger the creation of a transaction for Monday in two weeks, today. On that Monday two weeks from now, no transaction will be created. Instead, the transaction is created right now, and dated _today_. operationId: triggerRecurrenceRecurrence parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the recurring transaction. - in: query name: date description: | A date formatted YYYY-MM-DD. This is the date for which you want the recurrence to fire. You can take the date from the list of occurrences in the recurring transaction. required: true schema: type: string format: date tags: - recurrences responses: "200": description: 'A list of transactions (always just 1) created by the recurrence, or a list of zero (0) when there is nothing to create for this date.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rule-groups/{id}/rules: get: summary: List rules in this rule group. description: List rules in this rule group. operationId: listRuleByGroup tags: - rule_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule group. responses: "200": description: A list of rules. content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rule-groups/{id}/test: get: summary: Test which transactions would be hit by the rule group. No changes will be made. description: Test which transactions would be hit by the rule group. No changes will be made. Limit the result if you want to. operationId: testRuleGroup tags: - rule_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule group. - in: query name: start description: | A date formatted YYYY-MM-DD, to limit the transactions the test will be applied to. Both the start date and the end date must be present. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to limit the transactions the test will be applied to. Both the start date and the end date must be present. required: false schema: type: string format: date example: "2025-11-30" - in: query name: search_limit description: | Maximum number of transactions Firefly III will try. Don't set this too high, or it will take Firefly III very long to run the test. I suggest a max of 200. required: false schema: type: integer - in: query name: triggered_limit description: | Maximum number of transactions the rule group can actually trigger on, before Firefly III stops. I would suggest setting this to 10 or 15. Don't go above the user's page size, because browsing to page 2 or 3 of a test result would fire the test again, making any navigation efforts very slow. required: false schema: type: integer - in: query name: accounts[] description: | Limit the testing of the rule group to these asset accounts or liabilities. Only asset accounts and liabilities will be accepted. Other types will be silently dropped. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "200": description: A list of transactions that would be changed by any of the rules of the rule group. No changes will be made. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rule-groups/{id}/trigger: post: summary: Fire the rule group on your transactions. description: Fire the rule group on your transactions. Changes will be made by the rules in the rule group. Limit the result if you want to. operationId: fireRuleGroup tags: - rule_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule group. - in: query name: start description: | A date formatted YYYY-MM-DD, to limit the transactions the actions will be applied to. Both the start date and the end date must be present. required: false schema: type: string example: "2025-11-01" format: date - in: query name: end description: | A date formatted YYYY-MM-DD, to limit the transactions the actions will be applied to. Both the start date and the end date must be present. required: false schema: type: string example: "2025-11-30" format: date - in: query name: accounts[] description: | Limit the triggering of the rule group to these asset accounts or liabilities. Only asset accounts and liabilities will be accepted. Other types will be silently dropped. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "204": description: "The rules in the group are executed. Due to the setup of this function (asynchronous job execution) the result cannot be displayed." "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rule-groups: get: summary: List all rule groups. description: List all rule groups. operationId: listRuleGroup tags: - rule_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of rule groups. content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleGroupArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new rule group. description: Creates a new rule group. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeRuleGroup parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - rule_groups requestBody: content: application/json: schema: $ref: '#/components/schemas/RuleGroupStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RuleGroupStore' description: "JSON array or key=value pairs with the necessary rule group information. See the model for the exact specifications." required: true responses: "200": description: 'New rule group stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleGroupSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rule-groups/{id}: get: summary: Get a single rule group. description: Get a single rule group. This does not include the rules. For that, see below. operationId: getRuleGroup parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule group. tags: - rule_groups responses: "200": description: 'The requested rule group' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleGroupSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateRuleGroup tags: - rule_groups description: Update existing rule group. summary: Update existing rule group. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule group. requestBody: content: application/json: schema: $ref: '#/components/schemas/RuleGroupUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RuleGroupUpdate' description: JSON array with updated rule group information. See the model for the exact specifications. required: true responses: "200": description: 'Updated rule group stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleGroupSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteRuleGroup description: Delete a rule group. summary: Delete a rule group. tags: - rule_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule group. responses: "204": description: Rule group deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rules/{id}/test: get: summary: Test which transactions would be hit by the rule. No changes will be made. description: Test which transactions would be hit by the rule. No changes will be made. Limit the result if you want to. operationId: testRule tags: - rules parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule. - in: query name: start description: | A date formatted YYYY-MM-DD, to limit the transactions the test will be applied to. Both the start date and the end date must be present. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to limit the transactions the test will be applied to. Both the start date and the end date must be present. required: false schema: type: string format: date example: "2025-11-30" - in: query name: accounts[] description: | Limit the testing of the rule to these asset accounts or liabilities. Only asset accounts and liabilities will be accepted. Other types will be silently dropped. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "200": description: A list of transactions that would be changed by the rule. No changes will be made. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rules/{id}/trigger: post: summary: Fire the rule on your transactions. description: Fire the rule group on your transactions. Changes will be made by the rules in the group. Limit the result if you want to. operationId: fireRule tags: - rules parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule. - in: query name: start description: | A date formatted YYYY-MM-DD, to limit the transactions the actions will be applied to. If the start date is not present, it will be set to one year ago. If you use this field, both the start date and the end date must be present. required: false schema: type: string example: "2025-11-01" format: date - in: query name: end description: | A date formatted YYYY-MM-DD, to limit the transactions the actions will be applied to. If the end date is not present, it will be set to today. If you use this field, both the start date and the end date must be present. required: false schema: type: string example: "2025-11-30" format: date - in: query name: accounts[] description: | Limit the triggering of the rule to these asset accounts or liabilities. Only asset accounts and liabilities will be accepted. Other types will be silently dropped. required: false explode: true schema: type: array items: type: integer format: int64 example: [ 1, 2, 3 ] responses: "204": description: "The rules in the group are executed. Due to the setup of this function (asynchronous job execution) the result cannot be displayed." "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rules: get: summary: List all rules. description: List all rules. operationId: listRule tags: - rules parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of rules content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new rule description: Creates a new rule. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeRule parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - rules requestBody: content: application/json: schema: $ref: '#/components/schemas/RuleStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RuleStore' description: "JSON array or key=value pairs with the necessary rule information. See the model for the exact specifications." required: true responses: "200": description: 'New rule stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/rules/{id}: get: summary: Get a single rule. description: Get a single rule. operationId: getRule parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the object. tags: - rules responses: "200": description: 'The requested rule' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateRule tags: - rules description: Update existing rule. summary: Update existing rule. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the object. requestBody: content: application/json: schema: $ref: '#/components/schemas/RuleUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RuleUpdate' description: JSON array with updated rule information. See the model for the exact specifications. required: true responses: "200": description: 'Updated rule stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteRule description: Delete an rule. summary: Delete an rule. tags: - rules parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the rule. responses: "204": description: Rule deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/tags/{tag}/attachments: get: summary: Lists all attachments. description: Lists all attachments. operationId: listAttachmentByTag tags: - tags parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: tag description: Either the tag itself or the tag ID. required: true schema: type: string format: string example: groceries responses: "200": description: A list of attachments content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/tags/{tag}/transactions: get: summary: "List all transactions with this tag." description: "List all transactions with this tag." operationId: listTransactionByTag tags: - tags parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: tag description: Either the tag itself or the tag ID. required: true schema: type: string format: string example: groceries - in: query name: start description: | A date formatted YYYY-MM-DD. This is the start date of the selected range (inclusive). required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. This is the end date of the selected range (inclusive). required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned. required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/tags: get: summary: List all tags. description: List all of the user's tags. operationId: listTag tags: - tags parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of tags content: application/vnd.api+json: schema: $ref: '#/components/schemas/TagArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new tag description: Creates a new tag. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeTag parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - tags requestBody: content: application/json: schema: $ref: '#/components/schemas/TagModelStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TagModelStore' description: "JSON array or key=value pairs with the necessary tag information. See the model for the exact specifications." required: true responses: "200": description: 'New tag stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TagSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/tags/{tag}: get: summary: Get a single tag. description: Get a single tag. operationId: getTag parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: tag description: Either the tag itself or the tag ID. If you use the tag itself, and it contains international (non-ASCII) characters, your mileage may vary. required: true schema: type: string format: string example: groceries tags: - tags responses: "200": description: 'The requested tag' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TagSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateTag tags: - tags description: Update existing tag. summary: Update existing tag. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: tag description: Either the tag itself or the tag ID. If you use the tag itself, and it contains international (non-ASCII) characters, your mileage may vary. required: true schema: type: string format: string example: groceries requestBody: content: application/json: schema: $ref: '#/components/schemas/TagModelUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TagModelUpdate' description: JSON array with updated tag information. See the model for the exact specifications. required: true responses: "200": description: 'Updated tag stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TagSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteTag description: Delete an tag. summary: Delete an tag. tags: - tags parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: tag description: Either the tag itself or the tag ID. If you use the tag itself, and it contains international (non-ASCII) characters, your mileage may vary. required: true schema: type: string format: string example: groceries responses: "204": description: Tag deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/accounts: get: summary: List all accounts with this currency. description: List all accounts with this currency. operationId: listAccountByCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. - in: query name: date description: | A date formatted YYYY-MM-DD. When added to the request, Firefly III will show the account's balance on that day. required: false schema: type: string format: date - in: query name: type description: Optional filter on the account type(s) returned required: false schema: $ref: '#/components/schemas/AccountTypeFilter' responses: "200": description: A list of accounts content: application/vnd.api+json: schema: $ref: '#/components/schemas/AccountArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/available-budgets: get: summary: List all available budgets with this currency. description: List all available budgets with this currency. operationId: listAvailableBudgetByCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: code required: true schema: type: string format: string example: EUR description: The currency code. responses: "200": description: A list of available budgets content: application/vnd.api+json: schema: $ref: '#/components/schemas/AvailableBudgetArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/bills: get: summary: List all bills with this currency. description: List all bills with this currency. operationId: listBillByCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. responses: "200": description: A list of bills. content: application/vnd.api+json: schema: $ref: '#/components/schemas/BillArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/budget-limits: get: summary: List all budget limits with this currency description: List all budget limits with this currency operationId: listBudgetLimitByCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. - in: query name: start description: Start date for the budget limit list. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: End date for the budget limit list. required: false schema: type: string format: date example: "2025-11-30" responses: "200": description: A list of budget limits. content: application/vnd.api+json: schema: $ref: '#/components/schemas/BudgetLimitArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/recurrences: get: summary: List all recurring transactions with this currency. description: List all recurring transactions with this currency. operationId: listRecurrenceByCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: code required: true schema: type: string format: string example: EUR description: The currency code. responses: "200": description: A list of recurring transactions content: application/vnd.api+json: schema: $ref: '#/components/schemas/RecurrenceArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/rules: get: summary: List all rules with this currency. description: List all rules with this currency. operationId: listRuleByCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. responses: "200": description: A list of rules content: application/vnd.api+json: schema: $ref: '#/components/schemas/RuleArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/transactions: get: summary: List all transactions with this currency. description: List all transactions with this currency. operationId: listTransactionByCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. - in: query name: start description: | A date formatted YYYY-MM-DD, to limit the list of transactions. required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD, to limit the list of transactions. required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies: get: summary: List all currencies. description: List all currencies. operationId: listCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of currencies. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new currency description: Creates a new currency. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeCurrency parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - currencies requestBody: content: application/json: schema: $ref: '#/components/schemas/CurrencyStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CurrencyStore' description: "JSON array or key=value pairs with the necessary currency information. See the model for the exact specifications." required: true responses: "200": description: 'New currency stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencySingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/enable: post: summary: Enable a single currency. description: Enable a single currency. operationId: enableCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. responses: "204": description: Currency was enabled. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencySingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/disable: post: summary: Disable a currency. description: Disable a currency. operationId: disableCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: code required: true schema: type: string example: GBP description: The currency code. responses: "204": description: Currency was disabled. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencySingle' "409": description: Currency cannot be disabled, because it is still in use. content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}/primary: post: summary: Make currency primary currency. description: Make this currency the primary currency for the current financial administration. If the currency is not enabled, it will be enabled as well. operationId: primaryCurrency tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. responses: "204": description: Currency has been made the primary currency. content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencySingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/{code}: get: summary: Get a single currency. description: Get a single currency. operationId: getCurrency parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: code required: true schema: type: string format: string example: USD description: The currency code. tags: - currencies responses: "200": description: 'The requested currency' content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencySingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateCurrency tags: - currencies description: Update existing currency. summary: Update existing currency. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: code required: true schema: type: string format: string example: EUR description: The currency code. requestBody: content: application/vnd.api+json: schema: $ref: '#/components/schemas/CurrencyUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/CurrencyUpdate' description: JSON array with updated currency information. See the model for the exact specifications. required: true responses: "200": description: 'Updated currency stored, result in response' content: application/json: schema: $ref: '#/components/schemas/CurrencySingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteCurrency description: Delete a currency. summary: Delete a currency. tags: - currencies parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: code required: true schema: type: string format: string example: GBP description: The currency code. responses: "204": description: Currency deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/currencies/primary: get: summary: Get the primary currency of the current administration. description: Get the primary currency of the current administration. This replaces what was called "the user's default currency" although they are essentially the same. operationId: getPrimaryCurrency parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - currencies responses: "200": description: 'The primary currency' content: application/json: schema: $ref: '#/components/schemas/CurrencySingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/transaction-journals/{id}/links: get: summary: Lists all the transaction links for an individual journal (individual split). description: Lists all the transaction links for an individual journal (a split). Don't use the group ID, you need the actual underlying journal (the split). operationId: listLinksByJournal tags: - transactions parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction journal / the split. responses: "200": description: A list of transaction links. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionLinkArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/transaction-journals/{id}: get: summary: Get a single transaction, based on one of the underlying transaction journals (transaction splits). description: Get a single transaction by underlying journal (split). operationId: getTransactionByJournal parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction journal (split). tags: - transactions responses: "200": description: 'The requested transaction.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteTransactionJournal description: Delete an individual journal (split) from a transaction. summary: Delete split from transaction tags: - transactions parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction journal (the split) you wish to delete. responses: "204": description: Transaction journal (split) deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/transactions/{id}/attachments: get: summary: Lists all attachments. description: Lists all attachments. operationId: listAttachmentByTransaction tags: - transactions parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction. responses: "200": description: A list of attachments content: application/vnd.api+json: schema: $ref: '#/components/schemas/AttachmentArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/transactions/{id}/piggy-bank-events: get: summary: Lists all piggy bank events. description: Lists all piggy bank events. operationId: listEventByTransaction tags: - transactions parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction. responses: "200": description: A list of piggy bank events. content: application/vnd.api+json: schema: $ref: '#/components/schemas/PiggyBankEventArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/transactions: get: summary: | List all the user's transactions. description: List all the user's transactions. operationId: listTransaction tags: - transactions parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: start description: | A date formatted YYYY-MM-DD. This is the start date of the selected range (inclusive). required: false schema: type: string format: date example: "2025-11-01" - in: query name: end description: | A date formatted YYYY-MM-DD. This is the end date of the selected range (inclusive). required: false schema: type: string format: date example: "2025-11-30" - in: query name: type description: Optional filter on the transaction type(s) returned. required: false schema: $ref: '#/components/schemas/TransactionTypeFilter' responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new transaction description: Creates a new transaction. The data required can be submitted as a JSON body or as a list of parameters. operationId: storeTransaction parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - transactions requestBody: content: application/json: schema: $ref: '#/components/schemas/TransactionStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TransactionStore' description: "JSON array or key=value pairs with the necessary transaction information. See the model for the exact specifications." required: true responses: "200": description: 'New transaction stored(s), result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/transactions/{id}: get: summary: Get a single transaction. description: Get a single transaction. operationId: getTransaction parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction. tags: - transactions responses: "200": description: 'The requested transaction.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateTransaction tags: - transactions description: Update an existing transaction. summary: Update existing transaction. For more information, see https://docs.firefly-iii.org/references/firefly-iii/api/specials/ parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction. requestBody: content: application/json: schema: $ref: '#/components/schemas/TransactionUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TransactionUpdate' description: JSON array with updated transaction information. See the model for the exact specifications. required: true responses: "200": description: 'Updated transaction stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteTransaction description: Delete a transaction. summary: Delete a transaction. tags: - transactions parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the transaction. responses: "204": description: Transaction deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/user-groups: get: summary: | List all the user groups available to this user. description: "List all the user groups available to this user. These are essentially the 'financial administrations' that Firefly III supports." operationId: listUserGroups tags: - user_groups parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of user groups. content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserGroupArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/user-groups/{id}: get: tags: - user_groups summary: Get a single user group. description: | Returns a single user group by its ID. operationId: getUserGroup parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The ID of the user group. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'The requested user group' content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserGroupSingle' put: summary: Update an existing user group. description: | Used to update a single user group. The available fields are still limited. operationId: updateUserGroup parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "1" description: The ID of the account. tags: - user_groups requestBody: content: application/json: schema: $ref: '#/components/schemas/UserGroupUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/UserGroupUpdate' description: JSON array or form-data with new user group information. See the model for the exact specifications. required: true responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "200": description: 'Updated user group is stored, result is in the response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserGroupSingle' /v1/search/accounts: get: summary: Search for accounts description: Search for accounts operationId: searchAccounts tags: - search parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: query description: The query you wish to search for. required: true schema: type: string example: "checking" - in: query name: type description: The type of accounts you wish to limit the search to. required: false schema: $ref: '#/components/schemas/AccountTypeFilter' - in: query name: field description: The account field(s) you want to search in. required: true schema: $ref: '#/components/schemas/AccountSearchFieldFilter' responses: "200": description: A list of accounts. content: application/vnd.api+json: schema: $ref: '#/components/schemas/AccountArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/search/transactions: get: summary: Search for transactions description: Searches through the users transactions. externalDocs: description: Search Documentation url: https://docs.firefly-iii.org/how-to/firefly-iii/features/search/ operationId: searchTransactions tags: - search parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: query name: query description: The query you wish to search for. required: true schema: type: string example: "groceries" responses: "200": description: A list of transactions. content: application/vnd.api+json: schema: $ref: '#/components/schemas/TransactionArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/summary/basic: get: tags: - summary operationId: getBasicSummary summary: Returns basic sums of the users data. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: start description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: end description: | A date formatted YYYY-MM-DD. required: true schema: type: string format: date - in: query name: currency_code description: | A currency code like EUR or USD, to filter the result. required: false schema: type: string format: string description: | Returns basic sums of the users data, like the net worth, spent and earned amounts. It is multi-currency, and is used in Firefly III to populate the dashboard. responses: '200': description: An array of sums. It depends on the user what you can expect to get back, so please try this out on the demo site. content: application/vnd.api+json: schema: $ref: '#/components/schemas/BasicSummary' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/about: get: tags: - about operationId: getAbout parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 summary: System information end point. description: | Returns general system information and versions of the (supporting) software. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: The available system information content: application/json: schema: $ref: '#/components/schemas/SystemInfo' /v1/about/user: get: tags: - about summary: Currently authenticated user endpoint. operationId: getCurrentUser parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 description: | Returns the currently authenticated user. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: The user content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserSingle' /v1/configuration: get: summary: Get Firefly III system configuration values. description: Returns all editable and not-editable configuration values for this Firefly III installation operationId: getConfiguration parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - configuration responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: System configuration values content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ConfigurationArray' application/json: schema: $ref: '#/components/schemas/ConfigurationArray' /v1/configuration/{name}: get: summary: Get a single Firefly III system configuration value description: Returns one configuration variable for this Firefly III installation operationId: getSingleConfiguration tags: - configuration parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: name required: true schema: $ref: '#/components/schemas/ConfigValueFilter' description: The name of the configuration value you want to know. responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: One system configuration value content: application/json: schema: $ref: '#/components/schemas/ConfigurationSingle' put: tags: - configuration summary: Update configuration value operationId: setConfiguration description: Set a single configuration value. Not all configuration values can be updated so the list of accepted configuration variables is small. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: name required: true schema: $ref: '#/components/schemas/ConfigValueUpdateFilter' description: The name of the configuration value you want to update. responses: "200": description: 'New configuration value stored, result in response.' content: application/json: schema: $ref: '#/components/schemas/ConfigurationSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' requestBody: description: JSON array with the necessary account information or key=value pairs. See the model for the exact specifications. content: application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ConfigurationUpdate' application/json: schema: $ref: '#/components/schemas/ConfigurationUpdate' required: true /v1/cron/{cliToken}: get: tags: - about parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: cliToken required: true schema: type: string format: string example: d5ea6b5fb774618dd6ad6ba6e0a7f55c description: The CLI token of any user in Firefly III, required to run the cron job. - in: query name: date description: | A date formatted YYYY-MM-DD. This can be used to make the cron job pretend it's running on another day. required: false schema: type: string format: date example: "2025-11-01" - in: query name: force description: | Forces the cron job to fire, regardless of whether it has fired before. This may result in double transactions or weird budgets, so be careful. required: false schema: type: boolean format: boolean example: false operationId: getCron summary: Cron job endpoint description: | Firefly III has one endpoint for its various cron related tasks. Send a GET to this endpoint to run the cron. The cron requires the CLI token to be present. The cron job will fire for all users. responses: "200": description: The result of the cron job(s) firing. content: application/json: schema: $ref: '#/components/schemas/CronResult' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/users: get: summary: List all users. description: List all the users in this instance of Firefly III. operationId: listUser tags: - users parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of users. content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new user description: | Creates a new user. The data required can be submitted as a JSON body or as a list of parameters. The user will be given a random password, which they can reset using the "forgot password" function. operationId: storeUser parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - users requestBody: content: application/json: schema: $ref: '#/components/schemas/User' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/User' description: "JSON array or key=value pairs with the necessary user information. See the model for the exact specifications." required: true responses: "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' "200": description: 'New user stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' /v1/users/{id}: get: summary: Get a single user. description: Gets all info of a single user. operationId: getUser parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The user ID. tags: - users responses: "200": description: 'The requested user.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateUser tags: - users description: Update existing user. summary: Update an existing user's information. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The user ID. requestBody: content: application/json: schema: $ref: '#/components/schemas/User' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/User' description: JSON array with updated user information. See the model for the exact specifications. required: true responses: "200": description: 'Updated user stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/UserSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteUser description: Delete a user. You cannot delete the user you're authenticated with. This cannot be undone. Be careful. summary: Delete a user. tags: - users parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The user ID. responses: "204": description: User deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/preferences: get: summary: List all users preferences. description: List all of the preferences of the user. operationId: listPreference tags: - preferences parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of preferences. content: application/vnd.api+json: schema: $ref: '#/components/schemas/PreferenceArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: tags: - preferences summary: Store a new preference for this user. operationId: storePreference description: This endpoint creates a new preference. The name and data are free-format, and entirely up to you. If the preference is not used in Firefly III itself it may not be configurable through the user interface, but you can use this endpoint to persist custom data for your own app. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 responses: "200": description: 'New account stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/PreferenceSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' requestBody: content: application/json: schema: $ref: '#/components/schemas/Preference' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Preference' description: JSON array with the necessary preference information or key=value pairs. See the model for the exact specifications. required: true /v1/preferences/{name}: get: summary: Return a single preference. description: Return a single preference and the value. operationId: getPreference parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: name required: true schema: type: string format: string example: currencyPreference description: The name of the preference. tags: - preferences responses: "200": description: A single preference. content: application/vnd.api+json: schema: $ref: '#/components/schemas/PreferenceSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: summary: Update preference description: Update a user's preference. operationId: updatePreference parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: name required: true schema: type: string format: string example: currencyPreference description: The name of the preference. Will always overwrite. Will be created if it does not exist. tags: - preferences requestBody: content: application/json: schema: $ref: '#/components/schemas/PreferenceUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PreferenceUpdate' description: "JSON array or key=value pairs with the necessary preference information. See the model for the exact specifications." required: true responses: "200": description: 'Updated preference.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/PreferenceSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks/{id}/messages: get: summary: Get all the messages of a single webhook. description: When a webhook is triggered the actual message that will be send is stored in a "message". You can view and analyse these messages. operationId: getWebhookMessages parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. tags: - webhooks responses: "200": description: A list of webhook messages. content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookMessageArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks/{id}/messages/{messageId}: get: summary: Get a single message from a webhook. description: When a webhook is triggered it will store the actual content of the webhook in a webhook message. You can view and analyse a single one using this endpoint. operationId: getSingleWebhookMessage parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. - in: path name: messageId required: true schema: type: integer example: 1 description: The webhook message ID. tags: - webhooks responses: "200": description: 'A single webhook message.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookMessageSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteWebhookMessage summary: Delete a webhook message. description: Delete a webhook message. Any time a webhook is triggered the message is stored before it's sent. You can delete them before or after sending. tags: - webhooks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. - in: path name: messageId required: true schema: type: integer example: 1 description: The webhook message ID. responses: "204": description: Webhook message deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks/{id}/messages/{messageId}/attempts: get: summary: Get all the failed attempts of a single webhook message. description: When a webhook message fails to send it will store the failure in an "attempt". You can view and analyse these. Webhook messages that receive too many attempts (failures) will not be sent again. You must first clear out old attempts before the message can go out again. operationId: getWebhookMessageAttempts parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. - in: path name: messageId required: true schema: type: integer example: 1 description: The webhook message ID. tags: - webhooks responses: "200": description: A list of webhook attempts. content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookAttemptArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks/{id}/messages/{messageId}/attempts/{attemptId}: get: summary: Get a single failed attempt from a single webhook message. description: When a webhook message fails to send it will store the failure in an "attempt". You can view and analyse these. Webhooks messages that receive too many attempts (failures) will not be fired. You must first clear out old attempts and try again. This endpoint shows you the details of a single attempt. The ID of the attempt must match the corresponding webhook and webhook message. operationId: getSingleWebhookMessageAttempt parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. - in: path name: messageId required: true schema: type: integer example: 1 description: The webhook message ID. - in: path name: attemptId required: true schema: type: integer example: 1 description: The webhook attempt ID. tags: - webhooks responses: "200": description: 'A single webhook attempt.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookAttemptSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteWebhookMessageAttempt summary: Delete a webhook attempt. description: Delete a webhook message attempt. If you delete all attempts for a webhook message, Firefly III will (once again) assume all is well with the webhook message and will try to send it again. tags: - webhooks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. - in: path name: messageId required: true schema: type: integer example: 1 description: The webhook message ID. - in: path name: attemptId required: true schema: type: integer example: 1 description: The webhook message attempt ID. responses: "204": description: Webhook message attempt deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks/{id}/submit: post: summary: Submit messages for a webhook. description: This endpoint will submit any open messages for this webhook. This is an asynchronous operation, so you can't see the result. Refresh the webhook message and/or the webhook message attempts to see the results. This may take some time if the webhook receiver is slow. operationId: submitWebhook parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. tags: - webhooks responses: "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "200": description: OK. "204": description: No messages to send, so did nothing. "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks/{id}/trigger-transaction/{transactionId}: post: summary: Trigger webhook for a given transaction. description: This endpoint will execute this webhook for a given transaction ID. This is an asynchronous operation, so you can't see the result. Refresh the webhook message and/or the webhook message attempts to see the results. This may take some time if the webhook receiver is slow. operationId: triggerTransactionWebhook parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true schema: type: string example: "123" description: The webhook ID. - in: path name: transactionId required: true schema: type: string example: "123" description: The transaction ID. tags: - webhooks responses: "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "204": description: Webhook triggered successfully. "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks: get: summary: List all webhooks. description: List all the user's webhooks. operationId: listWebhook tags: - webhooks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: query name: limit description: Number of items per page. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 10 - in: query name: page description: Page number. The default pagination is per 50 items. required: false schema: type: integer format: int32 example: 1 responses: "200": description: A list of webhooks. content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookArray' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' post: summary: Store a new webhook description: | Creates a new webhook. The data required can be submitted as a JSON body or as a list of parameters. The webhook will be given a random secret. operationId: storeWebhook parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 tags: - webhooks requestBody: content: application/json: schema: $ref: '#/components/schemas/WebhookStore' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/WebhookStore' description: "JSON array or key=value pairs with the necessary webhook information. See the model for the exact specifications." required: true responses: "200": description: 'New webhook stored, result in response.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' /v1/webhooks/{id}: get: summary: Get a single webhook. description: Gets all info of a single webhook. operationId: getWebhook parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id example: "123" required: true schema: type: string example: "123" description: The webhook ID. tags: - webhooks responses: "200": description: 'The requested webhook.' content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookSingle' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' put: operationId: updateWebhook tags: - webhooks summary: Update existing webhook. description: Update an existing webhook's information. If you wish to reset the secret, submit any value as the "secret". Firefly III will take this as a hint and reset the secret of the webhook. parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true example: "123" schema: type: string example: "123" description: The webhook ID. requestBody: content: application/json: schema: $ref: '#/components/schemas/WebhookUpdate' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/WebhookUpdate' description: JSON array with updated webhook information. See the model for the exact specifications. required: true responses: "200": description: 'Updated webhook stored, result in response' content: application/vnd.api+json: schema: $ref: '#/components/schemas/WebhookSingle' "422": description: 'Validation error. The body will have the exact details.' content: application/json: schema: $ref: '#/components/schemas/ValidationErrorResponse' "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' delete: operationId: deleteWebhook description: Delete a webhook. summary: Delete a webhook. tags: - webhooks parameters: - name: X-Trace-Id in: header description: Unique identifier associated with this request. required: false example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 schema: type: string format: uuid example: 40c71bbb-c676-4f24-83cf-cc725d7d7a00 - in: path name: id required: true example: "123" schema: type: string example: "123" description: The webhook ID. responses: "204": description: Webhook deleted. "401": description: Unauthenticated content: application/json: schema: $ref: '#/components/schemas/UnauthenticatedResponse' "404": description: Page not found content: application/json: schema: $ref: '#/components/schemas/NotFoundResponse' "400": description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' "500": description: Internal exception content: application/json: schema: $ref: '#/components/schemas/InternalExceptionResponse' components: schemas: AccountArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/AccountRead' meta: $ref: '#/components/schemas/Meta' AttachmentArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/AttachmentRead' meta: $ref: '#/components/schemas/Meta' AutocompleteAccountArray: type: array items: $ref: '#/components/schemas/AutocompleteAccount' AutocompleteBillArray: type: array items: $ref: '#/components/schemas/AutocompleteBill' AutocompleteBudgetArray: type: array items: $ref: '#/components/schemas/AutocompleteBudget' AutocompleteCategoryArray: type: array items: $ref: '#/components/schemas/AutocompleteCategory' AutocompleteCurrencyArray: type: array items: $ref: '#/components/schemas/AutocompleteCurrency' AutocompleteCurrencyCodeArray: type: array items: $ref: '#/components/schemas/AutocompleteCurrencyCode' AutocompleteObjectGroupArray: type: array items: $ref: '#/components/schemas/AutocompleteObjectGroup' AutocompletePiggyArray: type: array items: $ref: '#/components/schemas/AutocompletePiggy' AutocompletePiggyBalanceArray: type: array items: $ref: '#/components/schemas/AutocompletePiggyBalance' AutocompleteRecurrenceArray: type: array items: $ref: '#/components/schemas/AutocompleteRecurrence' AutocompleteRuleArray: type: array items: $ref: '#/components/schemas/AutocompleteRule' AutocompleteRuleGroupArray: type: array items: $ref: '#/components/schemas/AutocompleteRuleGroup' AutocompleteTagArray: type: array items: $ref: '#/components/schemas/AutocompleteTag' AutocompleteTransactionArray: type: array items: $ref: '#/components/schemas/AutocompleteTransaction' AutocompleteTransactionIDArray: type: array items: $ref: '#/components/schemas/AutocompleteTransactionID' AutocompleteTransactionTypeArray: type: array items: $ref: '#/components/schemas/AutocompleteTransactionType' AvailableBudgetArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/AvailableBudgetRead' meta: $ref: '#/components/schemas/Meta' BillArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/BillRead' meta: $ref: '#/components/schemas/Meta' BudgetArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/BudgetRead' meta: $ref: '#/components/schemas/Meta' BudgetLimitArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/BudgetLimitRead' meta: $ref: '#/components/schemas/Meta' CategoryArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/CategoryRead' meta: $ref: '#/components/schemas/Meta' ConfigurationArray: type: array items: $ref: '#/components/schemas/Configuration' CurrencyArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/CurrencyRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' CurrencyExchangeRateArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/CurrencyExchangeRateRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' LinkTypeArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/LinkTypeRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' ObjectGroupArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/ObjectGroupRead' meta: $ref: '#/components/schemas/Meta' PiggyBankArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/PiggyBankRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' PiggyBankEventArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/PiggyBankEventRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' PreferenceArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/PreferenceRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' RecurrenceArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/RecurrenceRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' RuleArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/RuleRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' RuleGroupArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/RuleGroupRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' TagArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/TagRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' TransactionArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/TransactionRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' TransactionLinkArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/TransactionLinkRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' UserArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/UserRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' UserGroupArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/UserGroupRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' WebhookArray: type: object required: - data - meta - links properties: data: type: array items: $ref: '#/components/schemas/WebhookRead' meta: $ref: '#/components/schemas/Meta' links: $ref: '#/components/schemas/PageLink' WebhookAttemptArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/WebhookAttemptRead' meta: $ref: '#/components/schemas/Meta' WebhookMessageArray: type: object required: - data - meta properties: data: type: array items: $ref: '#/components/schemas/WebhookMessageRead' meta: $ref: '#/components/schemas/Meta' AutocompleteAccount: type: object required: - id - name - name_with_balance - type - currency_id - currency_name - currency_code - currency_symbol - currency_decimal_places properties: id: type: string format: string example: "2" name: type: string format: string example: "Checking Account" description: Name of the account found by an auto-complete search. name_with_balance: type: string format: string example: "Checking Account ($123.45)" description: Asset accounts and liabilities have a second field with the given date's account balance in the account currency or primary currency. active: type: boolean format: boolean example: true description: Is the bill active or not? type: type: string format: string example: "Asset account" description: Account type of the account found by the auto-complete search. currency_id: type: string format: string example: "12" description: ID for the currency used by this account. If the user prefers amounts converted to their primary currency, this primary currency is used instead. currency_name: type: string format: string example: "Euro" description: Currency name for the currency used by this account. If the user prefers amounts converted to their primary currency, this primary currency is used instead. currency_code: type: string format: string example: "EUR" description: Currency code for the currency used by this account. If the user prefers amounts converted to their primary currency, this primary currency is used instead. currency_symbol: type: string format: string example: "$" description: Currency symbol for the currency used by this account. If the user prefers amounts converted to their primary currency, this primary currency is used instead. currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimal places for the currency used by this account. If the user prefers amounts converted to their primary currency, this primary currency is used instead. account_currency_id: type: string format: string example: "2" description: ID for the currency used by this account. Even if "convertToPrimary" is on, the account currency ID is displayed here. account_currency_name: type: string format: string example: "US Dollar" description: Name for the currency used by this account. Even if "convertToPrimary" is on, the account currency name is displayed here. account_currency_code: type: string format: string example: "USD" description: Code for the currency used by this account. Even if "convertToPrimary" is on, the account currency code is displayed here. account_currency_symbol: type: string format: string example: "$" description: Code for the currency used by this account. Even if "convertToPrimary" is on, the account currency code is displayed here. account_currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimal places for the currency used by this account. Even if "convertToPrimary" is on, the account currency code is displayed here. AutocompleteBill: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "Yearly bill" description: Name of the bill found by an auto-complete search. active: type: boolean format: boolean example: true description: Is the bill active or not? AutocompleteBudget: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "Groceries" description: Name of the budget found by an auto-complete search. active: type: boolean format: boolean example: true description: Is the budget active or not? AutocompleteCategory: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "Category X" description: Name of the category found by an auto-complete search. AutocompleteCurrency: type: object required: - id - name - code - symbol - decimal_places properties: id: type: string format: string example: "2" name: type: string format: string example: "Currency name" description: Currency name. code: type: string format: string example: "EUR" description: Currency code. symbol: type: string format: string example: "$" decimal_places: type: integer format: int32 example: 2 AutocompleteCurrencyCode: type: object required: - id - name - code - symbol - decimal_places properties: id: type: string format: string example: "2" name: type: string format: string example: "Currency name (XCN)" description: Currency name with the code between brackets. code: type: string format: string example: "EUR" description: Currency code. symbol: type: string format: string example: "$" decimal_places: type: integer format: int32 example: 2 AutocompleteObjectGroup: type: object required: - id - title - name properties: id: type: string format: string example: "2" title: type: string format: string example: "Object Group one" description: Title of the object group found by an auto-complete search. name: type: string format: string example: "Object Group one" description: Title of the object group found by an auto-complete search. AutocompletePiggy: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "New couch" description: Name of the piggy bank found by an auto-complete search. currency_id: type: string format: string example: "12" description: Currency ID for this piggy bank. This will always be the currency of the piggy bank, never the user's primary currency. currency_code: type: string format: string example: "EUR" description: Currency code for this piggy bank. This will always be the currency of the piggy bank, never the user's primary currency. currency_symbol: type: string format: string example: "$" currency_name: type: string format: string example: "Euro" description: Currency name for the currency used by this piggy bank. This will always be the currency of the piggy bank, never the user's primary currency. currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimal places for the currency used by this piggy bank. This will always be the currency of the piggy bank, never the user's primary currency. object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. AutocompletePiggyBalance: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "New couch" description: Name of the piggy bank found by an auto-complete search. name_with_balance: type: string format: string example: "New couch ($234.56 / $600)" description: Name of the piggy bank found by an auto-complete search, including the currently saved amount and the target amount. currency_id: type: string format: string example: "12" description: Currency ID for the currency used by this piggy bank. This will always be the piggy bank's currency, never the primary currency. currency_code: type: string format: string example: "EUR" description: Currency code for the currency used by this piggy bank. This will always be the piggy bank's currency, never the primary currency. currency_symbol: type: string format: string example: "$" description: Currency symbol for the currency used by this piggy bank. This will always be the piggy bank's currency, never the primary currency. currency_decimal_places: type: integer format: int32 example: 2 description: Currency decimal places for the currency used by this piggy bank. This will always be the piggy bank's currency, never the primary currency. object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. AutocompleteRecurrence: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "Yearly bill" description: Name of the recurrence found by an auto-complete search. description: type: string format: string example: "Should trigger daily." description: Description of the recurrence found by auto-complete. active: type: boolean format: boolean example: true description: Is the recurring transaction active or not? AutocompleteRule: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "Rule one" description: Name of the rule found by an auto-complete search. description: type: string format: string example: "Useful rule." description: Description of the rule found by auto-complete. active: type: boolean format: boolean example: true description: Is the bill active or not? AutocompleteRuleGroup: type: object required: - id - name properties: id: type: string format: string example: "2" name: type: string format: string example: "Rule group one" description: Name of the rule group found by an auto-complete search. description: type: string format: string example: "Some rule group." description: Description of the rule group found by auto-complete. active: type: boolean format: boolean example: true description: Is the bill active or not? AutocompleteTag: type: object required: - id - name - tag properties: id: type: string format: string example: "2" name: type: string format: string example: "too-expensive-tag-example" description: Name of the tag found by an auto-complete search. tag: type: string format: string example: "too-expensive-tag-example" description: Name of the tag found by an auto-complete search. AutocompleteTransaction: type: object required: - id - name - description properties: id: type: string format: string example: "2" description: The ID of a transaction journal (basically a single split). transaction_group_id: type: string format: string example: "2" description: The ID of the underlying transaction group. name: type: string format: string example: "Transaction" description: Transaction description description: type: string format: string example: "Transaction" description: Transaction description AutocompleteTransactionID: type: object required: - id - name - description properties: id: type: string format: string example: "2" description: The ID of a transaction journal (basically a single split). transaction_group_id: type: string format: string example: "2" description: The ID of the underlying transaction group. name: type: string format: string example: "#12: Transaction" description: Transaction description with ID in the name. description: type: string format: string example: "#12: Transaction" description: Transaction description with ID in the name. AutocompleteTransactionType: type: object required: - id - name - type properties: id: type: string format: string example: "2" name: type: string format: string example: "Withdrawal" description: Type of the object found by an auto-complete search. type: type: string format: string example: "Withdrawal" description: Name of the object found by an auto-complete search. ChartDataPoint: type: object properties: key: type: string format: string example: "value" description: "The key is the label of the value, so for example: '2018-01-01' => 13 or 'Groceries' => -123." ChartDataSet: type: object properties: label: type: string format: string example: "Checking account" description: "This is the title of the current set. It can refer to an account, a budget or another object (by name)." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" start_date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" end_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" type: type: string format: string example: "line" description: "Indicated the type of chart that is expected to be rendered. You can safely ignore this if you want." period: $ref: '#/components/schemas/ChartDatasetPeriodProperty' yAxisID: type: integer format: int32 example: 0 description: "Used to indicate the Y axis for this data set. Is usually between 0 and 1 (left and right side of the chart)." entries: type: object description: "The actual entries for this data set. They 'key' value is the label for the data point. The value is the actual (numerical) value." items: $ref: '#/components/schemas/ChartDataPoint' pc_entries: type: object description: "The actual entries for this data set. They 'key' value is the label for the data point. The value is the actual (numerical) value." items: $ref: '#/components/schemas/ChartDataPoint' ChartLine: type: array items: $ref: '#/components/schemas/ChartDataSet' DataDestroyObject: type: string enum: - not_assets_liabilities - budgets - bills - piggy_banks - rules - recurring - categories - tags - object_groups - accounts - asset_accounts - expense_accounts - revenue_accounts - liabilities - transactions - withdrawals - deposits - transfers AccountSearchFieldFilter: type: string enum: - all - iban - name - number - id ConfigValueFilter: type: string example: "configuration.is_demo_site" description: "Title of the configuration value." enum: - configuration.is_demo_site - configuration.permission_update_check - configuration.last_update_check - configuration.single_user_mode - firefly.version - firefly.default_location - firefly.account_to_transaction - firefly.allowed_opposing_types - firefly.accountRoles - firefly.valid_liabilities - firefly.interest_periods - firefly.enable_external_map - firefly.expected_source_types - app.timezone - firefly.bill_periods - firefly.credit_card_types - firefly.languages - firefly.valid_view_ranges - cer.enabled - firefly.preselected_accounts - firefly.rule-actions - firefly.context-rule-actions - search.operators - webhook.triggers - webhook.responses - webhook.deliveries ConfigValueUpdateFilter: type: string enum: - configuration.is_demo_site - configuration.permission_update_check - configuration.last_update_check - configuration.single_user_mode ExportFileFilter: type: string enum: - csv InsightGroup: type: array items: $ref: '#/components/schemas/InsightGroupEntry' InsightGroupEntry: type: object properties: id: type: string format: string example: "123" description: "This ID is a reference to the original object." name: type: string format: string example: "Land lord" description: "This is the name of the object." difference: type: string format: string example: "-123.45" description: "The amount spent or earned between start date and end date, a number defined as a string, for this object and all asset accounts." difference_float: type: number format: double example: -123.45 description: "The amount spent or earned between start date and end date, a number as a float, for this object and all asset accounts. May have rounding errors." currency_id: type: string format: string example: "5" description: "The currency ID of the expenses listed for this account." currency_code: type: string format: string example: "EUR" description: "The currency code of the expenses listed for this account." InsightTotal: type: array items: $ref: '#/components/schemas/InsightTotalEntry' InsightTotalEntry: type: object properties: difference: type: string format: string example: "123.45" description: "The amount spent between start date and end date, defined as a string, for this expense account and all asset accounts." difference_float: type: number format: double example: 123.45 description: "The amount spent between start date and end date, defined as a string, for this expense account and all asset accounts. This number is a float (double) and may have rounding errors." currency_id: type: string format: string example: "5" description: "The currency ID of the expenses listed for this expense account." currency_code: type: string format: string example: "EUR" description: "The currency code of the expenses listed for this expense account." InsightTransfer: type: array items: $ref: '#/components/schemas/InsightTransferEntry' InsightTransferEntry: type: object properties: id: type: string format: string example: "123" description: "This ID is a reference to the original object." name: type: string format: string example: "Land lord" description: "This is the name of the object." difference: type: string format: string example: "-123.45" description: "The total amount transferred between start date and end date, a number defined as a string, for this asset account." difference_float: type: number format: double example: -123.45 description: "The total amount transferred between start date and end date, a number as a float, for this asset account. May have rounding errors." in: type: string format: string example: "123.45" description: "The total amount transferred TO this account between start date and end date, a number defined as a string, for this asset account." in_float: type: number format: double example: 123.45 description: "The total amount transferred FROM this account between start date and end date, a number as a float, for this asset account. May have rounding errors." out: type: string format: string example: "123.45" description: "The total amount transferred FROM this account between start date and end date, a number defined as a string, for this asset account." out_float: type: number format: double example: 123.45 description: "The total amount transferred TO this account between start date and end date, a number as a float, for this asset account. May have rounding errors." currency_id: type: string format: string example: "5" description: "The currency ID of the expenses listed for this account." currency_code: type: string format: string example: "EUR" description: "The currency code of the expenses listed for this account." CategoryRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "categories" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/CategoryProperties' CategorySingle: type: object required: - data properties: data: $ref: '#/components/schemas/CategoryRead' ConfigurationSingle: type: object required: - data properties: data: $ref: '#/components/schemas/Configuration' CurrencyRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "currencies" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/CurrencyProperties' CurrencySingle: type: object required: - data properties: data: $ref: '#/components/schemas/CurrencyRead' LinkTypeRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "link_types" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/LinkType' links: $ref: '#/components/schemas/ObjectLink' LinkTypeSingle: type: object required: - data properties: data: $ref: '#/components/schemas/LinkTypeRead' ObjectGroupRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "object_groups" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/ObjectGroup' ObjectGroupSingle: type: object required: - data properties: data: $ref: '#/components/schemas/ObjectGroupRead' PiggyBankEventRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "piggy_bank_events" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/PiggyBankEventProperties' links: $ref: '#/components/schemas/ObjectLink' PiggyBankRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "piggy_banks" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/PiggyBankProperties' links: $ref: '#/components/schemas/ObjectLink' PiggyBankSingle: type: object required: - data properties: data: $ref: '#/components/schemas/PiggyBankRead' PreferenceRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "preferences" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/Preference' PreferenceSingle: type: object required: - data properties: data: $ref: '#/components/schemas/PreferenceRead' RecurrenceRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "recurrences" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/RecurrenceProperties' links: $ref: '#/components/schemas/ObjectLink' RecurrenceSingle: type: object required: - data properties: data: $ref: '#/components/schemas/RecurrenceRead' RuleGroupRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "rules_group" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/RuleGroup' links: $ref: '#/components/schemas/ObjectLink' RuleGroupSingle: type: object required: - data properties: data: $ref: '#/components/schemas/RuleGroupRead' RuleRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "rules" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/Rule' links: $ref: '#/components/schemas/ObjectLink' RuleSingle: type: object required: - data properties: data: $ref: '#/components/schemas/RuleRead' TagRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "tags" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/TagModel' links: $ref: '#/components/schemas/ObjectLink' TagSingle: type: object required: - data properties: data: $ref: '#/components/schemas/TagRead' TransactionLinkRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "transactionLinks" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/TransactionLink' links: $ref: '#/components/schemas/ObjectLink' TransactionLinkSingle: type: object required: - data properties: data: $ref: '#/components/schemas/TransactionLinkRead' TransactionRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "transactions" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/Transaction' links: $ref: '#/components/schemas/ObjectLink' TransactionSingle: type: object required: - data properties: data: $ref: '#/components/schemas/TransactionRead' UserRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "users" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/User' links: $ref: '#/components/schemas/ObjectLink' WebhookAttemptRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "webhook_attempts" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/WebhookAttempt' WebhookAttemptSingle: type: object required: - data properties: data: $ref: '#/components/schemas/WebhookAttemptRead' WebhookMessageRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "webhook_messages" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/WebhookMessage' WebhookMessageSingle: type: object required: - data properties: data: $ref: '#/components/schemas/WebhookMessageRead' WebhookRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "webhooks" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/WebhookProperties' links: $ref: '#/components/schemas/ObjectLink' WebhookSingle: type: object required: - data properties: data: $ref: '#/components/schemas/WebhookRead' AccountProperties: type: object required: - name - type properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true active: type: boolean format: boolean example: false default: true order: type: integer format: int32 example: 1 nullable: true description: "Order of the account. Is NULL if account is not asset or liability." name: type: string format: string example: "My checking account" type: $ref: '#/components/schemas/ShortAccountTypeProperty' account_role: $ref: '#/components/schemas/AccountRoleProperty' object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_order: type: integer format: int32 example: 5 readOnly: true nullable: true description: The order of the group. At least 1, for the highest sorting. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the account has a currency setting. If false, the account uses the administration's primary currency. Asset accounts and liability accounts always have a currency setting, while expense and revenue accounts do not." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." current_balance: type: string format: amount example: "123.45" readOnly: true description: "The current balance of the account in the account's currency. If the account has no currency, this is the balance in the administration's primary currency. Either way, the `currency_*` fields reflect the currency used." pc_current_balance: type: string format: amount example: "123.45" readOnly: true nullable: true description: "The current balance of the account in the administration's primary currency. The `primary_currency_*` fields reflect the currency used. This field is NULL if the user does have 'convert to primary' set to true in their settings." balance_difference: type: string format: amount example: "123.45" readOnly: true description: "If you submit a start AND end date, this will be the difference between those two moments." pc_balance_difference: type: string format: amount example: "123.45" readOnly: true nullable: true description: "If you submit a start AND end date, this will be the difference in the currency of the account or the administration's primary currency between those two moments." opening_balance: type: string format: amount example: "-1012.12" description: "Represents the opening balance, the initial amount this account holds in the currency of the account or the administration's primary currency if the account has no currency. Either way, the `currency_*` fields reflect the currency used." pc_opening_balance: type: string format: amount example: "-1012.12" description: "The opening balance of the account in the administration's primary currency (pc). The `primary_currency_*` fields reflect the currency used. This field is NULL if the user does have 'convert to primary' set to true in their settings." virtual_balance: type: string format: amount example: "123.45" description: "The virtual balance of the account in the account's currency or the administration's primary currency if the account has no currency." pc_virtual_balance: type: string format: amount example: "123.45" description: "The virtual balance of the account in the administration's primary currency (pc). The `primary_currency_*` fields reflect the currency used. This field is NULL if the user does have 'convert to primary' set to true in their settings." debt_amount: type: string format: amount nullable: true example: "1012.12" description: "In liability accounts (loans, debts and mortgages), this is the amount of debt in the account's currency (see the `currency_*` fields). In asset accounts, this is NULL." pc_debt_amount: type: string format: amount nullable: true example: "1012.12" description: "In liability accounts (loans, debts and mortgages), this is the amount of debt in the administration's primary currency (see the `currency_*` fields. In asset accounts, this is NULL." current_balance_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" readOnly: true description: "The timestamp for this date is always 23:59:59, to indicate it's the balance at the very END of that particular day." notes: type: string format: string nullable: true example: "Some example notes" monthly_payment_date: nullable: true type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Mandatory when the account_role is ccAsset. Moment at which CC payment installments are asked for by the bank." credit_card_type: $ref: '#/components/schemas/CreditCardTypeProperty' account_number: type: string format: string nullable: true example: "7009312345678" iban: type: string format: iban example: "GB98MIDL07009312345678" nullable: true bic: type: string format: string example: "BOFAUS3N" nullable: true opening_balance_date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" nullable: true description: Represents the date of the opening balance. liability_type: $ref: '#/components/schemas/LiabilityTypeProperty' liability_direction: $ref: '#/components/schemas/LiabilityDirectionProperty' interest: type: string format: string example: "5.3" description: "Mandatory when type is liability. Interest percentage." nullable: true interest_period: $ref: '#/components/schemas/InterestPeriodProperty' include_net_worth: type: boolean format: boolean example: true default: true longitude: type: number format: double example: 5.916667 nullable: true description: Latitude of the accounts's location, if applicable. Can be used to draw a map. latitude: type: number format: double example: 51.983333 nullable: true description: Latitude of the accounts's location, if applicable. Can be used to draw a map. zoom_level: type: integer format: int32 example: 6 nullable: true description: "Zoom level for the map, if drawn. This to set the box right. Unfortunately this is a proprietary value because each map provider has different zoom levels." last_activity: nullable: true type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Last activity of the account." AccountRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "accounts" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/AccountProperties' AccountSingle: type: object required: - data properties: data: $ref: '#/components/schemas/AccountRead' AccountStore: type: object required: - name - type properties: name: type: string format: string example: "My checking account" type: $ref: '#/components/schemas/ShortAccountTypeProperty' iban: type: string format: iban example: "GB98MIDL07009312345678" nullable: true bic: type: string format: string example: "BOFAUS3N" nullable: true account_number: type: string format: string nullable: true example: "7009312345678" opening_balance: type: string format: amount example: "-1012.12" description: Represents the opening balance, the initial amount this account holds. opening_balance_date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" nullable: true description: Represents the date of the opening balance. virtual_balance: type: string format: amount example: "123.45" currency_id: type: string format: string example: "12" description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." currency_code: type: string format: string example: "EUR" description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." active: type: boolean format: boolean example: false default: true description: "If omitted, defaults to true." order: type: integer format: int32 example: 1 description: "Order of the account" include_net_worth: type: boolean format: boolean example: true default: true description: "If omitted, defaults to true." account_role: $ref: '#/components/schemas/AccountRoleProperty' credit_card_type: $ref: '#/components/schemas/CreditCardTypeProperty' monthly_payment_date: nullable: true type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Mandatory when the account_role is ccAsset. Moment at which CC payment installments are asked for by the bank." liability_type: $ref: '#/components/schemas/LiabilityTypeProperty' liability_direction: $ref: '#/components/schemas/LiabilityDirectionProperty' interest: type: string format: string example: "5.3" default: "0" description: "Mandatory when type is liability. Interest percentage." nullable: true interest_period: $ref: '#/components/schemas/InterestPeriodProperty' notes: type: string format: string nullable: true example: "Some example notes" latitude: type: number format: double example: 51.983333 nullable: true description: Latitude of the accounts's location, if applicable. Can be used to draw a map. longitude: type: number format: double example: 5.916667 nullable: true description: Latitude of the accounts's location, if applicable. Can be used to draw a map. zoom_level: type: integer format: int32 example: 6 nullable: true description: "Zoom level for the map, if drawn. This to set the box right. Unfortunately this is a proprietary value because each map provider has different zoom levels." AccountUpdate: type: object required: - name - type properties: name: type: string format: string example: "My checking account" iban: type: string format: iban example: "GB98MIDL07009312345678" nullable: true bic: type: string format: string example: "BOFAUS3N" nullable: true account_number: type: string format: string nullable: true example: "7009312345678" opening_balance: type: string format: amount example: "-1012.12" opening_balance_date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" nullable: true virtual_balance: type: string format: amount example: "123.45" currency_id: type: string format: string example: "12" description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." currency_code: type: string format: string example: "EUR" description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." active: type: boolean format: boolean example: false default: true description: "If omitted, defaults to true." order: type: integer format: int32 example: 1 description: "Order of the account" include_net_worth: type: boolean format: boolean example: true default: true description: "If omitted, defaults to true." account_role: $ref: '#/components/schemas/AccountRoleProperty' credit_card_type: $ref: '#/components/schemas/CreditCardTypeProperty' monthly_payment_date: nullable: true type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Mandatory when the account_role is ccAsset. Moment at which CC payment installments are asked for by the bank." liability_type: $ref: '#/components/schemas/LiabilityTypeProperty' interest: type: string format: string example: "5.3" description: "Mandatory when type is liability. Interest percentage." nullable: true interest_period: $ref: '#/components/schemas/InterestPeriodProperty' notes: type: string format: string nullable: true example: "Some example notes" latitude: type: number format: double example: 51.983333 nullable: true description: Latitude of the account's location, if applicable. Can be used to draw a map. If omitted, the existing location will be kept. If submitted as NULL, the current location will be removed. longitude: type: number format: double example: 5.916667 nullable: true description: Latitude of the account's location, if applicable. Can be used to draw a map. If omitted, the existing location will be kept. If submitted as NULL, the current location will be removed. zoom_level: type: integer format: int32 example: 6 nullable: true description: Zoom level for the map, if drawn. This to set the box right. Unfortunately this is a proprietary value because each map provider has different zoom levels. If omitted, the existing location will be kept. If submitted as NULL, the current location will be removed. ArrayEntryWithCurrencyAndSum: type: object properties: currency_id: type: string format: string example: "5" currency_code: type: string format: string example: "USD" currency_symbol: type: string format: string example: "$" currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimals supported by the currency sum: type: string format: amount example: "123.45" description: The amount earned, spent or transferred. AttachmentProperties: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true attachable_type: $ref: '#/components/schemas/AttachableType' attachable_id: type: string format: string example: "134" description: ID of the model this attachment is linked to. hash: type: string format: string example: "0c3f95f34370baa88f9fd9a671fea305" description: Hash of the file for basic duplicate detection. filename: type: string format: string example: "file.pdf" download_url: type: string format: string example: "https://demo.firefly-iii.org/api/v1/attachments/191/download" upload_url: type: string format: string example: "https://demo.firefly-iii.org/api/v1/attachments/191/download" title: type: string format: string example: "Some PDF file" nullable: true notes: type: string format: string example: "Some notes" nullable: true mime: type: string format: string example: "application/pdf" readOnly: true size: type: integer format: int32 example: 48211 readOnly: true AttachmentRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "attachments" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/AttachmentProperties' links: $ref: '#/components/schemas/ObjectLink' AttachmentSingle: type: object required: - data properties: data: $ref: '#/components/schemas/AttachmentRead' AttachmentStore: type: object required: - filename - attachable_type - attachable_id properties: filename: type: string format: string example: "file.pdf" attachable_type: $ref: '#/components/schemas/AttachableType' attachable_id: type: string format: string example: "134" description: ID of the model this attachment is linked to. title: type: string format: string example: "Some PDF file" notes: type: string format: string example: "Some notes" nullable: true AttachmentUpdate: type: object properties: filename: type: string format: string example: "file.pdf" title: type: string format: string example: "Some PDF file" notes: type: string format: string example: "Some notes" nullable: true AvailableBudgetProperties: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." amount: type: string format: amount example: "123.45" description: "The amount of this available budget in the currency of this available budget." pc_amount: type: string format: amount example: "123.45" description: "The amount of this available budget in the primary currency (pc) of this administration." start: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: Start date of the available budget. end: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: End date of the available budget. spent_in_budgets: type: array items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' readOnly: true pc_spent_in_budgets: type: array items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' readOnly: true description: | The amount spent in budgets in the primary currency (pc) of this administration. spent_outside_budgets: type: array items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' readOnly: true pc_spent_outside_budgets: type: array items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' readOnly: true description: | The amount spent outside of budgets in the primary currency (pc) of this administration. AvailableBudgetRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "available_budgets" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/AvailableBudgetProperties' AvailableBudgetSingle: type: object required: - data properties: data: $ref: '#/components/schemas/AvailableBudgetRead' BillProperties: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true name: type: string format: string example: "Rent" description: "The name of the subscription." object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." amount_min: type: string format: amount example: "123.45" description: "The minimum amount that is expected for this subscription in the subscription's currency." pc_amount_min: type: string format: amount example: "123.45" description: "The minimum amount that is expected for this subscription in the administration's primary currency." amount_max: type: string format: amount example: "123.45" description: "The maximum amount that is expected for this subscription in the subscription's currency." pc_amount_max: type: string format: amount example: "123.45" description: "The maximum amount that is expected for this subscription in the administration's primary currency." amount_avg: type: string format: amount example: "123.45" description: "The average amount that is expected for this subscription in the subscription's currency." pc_amount_avg: type: string format: amount example: "123.45" description: "The average amount that is expected for this subscription in the administration's primary currency." date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" end_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: "The date after which this subscription is no longer valid or applicable" nullable: true extension_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: "The date before which the subscription must be renewed (or cancelled)" nullable: true repeat_freq: $ref: '#/components/schemas/BillRepeatFrequency' skip: type: integer format: int32 example: 0 description: How often the subscription will be skipped. 1 means a bi-monthly subscription. active: type: boolean format: boolean example: true description: If the subscription is active. order: type: integer format: int32 example: 1 description: "Order of the subscription." notes: type: string format: string example: "Some example notes" nullable: true object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_order: type: integer format: int32 example: 5 readOnly: true nullable: true description: The order of the group. At least 1, for the highest sorting. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. paid_dates: type: array description: "Array of past transactions when the subscription was paid." readOnly: true items: type: object readOnly: true properties: transaction_group_id: type: string format: string example: "123" description: "Transaction group ID of the transaction linked to this subscription." readOnly: true transaction_journal_id: type: string format: string example: "123" description: "Transaction journal ID of the transaction linked to this subscription." readOnly: true date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Date the bill was paid." readOnly: true subscription_id: type: string format: string example: "123" description: "ID of this subscription." readOnly: true currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." amount: type: string format: amount example: "123.45" description: "The amount that was paid for this subscription in the subscription's currency." pc_amount: type: string format: amount example: "123.45" description: "The amount that was paid for this subscription in the administration's primary currency." foreign_amount: type: string format: amount example: "123.45" description: "The foreign amount that was paid for this subscription in the subscription's currency." pc_foreign_amount: type: string format: amount example: "123.45" description: "The foreign amount that was paid for this subscription in the administration's primary currency." pay_dates: type: array description: "Array of future dates when the bill is expected to be paid. Autogenerated." readOnly: true items: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true next_expected_match: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "When the subscription is expected to be due." nullable: true readOnly: true next_expected_match_diff: type: string format: string example: "today" description: "Formatted (locally) when the subscription is due." nullable: true readOnly: true BillRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "bills" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/BillProperties' BillSingle: type: object required: - data properties: data: $ref: '#/components/schemas/BillRead' BillStore: type: object required: - name - amount_min - amount_max - date - repeat_freq properties: currency_id: type: string format: string example: "5" description: Use either currency_id or currency_code currency_code: type: string format: string example: EUR description: Use either currency_id or currency_code name: type: string format: string example: "Rent" amount_min: type: string format: amount example: "123.45" amount_max: type: string format: amount example: "123.45" date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" end_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: "The date after which this bill is no longer valid or applicable" extension_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: "The date before which the bill must be renewed (or cancelled)" repeat_freq: $ref: '#/components/schemas/BillRepeatFrequency' skip: type: integer format: int32 example: 0 description: How often the bill must be skipped. 1 means a bi-monthly bill. active: type: boolean format: boolean example: true description: If the bill is active. notes: type: string format: string example: "Some example notes" nullable: true object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. BillUpdate: type: object required: - name properties: currency_id: type: string format: string example: "5" description: Use either currency_id or currency_code currency_code: type: string format: string example: EUR description: Use either currency_id or currency_code name: type: string format: string example: "Rent" amount_min: type: string format: amount example: "123.45" amount_max: type: string format: amount example: "123.45" date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" end_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: "The date after which this bill is no longer valid or applicable" extension_date: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: "The date before which the bill must be renewed (or cancelled)" repeat_freq: $ref: '#/components/schemas/BillRepeatFrequency' skip: type: integer format: int32 example: 0 description: How often the bill must be skipped. 1 means a bi-monthly bill. active: type: boolean format: boolean example: true description: If the bill is active. notes: type: string format: string example: "Some example notes" nullable: true object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. BudgetProperties: type: object required: - name properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true active: type: boolean format: boolean example: false name: type: string format: string example: "Bills" order: type: integer format: int32 example: 5 readOnly: true notes: type: string format: string example: "Some notes" nullable: true auto_budget_type: $ref: '#/components/schemas/AutoBudgetType' auto_budget_period: $ref: '#/components/schemas/AutoBudgetPeriod' object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_order: type: integer format: int32 example: 5 readOnly: true nullable: true description: The order of the group. At least 1, for the highest sorting. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." auto_budget_amount: type: string format: amount example: "-1012.12" nullable: true description: "The amount for the auto-budget, if set." pc_auto_budget_amount: type: string format: amount example: "-1012.12" nullable: true description: "The amount for the auto-budget, if set in the primary currency of the administration." spent: description: "Information on how much was spent in this budget. Is only filled in when the start and end date are submitted." type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' pc_spent: description: "Information on how much was spent in this budget. Is only filled in when the start and end date are submitted. It is converted to the primary currency of the administration." type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' BudgetRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "budgets" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/BudgetProperties' BudgetSingle: type: object required: - data properties: data: $ref: '#/components/schemas/BudgetRead' BudgetStore: type: object required: - name properties: name: type: string format: string example: "Bills" active: type: boolean format: boolean example: false order: type: integer format: int32 example: 5 readOnly: true notes: type: string format: string example: "Some notes" nullable: true fire_webhooks: type: boolean format: boolean example: true default: true description: "Whether or not to fire the webhooks that are related to this event." auto_budget_type: $ref: '#/components/schemas/AutoBudgetType' auto_budget_currency_id: type: string format: string example: "12" nullable: true description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." auto_budget_currency_code: type: string format: string example: "EUR" nullable: true description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." auto_budget_amount: type: string format: amount example: "-1012.12" nullable: true auto_budget_period: $ref: '#/components/schemas/AutoBudgetPeriod' BudgetUpdate: type: object required: - name properties: name: type: string format: string example: "Bills" active: type: boolean format: boolean example: false order: type: integer format: int32 example: 5 notes: type: string format: string example: "Some notes" nullable: true fire_webhooks: type: boolean format: boolean example: true default: true description: "Whether or not to fire the webhooks that are related to this event." auto_budget_type: $ref: '#/components/schemas/AutoBudgetType' auto_budget_currency_id: type: string format: string example: "12" nullable: true description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." auto_budget_currency_code: type: string format: string example: "EUR" nullable: true description: "Use either currency_id or currency_code. Defaults to the user's financial administration's currency." auto_budget_amount: type: string format: amount example: "-1012.12" nullable: true auto_budget_period: $ref: '#/components/schemas/AutoBudgetPeriod' BudgetLimitProperties: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true start: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: Start date of the budget limit. end: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: End date of the budget limit. budget_id: type: string format: string example: "23" description: The budget ID of the associated budget. readOnly: true object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." amount: type: string format: amount example: "123.45" pc_amount: type: string format: amount example: "123.45" nullable: true readOnly: true description: "The amount of this budget limit in the user's primary currency, if the original amount is in a different currency." period: type: string format: string example: "monthly" nullable: true readOnly: true description: Period of the budget limit. Only used when auto-generated by auto-budget. spent: description: "Amount(s) spent in the currencies in the database for this budget limit." type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' pc_spent: description: "Amount(s) spent in the primary currency in the database for this budget limit." type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' notes: type: string format: string example: "Some example notes" nullable: true description: Some notes for this specific budget limit. BudgetLimitRead: type: object required: - type - id - attributes properties: type: type: string format: string example: "budget_limits" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/BudgetLimitProperties' BudgetLimitSingle: type: object required: - data properties: data: $ref: '#/components/schemas/BudgetLimitRead' BudgetLimitStore: type: object required: - amount - start - end - budget_id properties: currency_id: type: string format: string example: "5" description: Use either currency_id or currency_code. Defaults to the user's primary currency. currency_code: type: string format: string example: EUR description: Use either currency_id or currency_code. Defaults to the user's primary currency. budget_id: type: string format: string example: "23" description: The budget ID of the associated budget. readOnly: true start: type: string format: date example: "2025-11-01" description: Start date of the budget limit. period: type: string format: string example: "monthly" nullable: true readOnly: true description: Period of the budget limit. Only used when auto-generated by auto-budget. end: type: string format: date example: "2025-11-30" description: End date of the budget limit. amount: type: string format: amount example: "123.45" notes: type: string format: string example: "Some example notes" nullable: true description: Some notes for this specific budget limit. fire_webhooks: type: boolean format: boolean example: true default: true description: "Whether or not to fire the webhooks that are related to this event." BudgetLimitUpdate: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true start: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: Start date of the budget limit. end: type: string format: date-time example: "2025-11-30T23:59:59+00:00" description: End date of the budget limit. budget_id: type: string format: string example: "23" description: The budget ID of the associated budget. readOnly: true object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." period: type: string format: string example: "monthly" nullable: true readOnly: true description: Period of the budget limit. Only used when auto-generated by auto-budget. amount: type: string format: amount example: "123.45" pc_amount: type: string format: amount example: "123.45" nullable: true readOnly: true description: "The amount of this budget limit in the user's primary currency, if the original amount is in a different currency." spent: type: string format: amount example: "-1012.12" nullable: true readOnly: true description: "Will be in the primary currency if this is turned on by the user." notes: type: string format: string example: "Some example notes" nullable: true description: Some notes for this specific budget limit. fire_webhooks: type: boolean format: boolean example: true default: true description: "Whether or not to fire the webhooks that are related to this event." CategoryProperties: type: object required: - name properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true name: type: string format: string example: "Lunch" notes: type: string format: string nullable: true example: "Some example notes" object_has_currency_setting: type: boolean format: boolean example: false readOnly: false description: "This object never has its own currency setting, so this value is always false." primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." spent: description: "Amount(s) spent in the currencies in the database for this category. ONLY present when start and date are set." type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' pc_spent: description: "Amount(s) spent in the primary currency in the database for this category. ONLY present when start and date are set. " type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' earned: description: "Amount(s) earned in the currencies in the database for this category. ONLY present when start and date are set." type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' pc_earned: description: "Amount(s) earned in the primary currency in the database for this category. ONLY present when start and date are set. " type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' transferred: description: "Amount(s) transferred in the currencies in the database for this category. ONLY present when start and date are set. " type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' pc_transferred: description: "Amount(s) transferred in primary currency in the database for this category. ONLY present when start and date are set. " type: array readOnly: true items: $ref: '#/components/schemas/ArrayEntryWithCurrencyAndSum' CategoryStore: type: object required: - name properties: name: type: string format: string example: "Lunch" notes: type: string format: string nullable: true example: "Some example notes" CategoryUpdate: type: object required: - name properties: name: type: string format: string example: "Lunch" notes: type: string format: string nullable: true example: "Some example notes" CurrencyExchangeProperties: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true from_currency_id: type: string format: string example: "12" readOnly: true description: "Base currency ID for this exchange rate entry." from_currency_name: type: string format: string example: "Euro" readOnly: true description: "Base currency name for this exchange rate entry." from_currency_code: type: string format: string example: "EUR" readOnly: true description: "Base currency code for this exchange rate entry." from_currency_symbol: type: string format: string example: "$" readOnly: true description: "Base currency symbol for this exchange rate entry." from_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "Base currency decimal places for this exchange rate entry." to_currency_id: type: string format: string example: "12" readOnly: true description: "Destination currency ID for this exchange rate entry." to_currency_name: type: string format: string example: "EUR" readOnly: true description: "Destination currency name for this exchange rate entry." to_currency_code: type: string format: string example: "EUR" readOnly: true description: "Destination currency code for this exchange rate entry." to_currency_symbol: type: string format: string example: "$" readOnly: true description: "Destination currency symbol for this exchange rate entry." to_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "Destination currency decimal places for this exchange rate entry." rate: type: string format: string example: "1.10340" readOnly: true description: "The actual exchange rate. How many 'to' currency will you get for 1 'from' currency?" date: type: string format: date-time readOnly: true example: "2025-11-01T00:00:00+00:00" description: "Date and time of the exchange rate." CurrencyExchangeRateRead: type: object properties: type: type: string format: string readOnly: true example: "currency_exchange_rates" description: "Immutable value" id: type: string readOnly: true format: string example: "2" attributes: $ref: '#/components/schemas/CurrencyExchangeProperties' links: $ref: '#/components/schemas/ObjectLink' CurrencyExchangeRateSingle: type: object required: - data properties: data: $ref: '#/components/schemas/CurrencyExchangeRateRead' CurrencyExchangeRateStore: type: object required: - from - to - rates properties: from: type: string format: string example: "USD" description: "The base currency code." nullable: false to: type: string format: string example: "EUR" description: "The destination currency code." nullable: false rate: type: string format: string nullable: false example: "2.3456" description: "The exchange rate from the base currency to the destination currency." CurrencyExchangeRateStoreByDate: type: object required: - from - date - rates properties: from: type: string format: string example: "EUR" description: "The 'from'-currency" rates: type: object description: "The actual entries for this data set. They 'key' value is 'to' currency. The value is the exchange rate." additionalProperties: type: string example: USD: '1.2345' GBP: '6.3456' CurrencyExchangeRateStoreByPair: type: object description: "The actual entries for this data set. They 'key' value is the date in YYYY-MM-DD. The value is the exchange rate." additionalProperties: type: string example: 2025-08-01: '1.2345' 2025-08-02: '6.3456' CurrencyExchangeRateUpdate: type: object required: - date - rate properties: date: type: string format: date example: "2025-11-01" description: The date to which the exchange rate is applicable. nullable: false rate: type: string format: string nullable: false example: "2.3456" description: "The exchange rate from the base currency to the destination currency." from: type: string format: string example: "USD" description: "The base currency code." nullable: true to: type: string format: string example: "EUR" description: "The destination currency code." nullable: true CurrencyExchangeRateUpdateNoDate: type: object required: - rate properties: rate: type: string format: string nullable: false example: "2.3456" description: "The exchange rate from the base currency to the destination currency." ObjectGroup: type: object required: - title - order properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true title: type: string format: string example: "My object group" order: type: integer format: int32 example: 1 description: "Order of the object group" ObjectGroupUpdate: type: object required: - title properties: title: type: string format: string example: "My object group" order: type: integer format: int32 example: 1 description: "Order of the object group" ObjectLink: type: object properties: self: type: string format: uri example: "https://demo.firefly-iii.org/api/v1/OBJECTS/1" "0": type: object properties: rel: type: string format: string example: "self" uri: type: string format: string example: "/OBJECTS/1" PageLink: type: object properties: self: type: string format: uri example: "https://demo.firefly-iii.org/api/v1/OBJECT?&page=4" first: type: string format: uri example: "https://demo.firefly-iii.org/api/v1/OBJECT?&page=1" next: type: string format: uri example: "https://demo.firefly-iii.org/api/v1/OBJECT?&page=3" nullable: true prev: type: string format: uri example: "https://demo.firefly-iii.org/api/v1/OBJECT?&page=2" nullable: true last: type: string format: uri example: "https://demo.firefly-iii.org/api/v1/OBJECT?&page=12" PiggyBankAccountRead: type: object properties: account_id: type: string format: string example: "3" readOnly: true nullable: false description: "The ID of the account." name: type: string format: string readOnly: true nullable: false example: "Checking account" current_amount: type: string format: amount example: "123.45" pc_current_amount: type: string format: amount example: "123.45" description: "If convertToPrimary is on, this will show the amount in the primary currency." PiggyBankAccountStore: type: object required: - id properties: id: type: string format: string example: "3" nullable: true description: "The ID of the account." name: type: string format: string nullable: true example: "Checking account" description: "The name of the account." current_amount: type: string format: amount example: "123.45" description: "The amount saved currently." PiggyBankAccountUpdate: type: object required: - id properties: account_id: type: string format: string example: "3" nullable: true description: "The ID of the account." name: type: string format: string nullable: true example: "Checking account" description: "The name of the account." current_amount: type: string format: amount nullable: true example: "123.45" description: "The amount saved currently." PiggyBankProperties: type: object required: - name - account_id - target_amount properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true name: type: string format: string example: "New digital camera" percentage: type: number format: int32 nullable: true example: 12 readOnly: true description: "The percentage of the target amount that has been saved, if a target amount is set." start_date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "The date you started with this piggy bank." target_date: type: string nullable: true format: date-time example: "2025-11-01T00:00:00+00:00" description: "The date you intend to finish saving money." order: type: integer format: int32 example: 5 active: type: boolean format: boolean example: true readOnly: true notes: type: string format: string nullable: true example: "Some notes" object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_order: type: integer format: int32 example: 5 readOnly: true nullable: true description: The order of the group. At least 1, for the highest sorting. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. accounts: type: array items: $ref: '#/components/schemas/PiggyBankAccountRead' object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." target_amount: type: string format: amount nullable: true example: "123.45" pc_target_amount: type: string format: amount nullable: true example: "123.45" description: "The target amount in the primary currency of the administration." current_amount: type: string format: amount example: "123.45" pc_current_amount: type: string format: amount example: "123.45" description: "The current amount in the primary currency of the administration." left_to_save: type: string nullable: true format: string example: "700.00" pc_left_to_save: type: string nullable: true format: string example: "700.00" save_per_month: type: string nullable: true format: string example: "12.45" readOnly: true pc_save_per_month: type: string nullable: true format: string example: "12.45" readOnly: true PiggyBankStore: type: object required: - name - account_id - target_amount - start_date properties: name: type: string format: string example: "New digital camera" accounts: type: array items: $ref: '#/components/schemas/PiggyBankAccountStore' target_amount: type: string format: amount example: "123.45" nullable: true current_amount: type: string format: amount example: "123.45" start_date: type: string format: date example: "2025-11-01" description: The date you started with this piggy bank. target_date: type: string format: date nullable: true example: "2025-11-30" description: The date you intend to finish saving money. order: type: integer format: int32 example: 5 active: type: boolean format: boolean example: true readOnly: true notes: type: string format: string nullable: true example: "Some notes" object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. PiggyBankUpdate: type: object properties: name: type: string format: string example: "New digital camera" accounts: type: array items: $ref: '#/components/schemas/PiggyBankAccountUpdate' currency_id: type: string format: string example: "5" readOnly: true currency_code: type: string format: string example: "USD" readOnly: true target_amount: type: string nullable: true format: amount example: "123.45" start_date: type: string format: date example: "2025-11-01" description: The date you started with this piggy bank. target_date: type: string format: date nullable: true example: "2025-11-30" description: The date you intend to finish saving money. order: type: integer format: int32 example: 5 active: type: boolean format: boolean example: true readOnly: true notes: type: string format: string nullable: true example: "Some notes" object_group_id: type: string format: string example: "5" nullable: true description: The group ID of the group this object is part of. NULL if no group. object_group_title: type: string format: string example: "Example Group" nullable: true description: The name of the group. NULL if no group. PiggyBankEventProperties: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" amount: type: string format: amount example: "123.45" pc_amount: type: string format: amount example: "123.45" object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." transaction_journal_id: type: string format: string example: "4291" description: The journal associated with the event. nullable: true transaction_group_id: type: string format: string example: "4291" description: The transaction group associated with the event. nullable: true Preference: type: object required: - name - data properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true name: type: string format: string example: currencyPreference data: $ref: '#/components/schemas/PolymorphicProperty' PreferenceUpdate: type: object required: - data properties: data: $ref: '#/components/schemas/PolymorphicProperty' RecurrenceProperties: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true type: $ref: '#/components/schemas/RecurrenceTransactionType' title: type: string format: string example: "Rent" description: type: string format: string example: "Recurring transaction for the monthly rent" description: Not to be confused with the description of the actual transaction(s) being created. first_date: type: string format: date example: "2025-11-30" description: "First time the recurring transaction will fire. Must be after today." latest_date: type: string format: date example: "2025-11-01" description: "Last time the recurring transaction has fired." nullable: true readOnly: true repeat_until: type: string format: date example: "2025-11-30" description: "Date until the recurring transaction can fire. Use either this field or repetitions." nullable: true apply_rules: type: boolean format: boolean example: true description: "Whether or not to fire the rules after the creation of a transaction." active: type: boolean format: boolean example: true description: If the recurrence is even active. nr_of_repetitions: type: integer format: int32 example: 5 description: Max number of created transactions. Use either this field or repeat_until. nullable: true notes: type: string format: string example: "Some notes" nullable: true repetitions: type: array items: $ref: '#/components/schemas/RecurrenceRepetition' transactions: type: array items: $ref: '#/components/schemas/RecurrenceTransaction' RecurrenceStore: type: object required: - type - title - first_date - repeat_until - repetitions - transactions properties: type: $ref: '#/components/schemas/RecurrenceTransactionType' title: type: string format: string example: "Rent" description: type: string format: string example: "Recurring transaction for the monthly rent" description: Not to be confused with the description of the actual transaction(s) being created. first_date: type: string format: date example: "2025-11-30" description: "First time the recurring transaction will fire. Must be after today." repeat_until: type: string format: date example: "2025-11-30" description: "Date until the recurring transaction can fire. Use either this field or repetitions." nullable: true nr_of_repetitions: type: integer format: int32 example: 5 description: Max number of created transactions. Use either this field or repeat_until. nullable: true apply_rules: type: boolean format: boolean example: true description: "Whether or not to fire the rules after the creation of a transaction." active: type: boolean format: boolean example: true description: If the recurrence is even active. notes: type: string format: string example: "Some notes" nullable: true repetitions: type: array items: $ref: '#/components/schemas/RecurrenceRepetitionStore' transactions: type: array items: $ref: '#/components/schemas/RecurrenceTransactionStore' RecurrenceUpdate: type: object properties: title: type: string format: string example: "Rent" description: type: string format: string example: "Recurring transaction for the monthly rent" description: Not to be confused with the description of the actual transaction(s) being created. first_date: type: string format: date example: "2025-11-30" description: "First time the recurring transaction will fire." repeat_until: type: string format: date example: "2025-11-30" description: Date until when the recurring transaction can fire. After that date, it's basically inactive. Use either this field or repetitions. nullable: true nr_of_repetitions: type: integer format: int32 example: 5 description: Max number of created transactions. Use either this field or repeat_until. nullable: true apply_rules: type: boolean format: boolean example: true description: "Whether or not to fire the rules after the creation of a transaction." active: type: boolean format: boolean example: true description: If the recurrence is even active. notes: type: string format: string example: "Some notes" nullable: true repetitions: type: array items: $ref: '#/components/schemas/RecurrenceRepetitionUpdate' transactions: type: array items: $ref: '#/components/schemas/RecurrenceTransactionUpdate' RecurrenceRepetition: type: object required: - type - moment properties: id: type: string format: string example: "2" readOnly: true created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true type: $ref: '#/components/schemas/RecurrenceRepetitionType' moment: type: string format: string example: "3" description: | Information that defined the type of repetition. - For 'daily', this is empty. - For 'weekly', it is day of the week between 1 and 7 (Monday - Sunday). - For 'ndom', it is '1,2' or '4,5' or something else, where the first number is the week in the month, and the second number is the day in the week (between 1 and 7). '2,3' means: the 2nd Wednesday of the month - For 'monthly' it is the day of the month (1 - 31) - For yearly, it is a full date, ie '2025-11-01'. The year you use does not matter. skip: type: integer format: int32 example: 0 description: How many occurrences to skip. 0 means skip nothing. 1 means every other. weekend: type: integer format: int32 example: 1 description: | How to respond when the recurring transaction falls in the weekend. Possible values: 1. Do nothing, just create it 2. Create no transaction. 3. Skip to the previous Friday. 4. Skip to the next Monday. description: type: string format: string example: "Every week on Friday" description: Auto-generated repetition description. readOnly: true occurrences: type: array description: "Array of future dates when the repetition will apply to. Auto generated." readOnly: true items: type: string format: date-time example: "2025-11-30T23:59:59+00:00" RecurrenceRepetitionStore: type: object required: - type - moment properties: type: $ref: '#/components/schemas/RecurrenceRepetitionType' moment: type: string format: string example: "3" description: | Information that defined the type of repetition. - For 'daily', this is empty. - For 'weekly', it is day of the week between 1 and 7 (Monday - Sunday). - For 'ndom', it is '1,2' or '4,5' or something else, where the first number is the week in the month, and the second number is the day in the week (between 1 and 7). '2,3' means: the 2nd Wednesday of the month - For 'monthly' it is the day of the month (1 - 31) - For yearly, it is a full date, ie '2025-11-01'. The year you use does not matter. skip: type: integer format: int32 example: 0 description: How many occurrences to skip. 0 means skip nothing. 1 means every other. weekend: type: integer format: int32 example: 1 description: | How to respond when the recurring transaction falls in the weekend. Possible values: 1. Do nothing, just create it 2. Create no transaction. 3. Skip to the previous Friday. 4. Skip to the next Monday. RecurrenceRepetitionUpdate: type: object properties: type: $ref: '#/components/schemas/RecurrenceRepetitionType' moment: type: string format: string example: "3" description: | Information that defined the type of repetition. - For 'daily', this is empty. - For 'weekly', it is day of the week between 1 and 7 (Monday - Sunday). - For 'ndom', it is '1,2' or '4,5' or something else, where the first number is the week in the month, and the second number is the day in the week (between 1 and 7). '2,3' means: the 2nd Wednesday of the month - For 'monthly' it is the day of the month (1 - 31) - For yearly, it is a full date, ie '2025-11-01'. The year you use does not matter. skip: type: integer format: int32 example: 0 description: How many occurrences to skip. 0 means skip nothing. 1 means every other. weekend: type: integer format: int32 example: 1 description: | How to respond when the recurring transaction falls in the weekend. Possible values: 1. Do nothing, just create it 2. Create no transaction. 3. Skip to the previous Friday. 4. Skip to the next Monday. RecurrenceTransaction: type: object required: - description - amount properties: id: type: string format: string example: "ID of the recurring transaction. Not to be confused with the ID of the recurrence itself." description: type: string format: string example: "Rent for the current month" object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the object has a currency setting. If false, the object uses the administration's primary currency." currency_id: type: string format: string example: "5" description: "The currency ID of the currency associated with this object." currency_name: type: string format: string example: Euro description: "The currency name of the currency associated with this object." currency_code: type: string format: string example: EUR description: "The currency code of the currency associated with this object." currency_symbol: type: string format: string example: "$" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 readOnly: true primary_currency_id: type: string format: string example: "5" description: "The currency ID of the administration's primary currency." readOnly: true primary_currency_name: type: string format: string example: Euro readOnly: true description: "The currency name of the administration's primary currency." primary_currency_code: type: string format: string example: EUR readOnly: true description: "The currency code of the administration's primary currency." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "The currency symbol of the administration's primary currency." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "The currency decimal places of the administration's primary currency." amount: type: string format: amount example: "123.45" description: Amount of the transaction. pc_amount: type: string format: amount example: "123.45" description: Amount of the transaction in primary currency. foreign_amount: type: string format: amount example: "123.45" description: Foreign amount of the transaction. nullable: true pc_foreign_amount: type: string format: amount example: "123.45" description: Foreign amount of the transaction. nullable: true foreign_currency_id: type: string format: string example: "17" nullable: true foreign_currency_name: type: string format: string example: "British Pound" nullable: true foreign_currency_code: type: string format: string example: "GBP" nullable: true foreign_currency_symbol: type: string format: string example: "$" nullable: true readOnly: true foreign_currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimals in the currency nullable: true readOnly: true budget_id: type: string format: string example: "4" description: The budget ID for this transaction. budget_name: type: string format: string example: Groceries description: The name of the budget to be used. If the budget name is unknown, the ID will be used or the value will be ignored. nullable: true readOnly: true category_id: type: string format: string description: Category ID for this transaction. example: "211" category_name: type: string format: string description: Category name for this transaction. example: "Bills" source_id: type: string format: string example: "913" description: ID of the source account. Submit either this or source_name. source_name: type: string format: string example: "Checking account" description: Name of the source account. Submit either this or source_id. source_iban: type: string format: string example: "NL02ABNA0123456789" nullable: true readOnly: true source_type: $ref: '#/components/schemas/AccountTypeProperty' destination_id: type: string format: string example: "258" description: ID of the destination account. Submit either this or destination_name. destination_name: type: string format: string example: "Buy and Large" description: Name of the destination account. Submit either this or destination_id. destination_iban: type: string format: string example: "NL02ABNA0123456789" nullable: true readOnly: true destination_type: $ref: '#/components/schemas/AccountTypeProperty' tags: type: array nullable: true example: description: Array of tags. items: type: string format: string description: Tag. example: Barbecue preparation piggy_bank_id: type: string format: string example: "123" nullable: true piggy_bank_name: type: string format: string nullable: true subscription_id: type: string format: string example: "123" nullable: true subscription_name: type: string format: string nullable: true RecurrenceTransactionStore: type: object required: - description - amount - source_id - destination_id properties: description: type: string format: string example: "Rent for the current month" amount: type: string format: amount example: "123.45" description: Amount of the transaction. foreign_amount: type: string format: amount example: "123.45" description: Foreign amount of the transaction. nullable: true currency_id: type: string format: string example: "3" description: Submit either a currency_id or a currency_code. currency_code: type: string format: string example: "EUR" description: Submit either a currency_id or a currency_code. foreign_currency_id: type: string format: string example: "17" nullable: true description: Submit either a foreign_currency_id or a foreign_currency_code, or neither. foreign_currency_code: type: string format: string example: "GBP" nullable: true description: Submit either a foreign_currency_id or a foreign_currency_code, or neither. budget_id: type: string format: string example: "4" description: The budget ID for this transaction. category_id: type: string format: string description: Category ID for this transaction. example: "211" source_id: type: string format: string example: "913" description: ID of the source account. destination_id: type: string format: string example: "258" description: ID of the destination account. tags: type: array nullable: true example: description: Array of tags. items: type: string format: string description: Tag. example: Barbecue preparation piggy_bank_id: type: string format: string example: "123" nullable: true description: Optional. bill_id: type: string format: string example: "123" nullable: true description: Optional. RecurrenceTransactionUpdate: type: object required: - id properties: id: type: string format: string example: "ID of the recurring transaction. Not to be confused with the ID of the recurrence itself. Is marked as REQUIRED but can be skipped when there is only ONE transaction." description: type: string format: string example: "Rent for the current month" amount: type: string format: amount example: "123.45" description: Amount of the transaction. foreign_amount: type: string format: amount example: "123.45" description: Foreign amount of the transaction. nullable: true currency_id: type: string format: string example: "3" description: Submit either a currency_id or a currency_code. currency_code: type: string format: string example: "EUR" description: Submit either a currency_id or a currency_code. foreign_currency_id: type: string format: string example: "17" nullable: true description: Submit either a foreign_currency_id or a foreign_currency_code, or neither. budget_id: type: string format: string example: "4" description: The budget ID for this transaction. category_id: type: string format: string description: Category ID for this transaction. example: "211" source_id: type: string format: string example: "913" description: ID of the source account. Submit either this or source_name. destination_id: type: string format: string example: "258" description: ID of the destination account. Submit either this or destination_name. tags: type: array nullable: true example: description: Array of tags. items: type: string format: string description: Tag. example: Barbecue preparation piggy_bank_id: type: string format: string example: "123" nullable: true bill_id: type: string format: string example: "123" nullable: true description: Optional. Rule: type: object required: - title - rule_group_id - trigger - triggers - actions properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true title: type: string format: string example: "First rule title." description: type: string format: string example: "First rule description" rule_group_id: type: string format: string example: "81" description: "ID of the rule group under which the rule must be stored. Either this field or rule_group_title is mandatory." rule_group_title: type: string format: string example: "New rule group" description: "Title of the rule group under which the rule must be stored. Either this field or rule_group_id is mandatory." order: type: integer format: int32 example: 5 readOnly: true trigger: $ref: '#/components/schemas/RuleTriggerType' active: type: boolean format: boolean example: true default: true description: Whether or not the rule is even active. Default is true. strict: type: boolean format: boolean example: true description: If the rule is set to be strict, ALL triggers must hit in order for the rule to fire. Otherwise, just one is enough. Default value is true. stop_processing: type: boolean format: boolean example: false default: false description: If this value is true and the rule is triggered, other rules after this one in the group will be skipped. Default value is false. triggers: type: array items: $ref: '#/components/schemas/RuleTrigger' actions: type: array items: $ref: '#/components/schemas/RuleAction' RuleStore: type: object required: - title - rule_group_id - trigger - triggers - actions properties: title: type: string format: string example: "First rule title." description: type: string format: string example: "First rule description" rule_group_id: type: string format: string example: "81" description: "ID of the rule group under which the rule must be stored. Either this field or rule_group_title is mandatory." rule_group_title: type: string format: string example: "New rule group" description: "Title of the rule group under which the rule must be stored. Either this field or rule_group_id is mandatory." order: type: integer format: int32 example: 5 trigger: $ref: '#/components/schemas/RuleTriggerType' active: type: boolean format: boolean example: true default: true description: Whether or not the rule is even active. Default is true. strict: type: boolean format: boolean example: true default: true description: If the rule is set to be strict, ALL triggers must hit in order for the rule to fire. Otherwise, just one is enough. Default value is true. stop_processing: type: boolean format: boolean example: false description: If this value is true and the rule is triggered, other rules after this one in the group will be skipped. Default value is false. triggers: type: array items: $ref: '#/components/schemas/RuleTriggerStore' actions: type: array items: $ref: '#/components/schemas/RuleActionStore' RuleUpdate: type: object properties: title: type: string format: string example: "First rule title." description: type: string format: string example: "First rule description" rule_group_id: type: string format: string example: "81" description: "ID of the rule group under which the rule must be stored. Either this field or rule_group_title is mandatory." order: type: integer format: int32 example: 5 trigger: $ref: '#/components/schemas/RuleTriggerType' active: type: boolean format: boolean example: true default: true description: Whether or not the rule is even active. Default is true. strict: type: boolean format: boolean example: true description: If the rule is set to be strict, ALL triggers must hit in order for the rule to fire. Otherwise, just one is enough. Default value is true. stop_processing: type: boolean format: boolean example: false default: false description: If this value is true and the rule is triggered, other rules after this one in the group will be skipped. Default value is false. triggers: type: array items: $ref: '#/components/schemas/RuleTriggerUpdate' actions: type: array items: $ref: '#/components/schemas/RuleActionUpdate' RuleAction: type: object required: - type - value properties: id: type: string format: string example: "2" readOnly: true created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true type: $ref: '#/components/schemas/RuleActionKeyword' value: type: string format: string example: "Daily groceries" nullable: true description: "The accompanying value the action will set, change or update. Can be empty, but for some types this value is mandatory." order: type: integer format: int32 example: 5 description: "Order of the action" active: type: boolean format: boolean example: true default: true description: If the action is active. Defaults to true. stop_processing: type: boolean format: boolean example: false default: false description: When true, other actions will not be fired after this action has fired. Defaults to false. RuleActionStore: type: object required: - type - value properties: type: $ref: '#/components/schemas/RuleActionKeyword' value: type: string format: string example: "Daily groceries" nullable: true description: "The accompanying value the action will set, change or update. Can be empty, but for some types this value is mandatory." order: type: integer format: int32 example: 5 description: "Order of the action" active: type: boolean format: boolean example: true default: true description: If the action is active. Defaults to true. stop_processing: type: boolean format: boolean example: false default: false description: When true, other actions will not be fired after this action has fired. Defaults to false. RuleActionUpdate: type: object properties: type: $ref: '#/components/schemas/RuleActionKeyword' value: type: string format: string example: "Daily groceries" nullable: true description: "The accompanying value the action will set, change or update. Can be empty, but for some types this value is mandatory." order: type: integer format: int32 example: 5 description: "Order of the action" active: type: boolean format: boolean example: true description: If the action is active. stop_processing: type: boolean format: boolean example: false description: When true, other actions will not be fired after this action has fired. RuleGroup: type: object required: - title properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true title: type: string format: string example: "Default rule group" description: type: string format: string example: "Description of this rule group" nullable: true order: type: integer format: int32 example: 4 readOnly: true active: type: boolean format: boolean example: true RuleGroupStore: type: object required: - title properties: title: type: string format: string example: "Default rule group" description: type: string format: string example: "Description of this rule group" nullable: true order: type: integer format: int32 example: 4 active: type: boolean format: boolean example: true RuleGroupUpdate: type: object properties: title: type: string format: string example: "Default rule group" description: type: string format: string example: "Description of this rule group" nullable: true order: type: integer format: int32 example: 4 active: type: boolean format: boolean example: true RuleTrigger: type: object required: - type - value properties: id: type: string format: string example: "2" readOnly: true created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true type: $ref: '#/components/schemas/RuleTriggerKeyword' value: type: string format: string example: "tag1" description: "The accompanying value the trigger responds to. This value is often mandatory, but this depends on the trigger." prohibited: type: boolean format: boolean example: false default: false description: If 'prohibited' is true, this rule trigger will be negated. 'Description is' will become 'Description is NOT' etc. order: type: integer format: int32 example: 5 description: "Order of the trigger" readOnly: true active: type: boolean format: boolean example: true default: true description: If the trigger is active. Defaults to true. stop_processing: type: boolean format: boolean example: false default: false description: When true, other triggers will not be checked if this trigger was triggered. Defaults to false. RuleTriggerStore: type: object required: - type - value properties: type: $ref: '#/components/schemas/RuleTriggerKeyword' value: type: string format: string example: "tag1" description: "The accompanying value the trigger responds to. This value is often mandatory, but this depends on the trigger." order: type: integer format: int32 example: 5 description: "Order of the trigger" active: type: boolean format: boolean example: true default: true description: If the trigger is active. Defaults to true. prohibited: type: boolean format: boolean example: false default: false description: If 'prohibited' is true, this rule trigger will be negated. 'Description is' will become 'Description is NOT' etc. stop_processing: type: boolean format: boolean example: false default: false description: When true, other triggers will not be checked if this trigger was triggered. Defaults to false. RuleTriggerUpdate: type: object properties: type: $ref: '#/components/schemas/RuleTriggerKeyword' value: type: string format: string example: "tag1" description: "The accompanying value the trigger responds to. This value is often mandatory, but this depends on the trigger. If the rule trigger is something like 'has any tag', submit the string 'true'." order: type: integer format: int32 example: 5 description: "Order of the trigger" active: type: boolean format: boolean example: true description: If the trigger is active. stop_processing: type: boolean format: boolean example: false description: When true, other triggers will not be checked if this trigger was triggered. TagModel: title: "A single tag (C)" type: object required: - tag properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true tag: type: string format: string example: "expensive" description: The tag date: type: string format: date example: "2025-11-01" description: The date to which the tag is applicable. nullable: true description: type: string format: string example: "Tag for expensive stuff" nullable: true latitude: type: number format: double example: 51.983333 nullable: true description: Latitude of the tag's location, if applicable. Can be used to draw a map. longitude: type: number format: double example: 5.916667 nullable: true description: Latitude of the tag's location, if applicable. Can be used to draw a map. zoom_level: type: integer format: int32 example: 6 nullable: true description: "Zoom level for the map, if drawn. This to set the box right. Unfortunately this is a proprietary value because each map provider has different zoom levels." TagModelStore: title: "A single tag (A)" type: object required: - tag properties: tag: type: string format: string example: "expensive" description: The tag date: type: string format: date example: "2025-11-01" description: The date to which the tag is applicable. nullable: true description: type: string format: string example: "Tag for expensive stuff" nullable: true latitude: type: number format: double example: 51.983333 nullable: true description: Latitude of the tag's location, if applicable. Can be used to draw a map. longitude: type: number format: double example: 5.916667 nullable: true description: Latitude of the tag's location, if applicable. Can be used to draw a map. zoom_level: type: integer format: int32 example: 6 nullable: true description: "Zoom level for the map, if drawn. This to set the box right. Unfortunately this is a proprietary value because each map provider has different zoom levels." TagModelUpdate: title: "A single tag (B)" type: object properties: tag: type: string format: string example: "expensive" description: The tag date: type: string format: date example: "2025-11-01" description: The date to which the tag is applicable. nullable: true description: type: string format: string example: "Tag for expensive stuff" nullable: true latitude: type: number format: double example: 51.983333 nullable: true description: Latitude of the tag's location, if applicable. Can be used to draw a map. longitude: type: number format: double example: 5.916667 nullable: true description: Latitude of the tag's location, if applicable. Can be used to draw a map. zoom_level: type: integer format: int32 example: 6 nullable: true description: "Zoom level for the map, if drawn. This to set the box right. Unfortunately this is a proprietary value because each map provider has different zoom levels." CurrencyProperties: type: object required: - code - name - symbol properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true enabled: type: boolean format: boolean example: true default: true description: Defaults to true primary: type: boolean format: boolean example: false description: Is the primary currency? code: type: string format: string example: AMS name: type: string format: string example: Ankh-Morpork dollar symbol: type: string format: string example: "AM$" decimal_places: type: integer format: int32 example: 2 description: Supports 0-16 decimals. CurrencyStore: type: object required: - code - name - symbol properties: enabled: type: boolean format: boolean example: true default: true description: Defaults to true primary: type: boolean format: boolean example: true description: Make this currency the primary currency for the current administration. You can set this value to FALSE, in which case nothing will change to the primary currency. If you set it to TRUE, the current primary currency will no longer be the primary currency. code: type: string format: string example: AMS name: type: string format: string example: Ankh-Morpork dollar symbol: type: string format: string example: "AM$" decimal_places: type: integer format: int32 example: 2 description: Supports 0-16 decimals. CurrencyUpdate: type: object properties: enabled: type: boolean format: boolean example: true description: "If the currency is enabled" primary: type: boolean format: boolean example: true description: "If the currency must be the primary for the user. You can only submit TRUE. Submitting FALSE will not drop this currency as the primary currency, because then the system would be without one." enum: - true code: type: string format: string example: AMS description: "The currency code" name: type: string format: string example: Ankh-Morpork dollar description: "The currency name" symbol: type: string format: string example: "AM$" description: "The currency symbol" decimal_places: type: integer format: int32 example: 2 description: "How many decimals to use when displaying this currency. Between 0 and 16." Transaction: type: object required: - transactions properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true user: type: string format: string example: "3" description: "User ID" readOnly: true group_title: type: string format: string description: "Title of the transaction if it has been split in more than one piece. Empty otherwise." example: "Split transaction title." readOnly: false nullable: true transactions: type: array items: $ref: '#/components/schemas/TransactionSplit' TransactionStore: type: object required: - transactions properties: error_if_duplicate_hash: type: boolean format: boolean example: false description: "Break if the submitted transaction exists already." apply_rules: type: boolean format: boolean example: false description: "Whether or not to apply rules when submitting transaction." fire_webhooks: type: boolean format: boolean example: true default: true description: "Whether or not to fire the webhooks that are related to this event." group_title: type: string format: string description: "Title of the transaction if it has been split in more than one piece. Empty otherwise." example: "Split transaction title." nullable: true transactions: type: array items: $ref: '#/components/schemas/TransactionSplitStore' TransactionUpdate: type: object properties: apply_rules: type: boolean format: boolean example: false description: "Whether or not to apply rules when submitting transaction." fire_webhooks: type: boolean format: boolean example: true default: true description: "Whether or not to fire the webhooks that are related to this event." group_title: type: string format: string description: "Title of the transaction if it has been split in more than one piece. Empty otherwise." example: "Split transaction title." nullable: true transactions: type: array items: $ref: '#/components/schemas/TransactionSplitUpdate' TransactionLink: type: object required: - link_type_id - inward_id - outward_id properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true link_type_id: type: string format: string example: "5" description: The link type ID to use. You can also use the link_type_name field. writeOnly: true link_type_name: type: string format: string example: "Is paid by" description: The link type name to use. You can also use the link_type_id field. writeOnly: true inward_id: type: string format: string example: "131" description: "The inward transaction transaction_journal_id for the link. This becomes the 'is paid by' transaction of the set." outward_id: type: string format: string example: "131" description: "The outward transaction transaction_journal_id for the link. This becomes the 'pays for' transaction of the set." notes: type: string format: string example: "Some example notes" nullable: true description: Optional. Some notes. TransactionLinkStore: type: object required: - link_type_id - inward_id - outward_id properties: link_type_id: type: string format: string example: "5" description: The link type ID to use. You can also use the link_type_name field. writeOnly: true link_type_name: type: string format: string example: "Is paid by" description: The link type name to use. You can also use the link_type_id field. writeOnly: true inward_id: type: string format: string example: "131" description: "The inward transaction transaction_journal_id for the link. This becomes the 'is paid by' transaction of the set." outward_id: type: string format: string example: "131" description: "The outward transaction transaction_journal_id for the link. This becomes the 'pays for' transaction of the set." notes: type: string format: string example: "Some example notes" nullable: true description: Optional. Some notes. TransactionLinkUpdate: type: object properties: link_type_id: type: string format: string example: "5" description: The link type ID to use. Use this field OR use the link_type_name field. writeOnly: true link_type_name: type: string format: string example: "Is paid by" description: The link type name to use. Use this field OR use the link_type_id field. writeOnly: true inward_id: type: string format: string example: "131" description: "The inward transaction transaction_journal_id for the link. This becomes the 'is paid by' transaction of the set." outward_id: type: string format: string example: "131" description: "The outward transaction transaction_journal_id for the link. This becomes the 'pays for' transaction of the set." notes: type: string format: string example: "Some example notes" nullable: true description: "Optional. Some notes. If you submit an empty string the current notes will be removed" LinkType: type: object required: - name - inward - outward properties: name: type: string format: string example: "Paid" inward: type: string format: string example: "is (partially) paid for by" outward: type: string format: string example: "(partially) pays for" editable: type: boolean format: boolean example: false readOnly: true LinkTypeUpdate: type: object properties: name: type: string format: string example: "Paid" inward: type: string format: string example: "is (partially) paid for by" outward: type: string format: string example: "(partially) pays for" TransactionSplit: type: object required: - amount - source_id - destination_id - date - description - type properties: user: type: string format: string example: "3" description: "User ID" readOnly: true transaction_journal_id: type: string format: string example: "10421" description: | ID of the underlying transaction journal. Each transaction consists of a transaction group (see the top ID) and one or more journals making up the splits of the transaction. readOnly: true type: $ref: '#/components/schemas/TransactionTypeProperty' date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Date of the transaction" order: type: integer format: int32 example: 0 nullable: true description: "Order of this entry in the list of transactions." object_has_currency_setting: type: boolean format: boolean example: true readOnly: true description: "Indicates whether the transaction has a currency setting. For transactions this is always true." currency_id: type: string format: string example: "12" description: Currency ID for the currency of this transaction. currency_code: type: string format: string example: EUR description: Currency code for the currency of this transaction. currency_symbol: type: string format: string example: "$" readOnly: true description: Currency symbol for the currency of this transaction. currency_name: type: string format: string example: "Euro" description: Currency name for the currency of this transaction. currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimals used in this currency. foreign_currency_id: type: string format: string example: "17" nullable: true description: Currency ID of the foreign currency, if this transaction has a foreign amount. foreign_currency_code: type: string format: string example: USD description: Currency code of the foreign currency. Default is NULL. nullable: true foreign_currency_symbol: type: string format: string example: "$" nullable: true readOnly: true foreign_currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimals in the foreign currency. nullable: true readOnly: true primary_currency_id: type: string format: string example: "12" readOnly: true nullable: true description: "Returns the primary currency ID of the administration. This currency is used as the currency for all `pc_*` amount and balance fields of this account." primary_currency_code: type: string format: string example: "EUR" nullable: true description: "Returns the primary currency code of the administration. This currency is used as the currency for all `pc_*` amount and balance fields of this account." primary_currency_symbol: type: string format: string example: "$" readOnly: true nullable: true description: "See the other `primary_*` fields." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true nullable: true description: "See the other `primary_*` fields." amount: type: string format: amount example: "123.45" description: "Amount of the transaction." pc_amount: type: string format: amount example: "123.45" description: "Amount of the transaction in the primary currency of this administration. The `primary_currency_*` fields reflect the currency used. This field is NULL if the user does have 'convert to primary' set to true in their settings." foreign_amount: type: string format: amount example: "123.45" nullable: true description: The amount in the set foreign currency. May be NULL if the transaction does not have a foreign amount. pc_foreign_amount: type: string format: amount example: "123.45" description: "Foreign amount of the transaction in the primary currency of this administration. The `primary_currency_*` fields reflect the currency used. This field is NULL if the user does have 'convert to primary' set to true in their settings." source_balance_after: type: string format: amount example: "123.45" nullable: true description: "The balance of the source account. This is the balance in the account's currency which may be different from this transaction, and is not provided in this model." pc_source_balance_after: type: string format: amount example: "123.45" nullable: true description: "The balance of the source account in the primary currency of this administration. The `primary_currency_*` fields reflect the currency used. This field is NULL if the user does have 'convert to primary' set to true in their settings." destination_balance_after: type: string format: amount example: "123.45" nullable: true description: "The balance of the destination account. This is the balance in the account's currency which may be different from this transaction, and is not provided in this model." pc_destination_balance_after: type: string format: amount example: "123.45" nullable: true description: "The balance of the destination account in the primary currency of this administration. The `primary_currency_*` fields reflect the currency used. This field is NULL if the user does have 'convert to primary' set to true in their settings." description: type: string format: string example: "Vegetables" description: "Description of the transaction." source_id: type: string format: string example: "2" nullable: true description: "ID of the source account. For a withdrawal or a transfer, this must always be an asset account. For deposits, this must be a revenue account." source_name: type: string format: string example: "Checking account" nullable: true description: "Name of the source account. For a withdrawal or a transfer, this must always be an asset account. For deposits, this must be a revenue account. Can be used instead of the source_id. If the transaction is a deposit, the source_name can be filled in freely: the account will be created based on the name." source_iban: type: string format: string example: "NL02ABNA0123456789" nullable: true readOnly: true source_type: $ref: '#/components/schemas/AccountTypeProperty' destination_id: type: string format: string example: "2" nullable: true description: "ID of the destination account. For a deposit or a transfer, this must always be an asset account. For withdrawals this must be an expense account." destination_name: type: string format: string example: "Buy and Large" nullable: true description: "Name of the destination account. You can submit the name instead of the ID. For everything except transfers, the account will be auto-generated if unknown, so submitting a name is enough." destination_iban: type: string format: string example: "NL02ABNA0123456789" nullable: true readOnly: true destination_type: $ref: '#/components/schemas/AccountTypeProperty' budget_id: type: string format: string nullable: true example: "4" description: The budget ID for this transaction. budget_name: type: string format: string example: Groceries description: The name of the budget used. nullable: true readOnly: true category_id: type: string format: string nullable: true example: "43" description: The category ID for this transaction. category_name: type: string format: string example: Groceries nullable: true description: "The name of the category to be used. If the category is unknown, it will be created. If the ID and the name point to different categories, the ID overrules the name." bill_id: type: string format: string nullable: true example: "111" description: The associated subscription ID for this transaction. `bill` refers to the OLD name for subscriptions and this field will be removed. bill_name: type: string format: string example: "Monthly rent" nullable: true description: The associated subscription name for this transaction. `bill` refers to the OLD name for subscriptions and this field will be removed. subscription_id: type: string format: string nullable: true example: "111" description: The associated subscription ID for this transaction. subscription_name: type: string format: string example: "Monthly rent" nullable: true description: The associated subscription name for this transaction. reconciled: type: boolean format: boolean example: false description: "If the transaction has been reconciled already. When you set this, the amount can no longer be edited by the user." notes: type: string format: string example: "Some example notes" nullable: true tags: type: array nullable: true example: description: Array of tags. items: type: string format: string description: Tag. example: Barbecue preparation internal_reference: type: string format: string nullable: true description: Reference to internal reference of other systems. external_id: type: string nullable: true format: string description: Reference to external ID in other systems. external_url: type: string format: string nullable: true description: External, custom URL for this transaction. original_source: type: string nullable: true format: string description: System generated identifier for original creator of transaction. readOnly: true recurrence_id: type: string nullable: true format: string description: Reference to recurrence that made the transaction. readOnly: true recurrence_total: type: integer format: int32 example: 0 description: "Total number of transactions expected to be created by this recurrence repetition. Will be 0 if infinite." readOnly: true nullable: true recurrence_count: type: integer format: int32 example: 12 description: "The # of the current transaction created under this recurrence." readOnly: true nullable: true import_hash_v2: type: string nullable: true format: string description: Hash value of original import transaction (for duplicate detection). readOnly: true sepa_cc: type: string format: string nullable: true description: SEPA Clearing Code sepa_ct_op: type: string format: string description: SEPA Opposing Account Identifier nullable: true sepa_ct_id: type: string format: string nullable: true description: SEPA end-to-end Identifier sepa_db: type: string format: string nullable: true description: SEPA mandate identifier sepa_country: type: string nullable: true format: string description: SEPA Country sepa_ep: type: string nullable: true format: string description: SEPA External Purpose indicator sepa_ci: type: string format: string nullable: true description: SEPA Creditor Identifier sepa_batch_id: type: string format: string nullable: true description: SEPA Batch ID interest_date: type: string format: date-time nullable: true book_date: type: string format: date-time nullable: true process_date: type: string format: date-time nullable: true due_date: type: string format: date-time nullable: true payment_date: type: string format: date-time nullable: true invoice_date: type: string format: date-time nullable: true latitude: type: number format: double example: 51.983333 nullable: true description: Latitude of the transaction's location, if applicable. Can be used to draw a map. longitude: type: number format: double example: 5.916667 nullable: true description: Latitude of the transaction's location, if applicable. Can be used to draw a map. zoom_level: type: integer format: int32 example: 6 nullable: true description: "Zoom level for the map, if drawn. This to set the box right. Unfortunately this is a proprietary value because each map provider has different zoom levels." has_attachments: type: boolean format: boolean example: false description: "If the transaction has attachments." TransactionSplitStore: type: object required: - amount - date - description - type properties: type: $ref: '#/components/schemas/TransactionTypeProperty' date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Date of the transaction" amount: type: string format: amount example: "123.45" description: "Amount of the transaction." description: type: string format: string example: "Vegetables" description: "Description of the transaction." order: type: integer format: int32 example: 0 nullable: true description: "Order of this entry in the list of transactions." currency_id: type: string format: string example: "12" nullable: true description: Currency ID. Default is the source account's currency, or the user's financial administration's currency. The value you submit may be overruled by the source or destination account. currency_code: type: string format: string example: EUR nullable: true description: Currency code. Default is the source account's currency, or the user's financial administration's primary currency. The value you submit may be overruled by the source or destination account. foreign_amount: type: string format: amount example: "123.45" nullable: true description: The amount in a foreign currency. foreign_currency_id: type: string format: string example: "17" nullable: true description: Currency ID of the foreign currency. Default is null. Is required when you submit a foreign amount. foreign_currency_code: type: string format: string example: USD description: Currency code of the foreign currency. Default is NULL. Can be used instead of the foreign_currency_id, but this or the ID is required when submitting a foreign amount. nullable: true budget_id: type: string format: string nullable: true example: "4" description: The budget ID for this transaction. budget_name: type: string format: string example: Groceries description: The name of the budget to be used. If the budget name is unknown, the ID will be used or the value will be ignored. nullable: true category_id: type: string format: string nullable: true example: "43" description: The category ID for this transaction. category_name: type: string format: string example: Groceries nullable: true description: "The name of the category to be used. If the category is unknown, it will be created. If the ID and the name point to different categories, the ID overrules the name." source_id: type: string format: string example: "2" nullable: true description: "ID of the source account. For a withdrawal or a transfer, this must always be an asset account. For deposits, this must be a revenue account." source_name: type: string format: string example: "Checking account" nullable: true description: "Name of the source account. For a withdrawal or a transfer, this must always be an asset account. For deposits, this must be a revenue account. Can be used instead of the source_id. If the transaction is a deposit, the source_name can be filled in freely: the account will be created based on the name." destination_id: type: string format: string example: "2" nullable: true description: "ID of the destination account. For a deposit or a transfer, this must always be an asset account. For withdrawals this must be an expense account." destination_name: type: string format: string example: "Buy and Large" nullable: true description: "Name of the destination account. You can submit the name instead of the ID. For everything except transfers, the account will be auto-generated if unknown, so submitting a name is enough." reconciled: type: boolean format: boolean example: false description: "If the transaction has been reconciled already. When you set this, the amount can no longer be edited by the user." piggy_bank_id: type: integer format: int32 description: Optional. Use either this or the piggy_bank_name writeOnly: true nullable: true piggy_bank_name: type: string format: string description: Optional. Use either this or the piggy_bank_id writeOnly: true nullable: true bill_id: type: string format: string nullable: true example: "112" description: Optional. Use either this or the bill_name bill_name: type: string format: string example: "Monthly rent" nullable: true description: Optional. Use either this or the bill_id tags: type: array nullable: true example: description: Array of tags. items: type: string format: string description: Tag. example: Barbecue preparation notes: type: string format: string example: "Some example notes" nullable: true internal_reference: type: string format: string nullable: true description: Reference to internal reference of other systems. external_id: type: string nullable: true format: string description: Reference to external ID in other systems. external_url: type: string format: string nullable: true description: External, custom URL for this transaction. sepa_cc: type: string format: string nullable: true description: SEPA Clearing Code sepa_ct_op: type: string format: string description: SEPA Opposing Account Identifier nullable: true sepa_ct_id: type: string format: string nullable: true description: SEPA end-to-end Identifier sepa_db: type: string format: string nullable: true description: SEPA mandate identifier sepa_country: type: string nullable: true format: string description: SEPA Country sepa_ep: type: string nullable: true format: string description: SEPA External Purpose indicator sepa_ci: type: string format: string nullable: true description: SEPA Creditor Identifier sepa_batch_id: type: string format: string nullable: true description: SEPA Batch ID interest_date: type: string format: date-time nullable: true book_date: type: string format: date-time nullable: true process_date: type: string format: date-time nullable: true due_date: type: string format: date-time nullable: true payment_date: type: string format: date-time nullable: true invoice_date: type: string format: date-time nullable: true TransactionSplitUpdate: type: object properties: transaction_journal_id: type: string format: string example: "123" description: "Transaction journal ID of current transaction (split)." type: $ref: '#/components/schemas/TransactionTypeProperty' date: type: string format: date-time example: "2025-11-01T00:00:00+00:00" description: "Date of the transaction" amount: type: string format: amount example: "123.45" description: "Amount of the transaction." description: type: string format: string example: "Vegetables" description: "Description of the transaction." order: type: integer format: int32 example: 0 nullable: true description: "Order of this entry in the list of transactions." currency_id: type: string format: string example: "12" nullable: true description: Currency ID. Default is the source account's currency, or the user's financial administration's primary currency. Can be used instead of currency_code. currency_code: type: string format: string example: EUR nullable: true description: Currency code. Default is the source account's currency, or the user's financial administration's primary currency. Can be used instead of currency_id. currency_symbol: type: string format: string example: "$" readOnly: true currency_name: type: string format: string example: "Euro" readOnly: true currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimals used in this currency. readOnly: true foreign_amount: type: string format: amount example: "123.45" nullable: true description: The amount in a foreign currency. foreign_currency_id: type: string format: string example: "17" nullable: true description: Currency ID of the foreign currency. Default is null. Is required when you submit a foreign amount. foreign_currency_code: type: string format: string example: USD description: Currency code of the foreign currency. Default is NULL. Can be used instead of the foreign_currency_id, but this or the ID is required when submitting a foreign amount. nullable: true foreign_currency_symbol: type: string format: string example: "$" nullable: true readOnly: true foreign_currency_decimal_places: type: integer format: int32 example: 2 description: Number of decimals in the currency nullable: true readOnly: true budget_id: type: string format: string nullable: true example: "4" description: The budget ID for this transaction. budget_name: type: string format: string example: Groceries description: The name of the budget to be used. If the budget name is unknown, the ID will be used or the value will be ignored. nullable: true readOnly: true category_id: type: string format: string nullable: true example: "43" description: The category ID for this transaction. category_name: type: string format: string example: Groceries nullable: true description: "The name of the category to be used. If the category is unknown, it will be created. If the ID and the name point to different categories, the ID overrules the name." source_id: type: string format: string example: "2" nullable: true description: "ID of the source account. For a withdrawal or a transfer, this must always be an asset account. For deposits, this must be a revenue account." source_name: type: string format: string example: "Checking account" nullable: true description: "Name of the source account. For a withdrawal or a transfer, this must always be an asset account. For deposits, this must be a revenue account. Can be used instead of the source_id. If the transaction is a deposit, the source_name can be filled in freely: the account will be created based on the name." source_iban: type: string format: string example: "NL02ABNA0123456789" nullable: true destination_id: type: string format: string example: "2" nullable: true description: "ID of the destination account. For a deposit or a transfer, this must always be an asset account. For withdrawals this must be an expense account." destination_name: type: string format: string example: "Buy and Large" nullable: true description: "Name of the destination account. You can submit the name instead of the ID. For everything except transfers, the account will be auto-generated if unknown, so submitting a name is enough." destination_iban: type: string format: string example: "NL02ABNA0123456789" nullable: true reconciled: type: boolean format: boolean example: false description: "If the transaction has been reconciled already. When you set this, the amount can no longer be edited by the user." bill_id: type: string format: string nullable: true example: "111" description: Optional. Use either this or the bill_name bill_name: type: string format: string example: "Monthly rent" nullable: true description: Optional. Use either this or the bill_id tags: type: array nullable: true example: description: Array of tags. items: type: string format: string description: Tag. example: Barbecue preparation notes: type: string format: string example: "Some example notes" nullable: true internal_reference: type: string format: string nullable: true description: Reference to internal reference of other systems. external_id: type: string nullable: true format: string description: Reference to external ID in other systems. external_url: type: string format: string nullable: true description: External, custom URL for this transaction. sepa_cc: type: string format: string nullable: true description: SEPA Clearing Code sepa_ct_op: type: string format: string description: SEPA Opposing Account Identifier nullable: true sepa_ct_id: type: string format: string nullable: true description: SEPA end-to-end Identifier sepa_db: type: string format: string nullable: true description: SEPA mandate identifier sepa_country: type: string nullable: true format: string description: SEPA Country sepa_ep: type: string nullable: true format: string description: SEPA External Purpose indicator sepa_ci: type: string format: string nullable: true description: SEPA Creditor Identifier sepa_batch_id: type: string format: string nullable: true description: SEPA Batch ID interest_date: type: string format: date-time nullable: true book_date: type: string format: date-time nullable: true process_date: type: string format: date-time nullable: true due_date: type: string format: date-time nullable: true payment_date: type: string format: date-time nullable: true invoice_date: type: string format: date-time nullable: true User: title: A single user type: object required: - email properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true email: type: string format: email example: "james@firefly-iii.org" description: The new users email address. blocked: type: boolean format: boolean example: false description: Boolean to indicate if the user is blocked. blocked_code: $ref: '#/components/schemas/UserBlockedCodeProperty' role: $ref: '#/components/schemas/UserRoleProperty' UserGroupRead: type: object required: - type - id - attributes - links properties: type: type: string format: string example: "user_groups" description: "Immutable value" id: type: string format: string example: "2" attributes: $ref: '#/components/schemas/UserGroupReadAttributes' links: $ref: '#/components/schemas/ObjectLink' UserGroupReadAttributes: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true in_use: type: boolean format: boolean example: false readOnly: true description: "Is this user group ('financial administration') currently the active administration?" can_see_members: type: boolean format: boolean example: true readOnly: true description: "Can the current user see the members of this user group?" title: type: string format: string description: "Title of the user group. By default, it is the same as the user's email address." example: "demo@firefly" readOnly: false primary_currency_id: type: string format: string example: "12" readOnly: true description: "Returns the primary currency ID of the user group." primary_currency_code: type: string format: string example: "EUR" description: "Returns the primary currency code of the user group." primary_currency_symbol: type: string format: string example: "$" readOnly: true description: "Returns the primary currency symbol of the user group." primary_currency_decimal_places: type: integer format: int32 example: 2 readOnly: true description: "Returns the primary currency decimal places of the user group." members: type: array items: $ref: '#/components/schemas/UserGroupReadMembers' UserGroupReadMembers: type: object properties: user_id: type: string format: string example: "5" readOnly: true description: "The ID of the member." user_email: type: string format: email example: "james@firefly-iii.org" readOnly: true description: "The email address of the member" you: type: boolean format: boolean example: false readOnly: true description: "Is this you? (the current user)" roles: type: array uniqueItems: true items: $ref: '#/components/schemas/UserGroupReadRole' UserGroupReadRole: type: string enum: - ro - mng_trx - mng_meta - read_budgets - read_piggies - read_subscriptions - read_rules - read_recurring - read_webhooks - read_currencies - mng_budgets - mng_piggies - mng_subscriptions - mng_rules - mng_recurring - mng_webhooks - mng_currencies - view_reports - view_memberships - full - owner description: > The possible roles of the user in this user group are documented here: https://docs.firefly-iii.org/references/firefly-iii/api/ UserGroupSingle: type: object required: - data properties: data: $ref: '#/components/schemas/UserGroupRead' UserGroupUpdate: type: object required: - title properties: title: type: string format: string example: "New user group title" description: "A descriptive title for the user group." primary_currency_id: type: string format: string example: "1" description: "Use either primary_currency_id or primary_currency_code. This will set the primary currency for the user group ('financial administration')." primary_currency_code: type: string format: string example: "EUR" description: "Use either primary_currency_id or primary_currency_code. This will set the primary currency for the user group ('financial administration')." WebhookDelivery: type: string format: string nullable: false example: - "JSON" description: Format of the delivered response. enum: - JSON WebhookDeliveryArray: type: array minItems: 1 maxItems: 1 items: $ref: '#/components/schemas/WebhookDelivery' example: - "JSON" WebhookProperties: title: "A single webhook (read)" type: object required: - title - trigger - response - delivery - url properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true active: type: boolean format: boolean example: false description: Boolean to indicate if the webhook is active title: type: string format: string example: "Update magic mirror on new transaction" description: A title for the webhook for easy recognition. secret: type: string format: string example: "iMLZLtLx2JHWhK9Dtyuoqyir" readOnly: true description: A 24-character secret for the webhook. It's generated by Firefly III when saving a new webhook. If you submit a new secret through the PUT endpoint it will generate a new secret for the selected webhook, a new secret bearing no relation to whatever you just submitted. triggers: $ref: '#/components/schemas/WebhookTriggerArray' responses: $ref: '#/components/schemas/WebhookResponseArray' deliveries: $ref: '#/components/schemas/WebhookDeliveryArray' url: type: string format: string example: "https://example.com" readOnly: false description: The URL of the webhook. Has to start with `https`. WebhookResponse: type: string format: string nullable: false example: "RELEVANT" description: Indicator for what Firefly III will deliver to the webhook URL. enum: - TRANSACTIONS - ACCOUNTS - BUDGET - RELEVANT - NONE WebhookResponseArray: type: array minItems: 1 maxItems: 1 items: $ref: '#/components/schemas/WebhookResponse' example: - "TRANSACTIONS" WebhookStore: title: "A single webhook (store)" type: object required: - title - trigger - response - delivery - url properties: active: type: boolean format: boolean example: false description: Boolean to indicate if the webhook is active title: type: string format: string example: "Update magic mirror on new transaction" description: A title for the webhook for easy recognition. triggers: $ref: '#/components/schemas/WebhookTriggerArray' responses: $ref: '#/components/schemas/WebhookResponseArray' deliveries: $ref: '#/components/schemas/WebhookDeliveryArray' url: type: string format: string example: "https://example.com" readOnly: false description: The URL of the webhook. Has to start with `https`. WebhookTrigger: type: string format: string nullable: false example: "DESTROY_TRANSACTION" description: The trigger for the webhook. enum: - ANY - STORE_TRANSACTION - UPDATE_TRANSACTION - DESTROY_TRANSACTION - STORE_BUDGET - UPDATE_BUDGET - DESTROY_BUDGET - STORE_UPDATE_BUDGET_LIMIT WebhookTriggerArray: type: array minItems: 1 maxItems: 3 items: $ref: '#/components/schemas/WebhookTrigger' example: - "STORE_TRANSACTION" - "UPDATE_TRANSACTION" WebhookUpdate: title: "A single webhook (update)" type: object properties: active: type: boolean format: boolean example: false description: Boolean to indicate if the webhook is active title: type: string format: string example: "Update magic mirror on new transaction" description: A title for the webhook for easy recognition. secret: type: string format: string example: "iMLZLtLx2JHWhK9Dtyuoqyir" description: A 24-character secret for the webhook. It's generated by Firefly III when saving a new webhook. If you submit a new secret through the PUT endpoint it will generate a new secret for the selected webhook, a new secret bearing no relation to whatever you just submitted. triggers: $ref: '#/components/schemas/WebhookTriggerArray' responses: $ref: '#/components/schemas/WebhookResponseArray' deliveries: $ref: '#/components/schemas/WebhookDeliveryArray' url: type: string format: string example: "https://example.com" readOnly: false description: The URL of the webhook. Has to start with `https`. WebhookAttempt: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true webhook_message_id: type: string format: string example: "5" description: "The ID of the webhook message this attempt belongs to." status_code: type: integer format: int32 example: 404 nullable: true description: "The HTTP status code of the error, if any." logs: type: string format: string example: "Page not found" nullable: true description: "Internal log for this attempt. May contain sensitive user data." response: type: string format: amount example: "Page not found" nullable: true description: "Webhook receiver response for this attempt, if any. May contain sensitive user data." WebhookMessage: type: object properties: created_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true updated_at: type: string format: date-time example: "2025-11-01T00:00:00+00:00" readOnly: true sent: type: boolean format: boolean example: false description: If this message is sent yet. errored: type: boolean format: boolean example: false description: If this message has errored out. webhook_id: type: string format: string example: "5" description: "The ID of the webhook this message belongs to." uuid: type: string format: string example: "7a344c02-5b52-46b1-90e6-a437431dcf07" description: "Long UUID string for identification of this webhook message." message: type: string format: string example: "{some:message}" nullable: true description: "The actual message that is sent or will be sent as JSON string." AttachableType: type: string format: string example: "Bill" description: The object class to which the attachment must be linked. enum: - Account - Budget - Bill - TransactionJournal - PiggyBank - Tag AutoBudgetPeriod: type: string format: string example: "monthly" nullable: true description: "Period for the auto budget" enum: - daily - weekly - monthly - quarterly - "half-year" - yearly - null AutoBudgetType: type: string format: string example: reset nullable: true description: "The type of auto-budget that Firefly III must create." enum: - reset - rollover - none - null BillRepeatFrequency: type: string format: string example: "monthly" description: How often the bill must be paid. enum: - weekly - monthly - quarterly - "half-year" - yearly PolymorphicProperty: oneOf: - type: boolean - type: string - type: object - type: array items: $ref: '#/components/schemas/StringArrayItem' RecurrenceRepetitionType: type: string format: string example: "weekly" description: "The type of the repetition. ndom means: the n-th weekday of the month, where you can also specify which day of the week." enum: - daily - weekly - ndom - monthly - yearly RecurrenceTransactionType: type: string format: string example: "withdrawal" enum: - withdrawal - transfer - deposit RuleActionKeyword: type: string format: string example: "set_category" description: The type of thing this action will do. A limited set is possible. enum: - user_action - set_category - clear_category - set_budget - clear_budget - add_tag - remove_tag - remove_all_tags - set_description - append_description - prepend_description - set_source_account - set_destination_account - set_notes - append_notes - prepend_notes - clear_notes - link_to_bill - convert_withdrawal - convert_deposit - convert_transfer - delete_transaction RuleTriggerKeyword: type: string format: string example: "user_action" description: The type of thing this trigger responds to. A limited set is possible enum: - from_account_starts - from_account_ends - from_account_is - from_account_contains - to_account_starts - to_account_ends - to_account_is - to_account_contains - amount_less - amount_exactly - amount_more - description_starts - description_ends - description_contains - description_is - transaction_type - category_is - budget_is - tag_is - currency_is - has_attachments - has_no_category - has_any_category - has_no_budget - has_any_budget - has_no_tag - has_any_tag - notes_contains - notes_start - notes_end - notes_are - no_notes - any_notes - source_account_is - destination_account_is - source_account_starts RuleTriggerType: type: string format: string example: store-journal description: Which action is necessary for the rule to fire? Use either store-journal, update-journal or manual-activation. enum: - "store-journal" - "update-journal" - "manual-activation" StringArrayItem: type: string format: string example: "EUR" description: "The actual preference content." UserBlockedCodeProperty: type: string format: string nullable: true example: "email_changed" description: If you say the user must be blocked, this will be the reason code. enum: - email_changed - null UserRoleProperty: type: string format: string example: "owner" nullable: true description: Role for the user. Can be empty or omitted. enum: - owner - demo - null BasicSummary: type: object additionalProperties: $ref: '#/components/schemas/BasicSummaryEntry' BasicSummaryEntry: type: object properties: key: type: string format: string example: "balance-in-EUR" description: "This is a reference to the type of info shared, not influenced by translations or user preferences. The EUR value is a reference to the currency code. Possibilities are: balance-in-ABC, spent-in-ABC, earned-in-ABC, bills-paid-in-ABC, bills-unpaid-in-ABC, left-to-spend-in-ABC and net-worth-in-ABC." title: type: string format: string example: "Balance ($)" description: "A translated title for the information shared." monetary_value: type: number format: double example: 123.45 description: "The amount as a float." currency_id: type: string format: string example: "5" description: "The currency ID of the associated currency." currency_code: type: string format: string example: "EUR" currency_symbol: type: string format: string example: "$" currency_decimal_places: type: integer format: int32 example: 2 description: "Number of decimals for the associated currency." no_available_budgets: type: boolean format: boolean example: false description: "True if there are no available budgets available." value_parsed: type: string format: string example: "$ 12.45" description: "The amount formatted according to the users locale" local_icon: type: string format: string example: "balance-scale" description: "Reference to a font-awesome icon without the fa- part." sub_title: type: string format: string example: "$20 + $-40" description: "A short explanation of the amounts origin. Already formatted according to the locale of the user or translated, if relevant." Configuration: type: object required: - title - value - editable properties: title: $ref: '#/components/schemas/ConfigValueFilter' value: $ref: '#/components/schemas/PolymorphicProperty' editable: type: boolean format: boolean example: true readOnly: false description: "If this config variable can be edited by the user" ConfigurationUpdate: type: object required: - value properties: value: $ref: '#/components/schemas/PolymorphicProperty' CronResult: type: object properties: recurring_transactions: $ref: '#/components/schemas/CronResultRow' auto_budgets: $ref: '#/components/schemas/CronResultRow' telemetry: $ref: '#/components/schemas/CronResultRow' CronResultRow: type: object properties: job_fired: type: boolean format: boolean example: true nullable: true description: | This value tells you if this specific cron job actually fired. It may not fire. Some cron jobs only fire every 24 hours, for example. job_succeeded: type: boolean format: boolean example: true nullable: true description: | This value tells you if this specific cron job actually did something. The job may fire but not change anything. job_errored: type: boolean format: boolean example: false nullable: true description: If the cron job ran into some kind of an error, this value will be true. message: type: string format: string example: "Cron result message" nullable: true description: | If the cron job ran into some kind of an error, this value will be the error message. The success message if the job actually ran OK. SystemInfo: type: object properties: data: type: object properties: version: type: string format: string example: "6.4.4" api_version: type: string format: string description: Same value as the version field. example: "6.4.4" php_version: type: string format: string example: "8.1.5" os: type: string format: string example: "Linux" driver: type: string format: string example: "mysql" UserSingle: type: object required: - data properties: data: $ref: '#/components/schemas/UserRead' AccountTypeFilter: type: string enum: - all - asset - cash - expense - revenue - special - hidden - liability - liabilities - Default account - Cash account - Asset account - Expense account - Revenue account - Initial balance account - Beneficiary account - Import account - Reconciliation account - Loan - Debt - Mortgage TransactionTypeFilter: type: string enum: - all - withdrawal - withdrawals - expense - deposit - deposits - income - transfer - transfers - opening_balance - reconciliation - special - specials - default Meta: type: object properties: pagination: type: object properties: total: type: integer example: 3 count: type: integer example: 20 per_page: type: integer example: 100 current_page: type: integer example: 1 total_pages: type: integer example: 1 AccountRoleProperty: type: string format: string example: "defaultAsset" description: "Is only mandatory when the type is asset." nullable: true enum: - defaultAsset - sharedAsset - savingAsset - ccAsset - cashWalletAsset - null AccountTypeProperty: type: string format: string example: "Asset account" readOnly: true enum: - Default account - Cash account - Asset account - Expense account - Revenue account - Initial balance account - Beneficiary account - Import account - Reconciliation account - Loan - Debt - Mortgage ChartDatasetPeriodProperty: type: string format: string example: "1M" description: "Period of the chart." enum: - 1D - 1W - 1M - 3M - 1Y - custom CreditCardTypeProperty: type: string format: string example: monthlyFull description: "Mandatory when the account_role is ccAsset. Can only be monthlyFull or null." nullable: true enum: - monthlyFull - null InterestPeriodProperty: type: string format: string example: monthly description: "Mandatory when type is liability. Period over which the interest is calculated." nullable: true enum: - weekly - monthly - quarterly - half-year - yearly - null LiabilityDirectionProperty: type: string format: string example: credit description: "'credit' indicates somebody owes you the liability. 'debit' Indicates you owe this debt yourself. Works only for liabilities." nullable: true enum: - credit - debit - null LiabilityTypeProperty: type: string format: string example: "loan" description: "Mandatory when type is liability. Specifies the exact type." nullable: true enum: - loan - debt - mortgage - null ShortAccountTypeProperty: type: string format: string example: "asset" description: "Can only be one one these account types. import, initial-balance and reconciliation cannot be set manually." enum: - asset - expense - import - revenue - cash - liability - liabilities - "initial-balance" - reconciliation TransactionTypeProperty: type: string format: string example: "withdrawal" enum: - withdrawal - deposit - transfer - reconciliation - opening balance BadRequestResponse: type: object properties: message: type: string format: string example: "Bad Request" exception: type: string format: string example: "BadRequestHttpException" InternalExceptionResponse: type: object properties: message: type: string format: string example: "Internal Exception" exception: type: string format: string example: "InternalException" NotFoundResponse: type: object properties: message: type: string format: string example: "Resource not found" exception: type: string format: string example: "NotFoundHttpException" UnauthenticatedResponse: type: object properties: message: type: string format: string example: "Unauthenticated" exception: type: string format: string example: "AuthenticationException" ValidationErrorResponse: type: object properties: message: type: string format: string example: "The given data was invalid." errors: type: object properties: email: type: array items: type: string format: string force: type: array items: type: string format: string blocked: type: array items: type: string format: string field: type: array items: type: string format: string role: type: array items: type: string format: string blocked_code: type: array items: type: string format: string name: type: array items: type: string format: string type: type: array items: type: string format: string iban: type: array items: type: string format: string start: type: array items: type: string format: string end: type: array items: type: string format: string date: type: array items: type: string format: string securitySchemes: firefly_iii_auth: type: oauth2 description: Default OAuth2 flow flows: authorizationCode: authorizationUrl: https://demo.firefly-iii.org/oauth/authorize tokenUrl: https://demo.firefly-iii.org/oauth/token refreshUrl: https://demo.firefly-iii.org/oauth/token scopes: {} local_bearer_auth: description: Optional Bearer token flow type: http scheme: bearer security: - firefly_iii_auth: [] - local_bearer_auth: []