Files
banks2ff/specs/firefly-iii-6.4.4-v1.yaml

25415 lines
766 KiB
YAML
Raw Normal View History

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.
<br><br>
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.
<br><br>
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/).
<br><br>
<small>This file was last generated on 2025-11-01 @ 20:51:03 (Europe/Amsterdam)</small>
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&#039;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 &quot;name&quot;-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&#039;s bills and all related objects.
- name: budgets
description: Endpoints to manage a user&#039;s budgets and get info on the related objects,
like limits.
- name: categories
description: Endpoints to manage a user&#039;s categories and get information on transactions
and other related objects.
- name: charts
description: The &quot;charts&quot; 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 &quot;owner&quot; role to update configuration.
- name: currencies
description: Endpoints to manage the currencies in Firefly III. Depending on the
user&#039;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 &quot;data&quot;-endpoints manage generic Firefly III and user-specific data.
- name: insight
description: The &quot;insight&quot; 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&#039;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&#039;s piggy banks and related
objects and information.
- name: preferences
description: These endpoints can be used to manage the user&#039;s preferences, including
some hidden ones.
- name: recurrences
description: Use these endpoints to manage the user&#039;s recurring transactions, trigger
the creation of transactions and manage the settings.
- name: rule_groups
description: Manage all of the user&#039;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&#039;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&#039;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&#039;s tags.
- name: transactions
description: The most-used endpoints in Firefly III, these endpoints are used to
manage the user&#039;s transactions.
- name: user_groups
description: User groups are the objects around which &quot;financial administrations&quot;
are built.
- name: users
description: Use these endpoints to manage the users registered within Firefly III.
You need to have the &quot;owner&quot; role to access these endpoints.
- name: webhooks
description: These endpoints can be used to manage the user&#039;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: []