Model Context Protocol

Flowtly MCP

Connect any MCP client to Flowtly and work with your data in plain language — read your finances and projects, and take a curated set of actions.

Connect

claude mcp add --transport http flowtly https://mcp.flowtly.eu/mcp

In Claude, ChatGPT, Gemini Enterprise or any other MCP client, add https://mcp.flowtly.eu/mcp as a custom connector and sign in to Flowtly. There is nothing to request and no key to obtain: the client registers itself, and the endpoint URL is the only value most clients ask for.

If yours asks for more, it is a standard OAuth 2.1 public client — registration https://mcp.flowtly.eu/oauth/register, authorization https://mcp.flowtly.eu/oauth/authorize, token https://mcp.flowtly.eu/oauth/token, PKCE S256 required, no client secret. Paste any client_id whole; it is one long unbroken string.

OAuth scopes access to a single organization; every call forwards your own Flowtly token, so the backend enforces your permissions — the connector grants no extra rights.

Working across several organizations? Connect once per organization — that is the supported way, and the connections coexist: each holds its own token, and adding one never signs the others out. Each connection introduces itself as flowtly-mcp (<organization>), so you can tell them apart in your client before you call anything.

Tools 184 · 184 read · 0 write · generated live

Finance & accountancy

Invoices, transactions, contracts, suppliers and the ledger primitives.

bankAccounts_get read

Get one bank account by id — name, currency, bank, and the format its statements are imported in.

id* string | integer
bankAccounts_list read

List the org's bank accounts. Filter by bank, or set hidden to include archived ones. Use it to resolve the bankAccount id that transactions_list filters on.

bank any
hidden boolean
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
contracts_get read

Get one contract by id — parties, direction, value, cyclic terms and dates.

id* string | integer
contracts_list read

List contracts. Filter by direction — the stored values are "in" (REVENUE — we sell, the counterparty is our client; "Sprzedaż" in the UI) and "out" (COST — we buy, the counterparty is a supplier; "Zakup" in the UI), plus "unknown" — a real, filterable state rather than an error. A contract created by uploading a document starts as "unknown" and stays there until extraction or a person settles it, so omit the filter to get all three: "in" and "out" queried separately DO NOT add up to the whole set (flowtly-mcp#130). A lease where our organisation is the landlord (Wynajmujący) is "in"; construction, services and utilities we pay for are "out". NOT "outgoing"/"incoming": those match nothing and come back as an empty list rather than an error. Also filters on counterparty, project, cyclic, name or tags. Use it to resolve the contract id that contracts_paymentScheduleLines reads and that deals_win can link a won deal to.

direction any
Filter by contract direction. Accepts one value or an array of them. Stored values are `in` (REVENUE — we sell, the counterparty is our client; "Sprzedaż" in the UI), `out` (COST — we buy, the counterparty is a supplier; "Zakup" in the UI) and `unknown` — a real, filterable state rather than an error: a contract created by uploading a document starts as `unknown` and stays there until extraction or a person settles it. Omit this filter to get all three; `in` and `out` queried separately DO NOT add up to the whole set (flowtly-mcp#130). A lease where our organisation is the landlord (Wynajmujący) is `in`; construction, services and utilities we pay for are `out`. NOT `outgoing`/`incoming` — those match nothing, and the filter returns an empty list rather than an error (flowtly-mcp#113).
project any
counterparty any
name string
cyclic boolean
exists.counterparty boolean
tags string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
contracts_paymentScheduleLines read

List a contract's payment schedule — the instalments it is expected to be invoiced or paid in. Pass contractId from contracts_list. This is the plan, not the actuals: compare it against transactions_list to see what has really been paid. Each line's amount is a WHOLE NUMBER OF 1/10000 UNITS (Price::MULTIPLIER) — not grosze: "53000000" is 5 300,00, so divide by 10000 (not 100) before reporting a figure to anyone.

contract any
contract.budgetContracts.budget any
contractId* string | integer
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
costGroups_list read

List cost groups / cost centres — the buckets that costs, suppliers and incoming invoices are filed under. Use it to resolve the costGroup id that suppliers_create requires and that incoming-invoice suggestions propose.

order.name string
order.description string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
counterparties_get read

Get one counterparty by id.

id* string | integer
counterparties_list read

List counterparties — every party the org transacts with. The supplier and client flags say which side(s) a counterparty plays, and one record can be both. This is the party on a bank transaction, so it is what incoming invoices and transactions are matched against. Filter by type, supplier, client, cyclic or budgetNeutral.

type any
supplier any
client any
cyclic boolean
budgetNeutral boolean
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
invoices_get read

Get one outgoing (sales) invoice by id — client, rows, totals, sale and issue dates, status.

id* string | integer
invoices_list read

List outgoing (sales) invoices. Filter by client, tags, search, or a saleDate range. Note that saleDate — not issue date and not creation date — is the field invoices_export filters on, so use the same one here when reconciling an export.

client any
name string
id string
tags string
saleDate.before string
saleDate.strictly_before string
saleDate.after string
saleDate.strictly_after string
search string
Free-text search over invoice number and client name.
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
suppliers_list read

List suppliers/contractors — served from /contractors, so "supplier" and "contractor" are the same record. Filter by cyclic for recurring suppliers. Use it to resolve the supplier that a cost, a contract or an incoming invoice is filed against.

cyclic boolean
order.name string
order.description string
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
taxGroups_list read

List tax groups. Use it to resolve the taxGroup id that taxRules_list filters on and that invoice rows carry.

order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
transactions_list read

List bank transactions — the bank feed that incoming invoices are matched against. Filter by bankAccount, counterpartyRole, cost, ignored, hasDetectedProblems, an orderDate/execDate range, or amount.between. Note orderDate and execDate are different: a payment can be ordered in one month and execute in the next.

cost any
counterparty any
bankAccount any
counterpartyRole any
ignored any
hasDetectedProblems boolean
orderDate.before string
orderDate.strictly_before string
orderDate.after string
orderDate.strictly_after string
execDate.before string
execDate.strictly_before string
execDate.after string
execDate.strictly_after string
amount.between string
amount.gt string
amount.gte string
amount.lt string
amount.lte string
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
search string
Free-text search over transaction description, operation number, note and counterparty name.
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
transactions_suggestions read

Read Flowtly's proposals for one bank transaction — which counterparty, cost group or document it should be filed against. The mirror image of incomingInvoices_suggestions, from the money side. Read them before filing a line by hand, then accept one with transactions_applySuggestion.

cost any
counterparty any
bankAccount any
counterpartyRole any
ignored any
hasDetectedProblems boolean
orderDate.before string
orderDate.strictly_before string
orderDate.after string
orderDate.strictly_after string
execDate.before string
execDate.strictly_before string
execDate.after string
execDate.strictly_after string
amount.between string
amount.gt string
amount.gte string
amount.lt string
amount.lte string
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
search string
Free-text search over transaction description, operation number, note and counterparty name.
refresh boolean
Force a rebuild instead of returning the cached suggestions. Suggestions are cached; this is the only way to regenerate ones that are stale or wrong. The transaction-match rebuild runs synchronously; the OCR/LLM rebuild is dispatched async.
id* string | integer
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.

Projects & tasks

Projects, tasks, boards and comments.

projects_costAllocations read

How costs were split ONTO this project — which transactions and invoice lines were attributed to it, and in what share. Use it to explain a profitability figure rather than just quote it: this is where an unexpected result is traced back to the document that caused it. Requires ROLE_TRANSACTIONS_MANAGER. Read-only.

includeSubProjects boolean
Union in every project below this one in the tree. Rows then carry `projectId`/`projectName` for whichever project they belong to.
costGroupId integer
Restrict to one cost group. Ignored when not a positive integer.
tagIds array
Restrict to rows carrying these tags. Accepts a single `tagIds=<id>` as well as the repeated `tagIds[]=<id>` form.
dateFrom string
Inclusive lower bound on `relatedMonth`. Silently dropped if it does not parse.
dateTo string
Inclusive upper bound on `relatedMonth`, anchored at end of day. Silently dropped if it does not parse.
id* string | integer
projects_folderCounts read

How many projects sit in each project FOLDER, as folderId + total + active. The folderId is a tagDefinition id — resolve names with tagDefinitions_list, and find which groups are folder groups with tagGroups_list (allowedRelations contains "project"). A null folderId is the uncategorized bucket. Counts root projects only, since folders group roots and phases follow their parent. Read-only.

status string
Filter projects by status. Accepts a single value or multiple (CSV, e.g. "active,archived"). Values: active, finished, archived.
member boolean
Filter projects by membership
employee string
Filter projects assigned to employee
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
dateFrom.before string
dateFrom.strictly_before string
dateFrom.after string
dateFrom.strictly_after string
dateTo.before string
dateTo.strictly_before string
dateTo.after string
dateTo.strictly_after string
name string
type any
client.name string
budgetProjects.budget.name any
search string
Free-text search over the project's name, client name and reference.
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projects_get read

Get one project by id — name, type, client, dates, description and price.

id* string | integer
projects_list read

List projects. Filter by type (fixed-price | time-and-material | non-billable | internal), client.name, employee, name, or dateFrom/dateTo ranges. Use it to resolve the project id that tasks, work-time logging, budgets and contracts all take.

status string
Filter projects by status. Accepts a single value or multiple (CSV, e.g. "active,archived"). Values: active, finished, archived.
member boolean
Filter projects by membership
employee string
Filter projects assigned to employee
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
dateFrom.before string
dateFrom.strictly_before string
dateFrom.after string
dateFrom.strictly_after string
dateTo.before string
dateTo.strictly_before string
dateTo.after string
dateTo.strictly_after string
name string
type any
client.name string
budgetProjects.budget.name any
search string
Free-text search over the project's name, client name and reference.
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projects_profitability read

THE PER-PROJECT RESULT — what a project earned against what it cost. This is the number a services or development business is usually trying to see, and the one every other project tool feeds. Pass the project id from projects_list. Requires ROLE_ACCOUNT_MANAGER. Read-only.

type string
Which view to build. `income` and `forecast` are accepted but not implemented and always return `[]`. Any other value is a 400.
dateFrom string
Start of the window, inclusive. Defaults to the first day of the current month. An unparseable value falls back to that default rather than erroring.
dateTo string
End of the window, inclusive. Defaults to the last day of the current month. An unparseable value falls back to that default rather than erroring.
id* string | integer
taskComments_list read

List comments on project tasks, oldest first. Filter by task to read one task's discussion.

task any
order.createdAt string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
taskLists_list read

List task lists — the board columns/sections tasks are filed into. Filter by project. tasks_create takes a list id from here.

project any
name string
order.position string
order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
tasks_get read

Get one project task by id — title, project, status, list, assignees, dates and recurrence.

id* string | integer
tasks_list read

List project tasks. Filter by project, list, status, assignees, isTemplate, or startAt/dueAt ranges. Recurring tasks expose recurrenceParent and recurrenceRule, so a generated occurrence can be traced back to the rule that produced it. To decide whether a task is DONE, compare its status against taskStatuses_list (isClosed) rather than matching on the status name. To find tasks by a custom-attribute value, pass attributeValue: an object mapping an attribute id (UUID or /attributes/<uuid> IRI) to the text to match. Matching is exact and ignores case; several entries AND together (all must match); at most 5 entries, each value 1-255 characters. Example (Arad, organisation 6n1p3fl8, attribute set "Events log" with the string attributes "Event: tenant" 2a664318-4117-45a0-bb20-857179cbbc04, "Event: unit" 8c29f0e7-3f2a-4f44-97ac-ac3c9bf2dc35 and "Event: responsible company" fd0c5ab7-0389-4dff-b704-338053bf6c65): unit 08 is attributeValue {"8c29f0e7-3f2a-4f44-97ac-ac3c9bf2dc35": "08"}.

project any
list any
status any
assignees any
subscribers any
recurrenceParent any
recurrenceRule any
asset any
isTemplate boolean
startAt.before string
startAt.strictly_before string
startAt.after string
startAt.strictly_after string
dueAt.before string
dueAt.strictly_before string
dueAt.after string
dueAt.strictly_after string
completedAt.before string
completedAt.strictly_before string
completedAt.after string
completedAt.strictly_after string
exists.dueAt boolean
exists.assignees boolean
search string
Free-text search over task title and description.
open boolean
Open (not closed) tasks when true, closed tasks when false. Closed-ness is the task status's isClosed flag; a task with no status counts as open. Omit for both.
order.position string
order.dueAt string
order.startAt string
order.createdAt string
order.title string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
attributeValue object
Only tasks carrying these custom-attribute values. Maps an attribute id (UUID, or an /attributes/<uuid> IRI from attributes_list) to the text to match, e.g. {"8c29f0e7-3f2a-4f44-97ac-ac3c9bf2dc35": "08"}. Exact match, case ignored. Several entries must ALL match (AND). At most 5 entries; each value is non-empty text of at most 255 characters.
taskStatuses_list read

List the project task statuses, in board order. isClosed marks the done states and isDefault the status a new task gets. Read this before interpreting a task's status — the names are org-configurable, so "Done" is not a reliable string to match on.

name string
isClosed boolean
isStarted boolean
isDefault boolean
order.position string
order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.

Time

Log work time and read it back.

workTimes_get read

Get a single work-time entry by id — date, minutes, project, notes and the employee it belongs to.

id* string | integer
workTimes_list read

List work-time (logged hours) entries. Filter by date range (date.after / date.before, YYYY-MM-DD) and optionally by employee or project; page with cursor. Each row carries employeeId/employeeName and projectId/projectName, so this is how you export all logged hours for a period. IMPORTANT: org-wide results require ROLE_WORKING_HOURS_VIEWER. Without it the backend does NOT error — it silently returns only the connected user's own entries, so an "everyone's hours" export can come back containing one person and look perfectly fine. If every row belongs to one employee and you did not filter by employee, the response carries a scopeWarning saying so — surface it to the user rather than presenting the result as org-wide.

employee any
project any
date.before string
date.strictly_before string
date.after string
date.strictly_after string
projectTree string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.

More

agreements_get read

Get one employment agreement by id — type, variant, the dateFrom/dateTo window, hoursPerWeek, and the derived `calculable`, `active` and `status`. agreements_list supplies the id. Requires ROLE_AGREEMENTS_MANAGER or ROLE_MEETING_MANAGER. Read-only.

id* string | integer
agreements_list read

List employment agreements — filter by employee (IRI), isActive, type or variant. THE way to answer "why does people_list say this person is inactive": each row carries `calculable` and `active`, and a person is active exactly when they hold one that is both. Also the place to read the agreement `type` codes this org actually uses before calling agreements_create, since an org can add its own. Requires ROLE_AGREEMENTS_MANAGER or ROLE_MEETING_MANAGER. Read-only.

isActive boolean
type any
employee any
variant any
order.type string
order.variant string
order.dateFrom string
order.dateTo string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
agreementTypes_get read

Get one contract type by id — its name or translationKey, `calculable`, `isActive`, `position` and `builtIn`. The id IS the code, so this reads back a type by the same string an agreement stores in `type`. Use it to confirm a type persisted after agreementTypes_create, and to check `calculable` before putting anyone on it. Requires ROLE_USER. Read-only.

id* string | integer
agreementTypes_list read

List the contract types THIS org can put on an agreement — the values behind `Ludzie > <person> > Umowy > Edytuj umowę`. Read it before agreements_create, because the list is per-tenant: five built-ins ship ("agreement", "annex", "termination", "list-of-intent", "work-experience") and an org can add its own, so a `type` that is valid in one org 422s in another. THE ID IS THE CODE — the `id` on each row is exactly the string `agreements_create` wants in `type`, not a numeric key to look up. `calculable` is the field that decides whether holding this type makes somebody ACTIVE and counts them into the resourcing bench, holiday accrual and the cost base; a non-calculable type leaves them inactive with no error anywhere, which is intended for a type like "list-of-intent" and a silent bug if you picked it by accident. `builtIn` rows carry a translationKey and a null name; custom rows carry a name rendered verbatim and a null translationKey. Requires ROLE_USER. Read-only.

order.position string
order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
allocations_get read

One allocation by id — a single person's booking on a project, with its dates and percentage. allocations_list finds the id; this reads the full record. An allocation with no employee is an OPEN role (unfilled demand), not a booking. Needs the resourcing module. Read-only.

id* string | integer
allocations_list read

List resourcing allocations — date-ranged assignments of a position on a project to an employee (or to nobody yet, an open role). No filters; page with cursor. Each item carries employeeId/employeeName and projectId/projectName already resolved (null employeeId means an open role); positionId is bare — resolve its name via positions_list. source distinguishes sheet-imported rows from ones created directly in Flowtly. Use this to reconcile a resourcing sheet import: read back what landed and compare against what was submitted.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
assetBookings_get read

Get one asset booking by id — the asset, its holder, the dates, and whether it has been cancelled. Read-only.

id* string | integer
assetBookings_list read

List asset bookings — who or what currently holds each asset, which is the assignment the Assets screen shows and the only place an asset-to-person link actually lives. Each row carries the asset, the holder (`relationName` employee | project plus `relationId`), start/end dates and, once released, `cancelReason` and `cancelledAt`. Filter by `property` to see one asset's history, or by `employee` to see everything one person holds — that second one is what to run before someone leaves. Note `employee` here is the NUMERIC id, not the /people IRI that assetBookings_create takes. Add `exists.cancelledAt: false` to see only what is still held; without it the list includes released bookings too. Read-only.

employee integer
relationName any
relationId any
property any
startDate.before string
startDate.strictly_before string
startDate.after string
startDate.strictly_after string
dateTo string
exists.cancelledAt boolean
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
assetCommercialRelations_get read

Get one asset commercial relation by id -- asset (`property`), `project`, optional `propertyBooking`, `relationType` (infrastructure-access | parking-access | cost-allocation | service-access), amount, currency, dates, `invoiceable` and `note`. Read-only.

id* string | integer
assetCommercialRelations_list read

List asset commercial relations (Relacje handlowe) -- the non-lease claims a project holds on an asset: a telecom operator on a mast, a parking allowance, a cost allocation. Each row carries `property` (the ASSET, /assets/{id}), `project`, an optional `propertyBooking`, `relationType`, `amount` and `currency`, `dateFrom`/`dateTo`, `invoiceable` and `note`. `relationType` is one of infrastructure-access | parking-access | cost-allocation | service-access. Filters: `property`, `project`, `propertyBooking`, `relationType`, `currency`, `invoiceable`. Not paginated by the backend. Requires ROLE_PROJECTS_MANAGER or ROLE_ADMIN. Read-only.

property any
project any
propertyBooking any
relationType any
currency any
invoiceable boolean
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
assetMeterReadings_get read

Get one meter reading by id — its meter, date and value. Read-only.

id* string | integer
assetMeterReadings_list read

List meter readings — the dated values recorded against an asset meter, the raw data the metered-billing split reads. Each row carries the meter, date and value. Use it to read a meter's history: a value that never moves across periods (a stuck or shared meter) bills zero, and a meter with no recent rows is one nobody is reading. Read-only.

meter any
meter.property any
readingType any
source any
isEstimated boolean
readingAt.before string
readingAt.strictly_before string
readingAt.after string
readingAt.strictly_after string
periodFrom.before string
periodFrom.strictly_before string
periodFrom.after string
periodFrom.strictly_after string
periodTo.before string
periodTo.strictly_before string
periodTo.after string
periodTo.strictly_after string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
assetMeters_get read

Get one asset meter by id — the asset it sits on, utility type, unit and external/QR identifier, with its readings. Read-only.

id* string | integer
assetMeters_list read

List the org's asset meters — the utility/media counters attached to assets (electricity, water, gas, heat). Each carries the asset it sits on, its utility type and unit, and its readings. Filter by `property` (the asset it belongs to) and `utilityType`. Use it to resolve the meter id that readings take, and to spot meters that read zero, are stuck on one value, or sit on a shared/collective meter. Read-only.

property any
utilityType any
readingMode any
externalId any
isActive boolean
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
assets_get read

Get one asset by id — name, status, category (attributeSet), assetCode, serial number, purchase and warranty dates, location and booking settings. IT ALSO ANSWERS THE NESTING: `children` lists the IRIs of the assets nested under this one and is always present (`[]` when there are none), and `parent` is the IRI it is nested under, ABSENT rather than null on a top-level asset. Read `children` before assets_delete, which neither cascades nor refuses on them. Those IRIs read `/properties/42`, not `/assets/42` (these routes are an alias over the same resource); the number is the asset id this tool takes. Read-only.

id* string | integer
assets_list read

List the org's assets — the register of physical things it owns or sells, from laptops and desks to apartments, parking spaces and storage units. Filter by status (in-stock | damaged | sold), attributeSet (the category the Assets list groups by), bookingAllowed, or a partial name or serialNumber; order by name, status, serialNumber, boughtAt or warrantyTo. NOT PAGINATED — the whole set comes back in one response, so a large register is one big payload rather than a first page. THIS IS ALSO THE WHOLE NESTING TREE: every row carries `children` (the IRIs of the assets nested under it, `[]` when none) and `parent` (the IRI it is nested under, ABSENT on a top-level asset), so one call answers which units sit under which building without a filter — there is no `parent` filter, and none is needed. Those IRIs read `/properties/42`, not `/assets/42` (these routes are an alias over the same resource); the number is the asset id this tool's siblings take. Use it to resolve the asset id that asset bookings and asset documents take. Read-only.

status any
bookingType any
attributeSet any
name string
serialNumber string
bookingAllowed boolean
park boolean
order.name string
order.status string
order.serialNumber string
order.boughtAt string
order.warrantyTo string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
attributeEntityValues_list read

List attribute VALUES — what a specific asset, project, budget or client actually holds for a bound attribute. Each row carries the attribute, the value, and `relationId` naming the entity it belongs to. Read-only.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
attributePrices_get read

Get one default rate by id — its rule, amount, currency and dateFrom. Requires ROLE_ATTRIBUTES_MANAGER. Read-only.

id* string | integer
attributePrices_list read

List the ORG-WIDE DEFAULT price for each rate category — what a category costs when no project says otherwise. This is the project-independent half of the model; projectPrices is the per-project half and overrides it. Paginated (page, itemsPerPage), ordered by amount or dateFrom. Requires ROLE_ATTRIBUTES_MANAGER. Read-only.

order.amount string
order.dateFrom string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
attributeRules_get read

Get one rate category by id — its name, its attributeSet, and the attribute it is measured per (or none). Requires ROLE_ATTRIBUTES_MANAGER. Read-only.

id* string | integer
attributeRules_list read

List the RATE CATEGORIES an org bills under — "Base rent", "Service charge", "Operating costs". A rule is what a price hangs off: `attributeRule` is required and non-nullable on BOTH projectPrices and attributePrices, so resolve the rule first and everything else follows. Each row carries its attributeSet (the category family) and, optionally, the attribute the rate is measured PER. Requires ROLE_ATTRIBUTES_MANAGER, which unusually gates the read as well as the write. Read-only.

order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
attributes_get read

Get one attribute definition by id — name, type, whether it is required or multiple, default value and format pattern. Read-only.

id* string | integer
attributes_list read

List attribute DEFINITIONS — the named fields (area, floor, price) that categories bind and assets carry values for. Each has a type: number | string | date | state | period. Read-only.

order.name string
order.type string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
attributeSetAttributes_list read

List the bindings between categories and attribute definitions — which fields appear on which category. Read-only.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
attributeSets_get read

Get one attribute set by id — its name, relationName, icon, and the attributes bound to it. Read-only.

id* string | integer
attributeSets_list read

List the org's attribute sets — the CATEGORIES an asset, project, budget or client is filed under. Filter by relationName: "property" for asset categories (what the UI calls Typ zasobu and the Assets list groups by), plus "project", "budget" and "client". Reach for this before creating one: a category duplicated by spelling or casing silently splits the list it groups, and nothing in the UI explains why. Read-only.

relationName any
order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
banks_get read

Get one bank by id — the institution, not an account held with it. Use bankAccounts_get for the account.

id* string | integer
banks_list read

List the banks the org's accounts are held with. Hidden banks are INCLUDED by default — pass hidden=false for the pickers' view, or hidden=true to find the retired ones. Use it to resolve the bank id that bankAccounts_list filters on and that bankAccounts_create needs.

hidden boolean
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgetAreaExclusions_list read

List the units a budget leaves OUT of its cost-per-m2 area, one row per (budget, unit). Filter by `budget` (IRI "/budgets/<id>") to read one budget's list; an empty list means the budget uses the park's full area. Each row's own id is what budgetAreaExclusions_delete takes; the unit's id is a different thing. An exclusion applies to that one budget only. Requires ROLE_BUDGETS_VIEWER and the property-management module. Read-only.

budget any
property any
order.id string
order.createdAt string
order.budget.id string
order.budget.name string
order.property.id string
order.property.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgetContractors_list read

List the budget-to-CONTRACTOR join rows — which suppliers each budget covers. Filter by budget. Each row's own id is what budgetContractors_delete takes.

budget any
contractor any
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgetContracts_list read

List the budget-to-CONTRACT join rows — which contracts each budget covers. Filter by budget. Each row's own id is what budgetContracts_delete takes.

budget any
contract any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgetGroups_list read

List the org's budget groups — the roll-ups several budgets are totalled through, one per site, SPV or year. Use it to resolve the group IRI that budgets_update takes in `budgetGroup`, and to check whether the group you are about to create already exists: names are not unique. Needs ROLE_BUDGETS_VIEWER. Read-only.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgetPeriods_list read

List the per-period plan rows of an operational budget — the monthly baseline and revenue figures, one row per `periodKey` (`YYYY-MM`). Filter by `budget` (the id) and optionally `periodKey`. This is how you read back what budgets_planUpsert wrote: AMOUNTS COME BACK AT 1/10000 OF THE CURRENCY, so 228000000 is 22 800,00 — the same scale planUpsert calls `1/10000`, not the `major` units you may have sent. Needs ROLE_BUDGETS_VIEWER. Read-only.

budget any
periodKey any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgetProjects_list read

List the budget-to-PROJECT join rows — which projects each budget covers. Filter by budget to read one budget's scope. Each row's own id is what budgetProjects_delete takes; the project id is a different thing and deleting by it will not work. Note what this cannot express: scope is a SNAPSHOT of ids, with no "all projects" rule, so a project created tomorrow is not covered until somebody adds it (flowtly-app-backend#5498).

budget any
project any
order.id string
order.createdAt string
order.budget.id string
order.budget.name string
order.project.id string
order.project.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgetRecoveryNettings_list read

List the cost tags a budget NETS its tenant recoveries against, one row per (budget, tag). Filter by `budget` (IRI "/budgets/<id>") to read one budget's list; an empty list means the budget reports gross costs. Each row's own id is what budgetRecoveryNettings_delete takes; the tag definition's id is a different thing. Netting applies to that one budget only. Requires ROLE_BUDGETS_VIEWER and the property-management module. Read-only.

budget any
tagDefinition any
order.id string
order.createdAt string
order.budget.id string
order.budget.name string
order.tagDefinition.id string
order.tagDefinition.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgets_employeePnl read

P&L per employee for a budget — what each person's time earned against what they cost. Needs ROLE_BUDGETS_VIEWER. Read-only.

id* string | integer
budgets_get read

Get one budget by id — its period, scope and settings, including `planSource` (`manual`, `contracts` or `initial_budget`) and, for `initial_budget`, `planInitialBudget`, the IRI of the initial budget the plan is read from (null otherwise). When the budget nets tenant recoveries against cost tags (budgetRecoveryNettings_create), the headline figures are NET: `currentPeriodRecovery` is the recovery taken out of the current period's expense AND income (so profit and loss is unchanged), and each `periodStats[]` entry carries `recovery` for its period. Both fields are ABSENT, not zero, when the budget has no netting. Needs ROLE_BUDGETS_VIEWER. Read-only.

id* string | integer
budgets_list read

List the org's budgets — the periods against which income and cost are planned and compared. Use it to resolve the budget id that every pnl tool takes. Needs ROLE_BUDGETS_VIEWER. Read-only.

properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
budgets_pnlByTags read

P&L for a budget, broken down BY TAG — income, costsByTag, costsByProject and netByTag over the budget's periods. The tag axis is what makes this readable for a business whose costs are not naturally per-project: tag the documents, and the split follows. THE PLAN SECTIONS FOLLOW THE BUDGET'S `planSource` (and say which one in `source`): `manual` gives one untagged plan row, `contracts` splits by the contracts' tags, and `initial_budget` gives one plan row per tag of the initial budget's lines, month by month — the only way to see a per-category plan. Read it before and after budgets_update changes the source, because the switch moves every planned figure. WHEN THE BUDGET NETS TENANT RECOVERIES (budgetRecoveryNettings_create) every figure here is NET: a netted tag's costsByTag row is reduced by the recoveries tagged with it, the income and netByTag sections and the totals by the same amount, so income minus expense never changes. The netted costsByTag rows then gain `netted: true`, `grossByPeriod` (the cost before netting), `recoveryByPeriod` (what was taken out), `ytdGross` and `ytdRecovery`, and a row can be NEGATIVE when recoveries exceed the cost. These fields are ABSENT, not zero, on rows that are not netted and on a budget with no netting at all. Carries displayPricePerSqm when the org has enabled price-per-sqm and named an area attribute, which is what turns this into a per-square-metre view for a property developer. THE FULL ANSWER IS LARGE — six sections, four of them repeated once per tag group, around 30 KB for seven categories over twelve months — so pass `sections` to name only the ones you need and keep the rest out of your context; `sections: []` returns the periods and the empty-section notices alone. The per-square-metre figures are the other half of the bulk: when displayPricePerSqm is on they sit beside every figure in every row, every total and every tag group, so pass `includePricePerSqm: false` to drop them unless you are reading the /m² view. Needs ROLE_BUDGETS_VIEWER. Read-only.

id* string | integer
sections array
Return only these sections of the response, to keep a large payload out of your context. Omit for all of them. An empty array returns the metadata alone — the periods, and the notices saying why a section is empty — which are always included and cannot be dropped. Selectable: income, costsByTag, costsByProject, netByTag, plan, planIncome. Applied by the MCP after fetching, so it reduces what you read, not what the backend computes.
includePricePerSqm boolean
Keep the per-square-metre figures. Default true. Pass false to drop `pricePerSqmByPeriod`, `pricePerSqmYtd` and `surface` from every row, every `totals` and every `byGroup` entry — roughly a third of the payload on a budget that has them, and dead weight unless you are reading a property developer's /m² view. Only relevant when the response's `displayPricePerSqm` is true; with it false the backend sends no such figures anyway. Applied by the MCP after fetching, so it reduces what you read, not what the backend computes. If it ever removes nothing while `displayPricePerSqm` is true, the answer carries a `fieldDropNotices` entry saying so: the figures below it are then unfiltered and the notice is a bug report, not a result.
budgets_pnlByTagsDrilldown read

The documents behind one cell of budgets_pnlByTags. Reach for it when a tag total looks wrong — it names the transactions making up the number instead of leaving you to guess. Needs ROLE_BUDGETS_VIEWER. Read-only.

id* string | integer
section string
Which half of the matrix the cell sits in. Defaults to `cost`; upstream reads anything that is not `income` as `cost`.
tag string
The cell's tag key, exactly as `budgets_pnlByTags` returns it on its rows. Defaults to `untagged` — which is the residual row, not 'every tag'.
period string
The cell's period key as `budgets_pnlByTags` returns it for the granularity you read it at: `2026-03` for month, `2026-Q1` for quarter, `2026` for year. Omit it and no period matches, so the drilldown comes back empty.
granularity string
`month` (default), `quarter` or `year`. Must match the granularity the matrix was read at, or the period key will not resolve.
year integer | string
Restricts the matrix to one calendar year before the cell is located. A non-numeric value is ignored upstream.
project string | integer
Drills a costs-BY-PROJECT cell instead of a tag cell: pass the project's BARE id, not an IRI. When present, `section` and `tag` are not consulted — a project drill is always a cost cell.
budgetTransactions_list read

List the transactions that reach ONE budget. `budget` (id or IRI "/budgets/<id>") is effectively REQUIRED: without it the backend returns an empty list. Optional `year` filters by the transaction's related or order year. Rows include bookings that are NOT stored: a transaction that reaches the budget through a project, an attachment, a contractor or a tag is shown as a derived row whose id starts with `vpt-`, `vpta-` or `vtag-`, and which budgetTransactions_delete cannot remove. Only a row without such a prefix is a real manual booking, and a real booking takes priority over a derived row for the same transaction; read `attributionSources` to see how the budget is reached. To check whether a transaction is already booked to a budget, list that budget and look for the transaction there BEFORE budgetTransactions_create. Each real row's own id is what budgetTransactions_delete takes. Requires ROLE_BUDGETS_VIEWER.

budget string
year integer
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
clients_get read

Get one client by id — name, country, currency, tax id and status.

id* string | integer
clients_list read

List clients (the org's customers). Filter by status, or by externalPaymentCustomerId to find the client behind a payment-provider id. Use it to resolve the client id that invoices_list, deals_list, projects_list and contracts_list all filter on.

properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
externalPaymentCustomerId any
status any
order.name string
order.status string
order.tin string
order.tinCountry string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
configKeys_catalog read

List every organization config key the backend recognises, with its type and allowed values. This is the catalog of what is configurable — read it before configs_get or configs_update rather than guessing a key name. Permission is enforced per key by the backend, so a key appearing here does not guarantee the connected user may write it.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
configs_get read

Read one organization config value by id, where the id is a key from configKeys_catalog (e.g. organization-logo-url, organization-icon-url).

id* string | integer
contractEvents_get read

Get one contract event (lease milestone) by id: contract, label, description, occurredOn and kind (handover, rent_start, service_charge_start or null). Needs ROLE_CONTRACTS_VIEWER. Read-only.

id* string | integer
contractEvents_list read

List a lease's milestones (events its payments and rent hang off): handover of the premises, rent start, service-charge start, or any other the contract words (label). Filter by `contract` (IRI). Each row: id, contract, label, description, occurredOn (date, null while it has not happened) and `kind` (handover, rent_start, service_charge_start or null). The rent_start event is the one billing reads. Needs ROLE_CONTRACTS_VIEWER. Read-only.

contract any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
contractLeaseDetails_get read

Get one lease-details row by id: contract, tradeName, contractNumber. Needs ROLE_CONTRACTS_VIEWER and the property-management module. Read-only.

id* string | integer
contractLeaseDetails_list read

List the lease details: the name a tenant trades under (`tradeName`) and the lease's own number (`contractNumber`), one row per lease. Filter by `contract` (IRI). Needs ROLE_CONTRACTS_VIEWER and the property-management module. Read-only.

contract any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
contractMoneyLines_get read

Get one contract money line by id - a price the contract states (rent, service charge, fit-out), as it states it: kind, rateAmount, currency, unit, period, quantity, quantityFromContractArea, source and effectiveQuantityNow. Take the id from moneyLines[] on contracts_get. RATE SCALE: `rateAmount` is a whole number of 1/10000 units as a string, so 12.50 EUR per m2 per month is "125000" (NOT "12.50", not "1250"); `quantity` is the INVOICED AREA IN m2 as a decimal string with up to 4 decimals ("598.0000"), which is authoritative over the contract area for rent. Read-only. Needs ROLE_CONTRACTS_VIEWER.

id* string | integer
crmNotes_get read

Get one CRM note by id.

id* string | integer
crmNotes_list read

List notes written on leads and deals. Filter by lead or deal to read the running commentary on one record.

lead any
deal any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
currencies_get read

Get one currency by id — its code and symbol. Read-only.

id* string | integer
currencies_list read

List the currencies the org can price in — and the ONLY way to resolve the `currency` IRI that projectPrices_create, attributePrices_create, clients_create and bankAccounts_create all require. Those fields take "/currencies/{id}", never a code like "EUR" or "RON", so this is the lookup that makes them usable. Read-only.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
dealLostReasons_get read

Get one deal lost-reason by id.

id* string | integer
dealLostReasons_list read

List the reasons a deal can be marked lost, in order. deals_lose requires a lostReasonId from here.

order.position string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
deals_get read

Get one deal by id — title, client, stage, amount, owner, contact, expected and actual close dates.

id* string | integer
deals_list read

List deals/opportunities — the sales pipeline. Filter by status (open / won / lost), stage, owner, client, lead, or by expectedCloseDate / closedAt ranges. Amounts are minor units with an explicit currency; do not assume the org's default.

status any
stage any
owner any
client any
lead any
title string
closedAt.before string
closedAt.strictly_before string
closedAt.after string
closedAt.strictly_after string
expectedCloseDate.before string
expectedCloseDate.strictly_before string
expectedCloseDate.after string
expectedCloseDate.strictly_after string
createdAt.before string
createdAt.strictly_before string
createdAt.after string
createdAt.strictly_after string
order.createdAt string
order.expectedCloseDate string
order.amountMinor string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
dealStageHistories_get read

Get one deal stage-change record by id.

id* string | integer
dealStageHistories_list read

List a deal's stage transitions, newest first. Filter by deal. Every deals_update that moves the stage is logged here automatically, so this is how you reconstruct how long a deal sat in each stage — the deal itself only carries its current one.

deal any
order.changedAt string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
departments_list read

The org's departments, with the numeric id each one is referenced by. READ THIS BEFORE people_create or people_update: both accept a `department` IRI and there is no other way to discover a valid one. The collection is unpaginated and ordered by name, so a single call returns every department the org has. Filter by `name` (partial match) or `code` (exact). Rows carry id, name and code; `manager` is a relation and is not included in list rows — read it with people_list from the other side if you need it. Requires ROLE_EMPLOYEES_VIEWER. Read-only.

order.name string
id any
name string
code any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
documents_listForPerson read

List one person's document records — exactly what People > Documents shows for them. Takes the person's id (from people_list / people_get). Each row carries the document id, its documentType, and the embedded storage row: id, relationName, relationId, size, mimeType, and originalFilename — the name the file carried when it was uploaded. The field is `originalFilename`, NOT `filename`: it is a display name, for showing the file and for naming a download, never a storage key and never a path. It is not an identity — two documents can carry the same name, and it is null on a row whose upload recorded none — so match a document by its id and type, never by name. Requires ROLE_DOCUMENTS_VIEWER, and the caller must also be able to read the person. Read-only.

id* string | integer
documentTypes_list read

List the org's document TYPES — the named requirements a person or other record can hold a file against (NDA, Stock Option Agreement, medical examination). Filter by relationName to get one relation's types: for employee documents that is the SINGULAR "employee" — "employees" is the storage namespace and matches nothing here. Each row carries id, name, relationName, required, expiring. REACH FOR THIS FIRST when filing a document: types are created by name and a second "NDA" is accepted, so listing before creating is what stops the list splitting in two. Requires ROLE_DOCUMENTS_VIEWER. Read-only.

order.name string
order.description string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
employeeTransactionAttachments_list read

List document-to-employee cost allocations — which incoming document (transactionAttachment) is allocated to which employee, for how much and as which cost component. Filter by employee or transactionAttachment. A document's employeeAllocations shows the same rows from the document side. Needs ROLE_TRANSACTIONS_MANAGER. Read-only.

transactionAttachment any
employee any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
employeeTransactions_list read

List bank-line-to-employee cost allocations — which bank transaction is allocated to which employee, for how much and as which cost component. Filter by employee or transaction. A transaction's employeeTransactions shows the same rows from the bank side. Needs ROLE_TRANSACTIONS_MANAGER. Read-only.

transaction any
employee any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidayCarryOvers_list read

The STATED opening leave balance per person per year — what someone carried INTO a year, as asserted by the customer rather than derived from history. Filter by `employee` (IRI from people_list) and `year`. Reach for it to explain a balance that does not match an entitlement: where a row exists it OVERRIDES the derived carry-over for that year, so the derivation is not the answer. Amounts are in SECONDS and may be NEGATIVE — an 8h day is 28800, so 13 days reads 374400 and a 3-day deficit reads -86400. Not the same thing as holidayDaysLimits_list, which is the allowance that accrues. Requires ROLE_EMPLOYEES_MANAGER. Read-only.

employee any
year any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidayDaysLimitDefaults_list read

The ORG-WIDE default leave allowances — what someone is entitled to when nobody has given them a personal holidayDaysLimits row. Reach for it to explain a balance that nobody can find a per-person row for: the answer is usually a default on their contract variant. Rows are keyed by (holidayType, variant, dateFrom), so one type can differ per contract variant (uop, b2b, uz, uod) and change over time. Amounts are in SECONDS (#3763) — an 8h leave day is 28800, so 26 days is 748800 and 2 days is 57600. A default applies to everyone whose governing agreement has that `variant` and who has NO personal holidayDaysLimits row of the same type — a personal row always wins over it. So writing one moves the balance of every such employee at once, with no per-person step. Requires ROLE_HOLIDAYS_MANAGER. Read-only.

order.seconds string
order.dateFrom string
order.variant string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidayDaysLimits_get read

One entitlement row by id — the amount, the type, the contract variant and the date it takes effect. holidayDaysLimits_list finds the id. Amounts are in SECONDS (#3763). Read-only.

id* string | integer
holidayDaysLimits_list read

How much leave each person is ENTITLED to, per type — not how much they have taken, which is holidays_list. Filter by employee. A person can hold several rows for one type over time, because a balance gets topped up or corrected: the row IN FORCE is the one with the latest dateFrom that has already arrived, and rows dated ahead are deliberately ignored until then. Amounts are in SECONDS (#3763) — an 8h leave day is 28800. Requires ROLE_HOLIDAYS_MANAGER. Read-only.

employee any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidayRequests_list read

Leave REQUESTS and where they stand — pending, approved, rejected. Distinct from holidays_list, which is booked leave: a request still awaiting a decision is not yet an absence, so plan against holidays_list and use this one to see what is waiting on someone. Supplies the holidayRequestId that holidays_approve and holidays_bulkApprove take. Read-only.

status any
employee any
type any
order.dateFrom string
order.dateTo string
order.type string
order.status string
project string
Filter by the employee's project membership: records whose employee is a member of the given project. A record has no project of its own, so this is not a property of the record itself. Accepts a project id or IRI; an unresolvable value matches nothing.
search string
Free-text search over the leave request's employee name, type and description.
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidays_active read

Who is off RIGHT NOW — every currently-running leave, org-wide, for everyone. This is the tool for 'who is out today', and the one to cross-check before treating resourcingBench_get's freePercent as availability, because the bench does not subtract leave. Unlike holidays_list it applies no project scoping and needs no permission beyond being signed in, so its answer covers the whole organisation. Returns each absence with its type and dates. Read-only.

employee any
type any
dateFrom.before string
dateFrom.strictly_before string
dateFrom.after string
dateFrom.strictly_after string
dateTo.before string
dateTo.strictly_before string
dateTo.after string
dateTo.strictly_after string
order.dateFrom string
order.dateTo string
order.type string
project string
Filter by the employee's project membership: records whose employee is a member of the given project. A record has no project of its own, so this is not a property of the record itself. Accepts a project id or IRI; an unresolvable value matches nothing.
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidays_get read

One leave record by id, with its type, dates and duration. Get the id from holidays_list or holidays_active. Read-only.

id* string | integer
holidays_list read

Booked leave over a period — the planning view, where holidays_active answers only about today. Filter by employee, by date range, or by project. WHAT YOU SEE DEPENDS ON YOUR PERMISSIONS, and a short list is not proof nobody is off: a holidays manager or accountancy viewer gets the organisation, while a project lead or viewer MUST pass a project filter (or ask about themselves) and is refused outright without one — that refusal is a permission boundary, not an empty calendar. Read-only.

employee any
type any
dateFrom.before string
dateFrom.strictly_before string
dateFrom.after string
dateFrom.strictly_after string
dateTo.before string
dateTo.strictly_before string
dateTo.after string
dateTo.strictly_after string
order.dateFrom string
order.dateTo string
order.type string
project string
Filter by the employee's project membership: records whose employee is a member of the given project. A record has no project of its own, so this is not a property of the record itself. Accepts a project id or IRI; an unresolvable value matches nothing.
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidayTypeReasons_list read

The reason sub-pools defined on a leave type — Bespoke split `Okolicznościowa` into *inny*, *ślub*, *pogrzeb*, *narodziny* (flowtly-app-backend#5474). Read it to get the `reason` IRI that holidayDaysLimits_create and holidays_create accept; without one those fields cannot be filled. Filter by `holidayType` for one type's reasons, and by `isActive` — a retired reason stays listed so a grant made against it still resolves. Read-only.

holidayType any
isActive boolean
order.position string
order.label string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
holidayTypes_list read

The leave types this org uses, with the id each one is referenced by. Read it before holidayDaysLimits_create/update, which need a holidayType IRI and will otherwise be guessed at. The one that is not a holiday in the ordinary sense is `pick-up-day` — time off owed for overtime already worked (Polish *odbior nadgodzin*), which is a GRANTED balance rather than an annual entitlement. Read-only.

order.name string
order.status string
order.descriptionRequired string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
incomingInvoices_get read

Get one incoming (supplier) invoice or supporting document by id, with its OCR'd fields and current match state.

id* string | integer
incomingInvoices_list read

List incoming (supplier) invoices and supporting documents — the accountancy inbox. An incoming invoice IS a document attached to a bank transaction, so exists.transaction=false is how you find documents that are not yet matched to a payment. Filter also by status, relatedMonth, counterparty, project, tags, name, invoiceNumber or hasDetectedProblems. TO DEDUPE BEFORE incomingInvoices_create, filter by counterparty (an exact filter) and compare the invoice number EXACTLY on the rows that come back: `invoiceNumber` and `name` are partial matches, so invoiceNumber=FV/1 also returns FV/10 and a non-empty result is not a hit. externalId IS NOT A FILTER ON THIS TOOL. Every document is fingerprinted as externalId 'upload_sha256:<sha256 of the bytes>' and that value is returned on every row, but passing externalId as a parameter is silently ignored and you get an UNFILTERED page back — which reads exactly like 'no duplicate found'. Compare the fingerprint on rows you have already fetched; never search for it. It only catches byte-identical files in any case: the same invoice re-rendered has a different hash, so also search name=<invoice number> when you know it (`name` is a partial match, so it finds both the OCR'd name and the original filename).

exists.transaction boolean
hasDetectedProblems boolean
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
status string
Filter transaction attachment by status based on custom logic
relatedMonth string
relatedMonth.before string
relatedMonth.strictly_before string
relatedMonth.after string
relatedMonth.strictly_after string
receivedAt.before string
receivedAt.strictly_before string
receivedAt.after string
receivedAt.strictly_after string
tags string
connectedMonth string
order.receivedAt string
order.name string
order.amount string
name string
invoiceNumber string
counterparty any
project string
budget string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
incomingInvoices_matchCandidates read

List the bank transactions that could be the payment for this incoming invoice, ranked by the backend's own matcher. Reach for it when a document has no transaction attached and you need to choose one; prefer these candidates over guessing from amounts yourself.

exists.transaction boolean
hasDetectedProblems boolean
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
status string
Filter transaction attachment by status based on custom logic
relatedMonth string
relatedMonth.before string
relatedMonth.strictly_before string
relatedMonth.after string
relatedMonth.strictly_after string
receivedAt.before string
receivedAt.strictly_before string
receivedAt.after string
receivedAt.strictly_after string
tags string
connectedMonth string
order.receivedAt string
order.name string
order.amount string
name string
invoiceNumber string
counterparty any
project string
budget string
id* string | integer
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
incomingInvoices_suggestions read

Read Flowtly's own proposals for an incoming invoice — supplier match, cost group, matching bank transaction, duplicate warning. These are exactly the proposals a human sees in the app. Read them first, then apply one by id with incomingInvoices_applySuggestion, or take them all with acceptAllSuggestions. Pass refresh to recompute rather than serve the cached set.

exists.transaction boolean
hasDetectedProblems boolean
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
status string
Filter transaction attachment by status based on custom logic
relatedMonth string
relatedMonth.before string
relatedMonth.strictly_before string
relatedMonth.after string
relatedMonth.strictly_after string
receivedAt.before string
receivedAt.strictly_before string
receivedAt.after string
receivedAt.strictly_after string
tags string
connectedMonth string
order.receivedAt string
order.name string
order.amount string
name string
invoiceNumber string
counterparty any
project string
budget string
refresh boolean
Force a rebuild instead of returning the cached suggestions. Suggestions are cached; this is the only way to regenerate ones that are stale or wrong. The transaction-match rebuild runs synchronously; the OCR/LLM rebuild is dispatched async.
id* string | integer
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
incomingInvoices_suggestionsDebug read

Explain WHY an incoming invoice's suggestions came out as they did — the matcher's scoring, for diagnosing a missing or wrong suggestion. Diagnostic only; use incomingInvoices_suggestions for normal work.

id* string | integer
initialBudgetItems_list read

List initial budget line items — the planned amounts, by tag, that contractComparison comes back against. Needs ROLE_BUDGETS_VIEWER. Read-only.

initialBudget any
tagDefinition any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
initialBudgets_contractComparison read

PLANNED versus CONTRACTED, per tag — the initial budget's planned amounts against the sum of contract values actually signed for that project. This is the question 'have we committed more than we budgeted, and where', and it reads directly off the contracts already in the org, so importing contracts makes it answerable without any further work. Amounts are grosze; a mixed-currency project produces a notice rather than a silently wrong total. Needs ROLE_BUDGETS_VIEWER. Read-only.

tagDefinition array
TagDefinition IRIs (or bare ids) the client is showing, e.g. /api/tag-definitions/<uuid>. Repeat for each.
id* string | integer
initialBudgets_get read

Get one initial budget by id, with its items. Needs ROLE_BUDGETS_VIEWER. Read-only.

id* string | integer
initialBudgets_list read

List initial budgets — the ORIGINAL plan for a project or investment, as opposed to the live budget it is measured against. Needs ROLE_BUDGETS_VIEWER. Read-only.

project any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
invoiceReminders_list read

List the PAYMENT REMINDERS queue — what Finance > Invoices > Payment reminders shows. One row per reminder STAGED for an overdue unpaid invoice at one escalation `level`, carrying `status` (pending, sent, dismissed or failed), `dueAt` (when the stager proposed it), `invoiceId` and `invoiceName`, `clientName`, `amountDue` with `currencyCode`, `invoiceDueDate`, `daysOverdue`, `recipientEmail`, and afterwards `sentAt` with `sentBody`, or `failedAt` with `failureReason`. THE PENDING TAB IS `status: "pending"` AND THE HISTORY TAB IS `status: "sent,dismissed,failed"` — a CSV in one argument; an unfiltered call returns every state mixed together, soonest `dueAt` first. `search` matches the invoice number and the client name. `amountDue` IS NET OF CORRECTIONS, so it is what the client is told they owe rather than the invoice's own original total. THIS IS NOT invoices_list: a reminder exists only once the daily stager has picked the invoice up, so an invoice that is overdue with no row here has nothing queued to go out for it — and conversely a row here is a letter waiting on a human, not a letter sent. Requires ROLE_ADMIN, ROLE_INVOICES_MANAGER or ROLE_DEBT_COLLECTIONS_MANAGER. NOTE that ROLE_INVOICES_VIEWER, which is enough for invoices_list, does NOT read this queue. Read-only.

order.level string
order.status string
order.sentAt string
order.dismissedAt string
order.failedAt string
status string
Filter by one or multiple statuses as a CSV value (e.g. "sent,dismissed,failed"). Single value also works.
search string
Free-text search over the reminder's invoice number and client name.
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
invoiceReminders_preview read

Read what approving reminder `id` WOULD ACTUALLY SEND, before anyone approves it: the resolved recipient, the CC list and the rendered default body. IT DOES NOT RETURN THE REMINDER, whatever the output schema says — the backend replaces the whole payload with exactly three keys, `address` ({email, name}, the client's first recorded contact), `ccs` (their remaining contacts, same shape) and `mailContent` (the default body, HTML). So `status`, `level` and `daysOverdue` come from invoiceReminders_list, never from here. It sends nothing and changes nothing: this is the compose screen's prefill, and the only honest way to answer "who is about to be emailed, and what will it say". Approving the letter is a separate call and is NOT served on every connection (#474): where it is, these three keys are what it takes, edited or unchanged — and where it is not, approving is done from Finance > Invoices > Payment reminders in the app. Either way nothing goes out because you read this. Requires ROLE_ADMIN, ROLE_INVOICES_MANAGER or ROLE_DEBT_COLLECTIONS_MANAGER. Read-only.

id* string | integer
ksef_outgoingImportSettings_get read

Read whether this org automatically imports its OUTGOING (sales) invoices from KSeF, and the date it imports from. Returns { enabled, importFromDate }. Reach for this BEFORE the update tool: the update is a full replace, so you need the current value of the field you are not changing. Only meaningful for an org whose KSeF connection is already set up — connecting KSeF needs a per-org token the client supplies and is not on this surface. Requires ROLE_INVOICES_MANAGER. Read-only.

No parameters.

leadActivities_get read

Get one lead activity (outreach touch) by id.

id* string | integer
leadActivities_list read

List a lead's outreach touches — its activity timeline (invite sent, replies, calls, follow-ups). Filter by lead to read one prospect's history. This is the structured counterpart to crmNotes_list: activities are the typed, dated touch-log; notes are freeform commentary.

lead any
contact any
type any
channel any
externalId any
threadId any
wave any
lead.memberships.list any
occurredAt.before string
occurredAt.strictly_before string
occurredAt.after string
occurredAt.strictly_after string
order.occurredAt string
order.type string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
leadContacts_get read

Get one lead contact by id.

id* string | integer
leadContacts_list read

List the contact people attached to leads. Filter by lead to read one prospect's contacts, or by email to find which lead a message came from.

lead any
email any
linkedinUrl any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
leadListMemberships_get read

Get one lead-to-list membership by id. Its status and lastContactedAt are a caller-written snapshot, not live state — see leadListMemberships_list.

id* string | integer
leadListMemberships_list read

List which leads sit on which outbound prospecting lists. Filter by list, lead or status. CAUTION: status and lastContactedAt are a SNAPSHOT written by whoever last imported or updated the membership. They are not derived, and nothing advances them when an activity is recorded — logging a wave of 529 follow-ups moves neither field — so they can be arbitrarily far behind. To answer “when did we last touch this prospect”, read the activity log instead: leadActivities_list for one lead, leadActivities_byList for a whole campaign. leadListMemberships_syncFromActivities reports that gap and can close it, but IT IS NOT AVAILABLE ON THIS CONNECTION — it is served only to the internal scope, so ask your Flowtly operator to run it rather than looking for it here.

list any
lead any
status any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
leadLists_get read

Get one outbound prospecting list by id.

id* string | integer
leadLists_list read

List outbound prospecting lists. Use it to resolve the list id that leadListMemberships_create takes.

status any
channel any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
leadLostReasons_get read

Get one lead lost-reason by id.

id* string | integer
leadLostReasons_list read

List the reasons a lead can be marked lost, in order.

order.position string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
leads_dedupeCheck read

Check whether a prospect is already in the CRM, using the same filters as leads_list (companyName, source, owner, …). Call this BEFORE leads_create: a duplicate lead splits the outreach history across two records, and nothing downstream will merge them for you.

status any
source any
owner any
client any
companyName string
linkedinUrl any
doNotContact boolean
createdAt.before string
createdAt.strictly_before string
createdAt.after string
createdAt.strictly_after string
closedAt.before string
closedAt.strictly_before string
closedAt.after string
closedAt.strictly_after string
order.createdAt string
order.companyName string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
leads_get read

Get one lead by id — company, website, source, status, owner and the client it converted to, if any.

id* string | integer
leads_list read

List leads — prospect targets, before qualification. Filter by status, source, owner, client, companyName, or createdAt/closedAt ranges. A qualified lead becomes a Client plus an open Deal via leads_convert; until then it lives only here, not in clients_list.

status any
source any
owner any
client any
companyName string
linkedinUrl any
doNotContact boolean
createdAt.before string
createdAt.strictly_before string
createdAt.after string
createdAt.strictly_after string
closedAt.before string
closedAt.strictly_before string
closedAt.after string
closedAt.strictly_after string
order.createdAt string
order.companyName string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
leadStages_get read

Get one lead stage by id.

id* string | integer
leadStages_list read

List the stages a lead moves through, in order. Leads have their own stage set — deals use stages_list, which is a different thing.

order.position string
order.label string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
locations_get read

Get one location by id — its name and office hours. Read-only.

id* string | integer
locations_list read

List the org's locations — the physical places assets sit, shown in the UI as Lokalizacja. Needs ROLE_LOCATIONS_MANAGER, which unusually gates the READ as well as the write. Read-only.

order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
organizationAddresses_get read

Get one subscription address record by id — name, street, city, postCode, country, and the tax fields. `street` carries the building number when it was entered by hand, and does not when it came from the NIP/GUS lookup. Read-only.

id* string | integer
organizationAddresses_list read

List the organization's subscription address records — the address attached to the Flowtly subscription, and the source the mail-footer {{organizationAddress}} renders from. Normally exactly one row. This is NOT the invoice seller address, which lives in the organization-billing-* config keys (configs_get) and is what invoices and KSeF read; the two are maintained separately and routinely disagree. Read both before concluding which one a customer actually edited. Read-only.

organization any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
organizationMailFooter_get read

Read the organization's outgoing-mail footer text (the block appended to mail Flowtly sends on the org's behalf).

No parameters.

organizations_get read

Get an organization by id — INCLUDING AN ORG THIS CONNECTION IS NOT BOUND TO. That is deliberate, not a leak: it is how a holding reads across its portfolio, so one connection can report on every company the authenticated user belongs to without a separate connection per company. The gate is membership — an org the user does not belong to is refused — and organizations_list is the roster of what that means for this identity. The response is the full record: config, bank accounts, positions, holiday requests and agreements. WHAT IT IS NOT is a statement about where you are working. A successful read here reads like confirmation you are in that org when you are not: writes still go to the connection's ACTIVE org, whatever id you just read — to write in this one, call organization.switch with its id first. So use organization_whoami to see where you are, confirm with tenant-scoped data (people_list, clients_list), and never start a bulk write on the strength of this call.

id* string | integer
organizations_list read

List every organisation the AUTHENTICATED USER belongs to — the PORTFOLIO this identity can read, and exactly the set organization.switch can move this connection to. Listing does not move anything: the connection stays on its ACTIVE org (organization_whoami) until you switch. Two uses. First, the portfolio: each id here can be read in full with organizations_get, which is how a holding reports across its companies from one connection. Second, WHICH ORGS COULD THIS CONNECTION WORK IN AT ALL: if the org you want is absent, this identity has no membership in it — no switch and no amount of re-consenting will produce it. If it is present, organization.switch reaches it without reconnecting. To see where you actually are, use organization_whoami, and confirm with tenant-scoped data (people_list, clients_list); this list says nothing about that. Each row carries the org's id — the 8-character instance string a connection binds to — plus its name, slug, status, modules and features.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
people_get read

Get one person/employee record by id — names, emails, phone, manager, and whether they are active.

id* string | integer
people_list read

List people/employees. Filter by isActive, reportsTo (a manager's id), projectMembers.project, or search; page with cursor. People and employees share the same id, so this is how you resolve the employee id that work time, responsibilities, project membership and permission tools all expect.

activeForStaffing boolean
isActive boolean
id any
firstname string
lastname string
reportsTo any
projectMembers.project any
exists.userId boolean
exists.reportsTo boolean
exists.companyEmail boolean
excludedFromProjects boolean
holidaySelfApproval boolean
search string
Free-text search over employee name and company email.
properties array
Allows you to reduce the response to contain only the properties you need. If your desired property is nested, you can address it using nested arrays. Example: properties[]={propertyName}&properties[]={anotherPropertyName}&properties[{nestedPropertyParent}][]={nestedProperty}
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
permissionGroups_get read

Get one permission group by id, including the ROLE_* strings it grants.

id* string | integer
permissionGroups_list read

List the org's permission groups and the roles each one grants — e.g. the "Business Owner" group grants ROLE_ADMIN. Read this before people_setPermissionGroups: the roles in the response are the authority on what a group actually permits, so you never have to guess from its name.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
pipelines_get read

Get one sales pipeline by id.

id* string | integer
pipelines_list read

List sales pipelines. A pipeline owns an ordered set of stages — read them with stages_list filtered by pipeline.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
positions_list read

List positions — the named roles (e.g. "Backend Engineer") that a project allocation fills. No filters; Position has pagination disabled, so this always returns the org's full role catalog in one call. Each item is {id, name, roles}. Use it to resolve the position name behind an allocations_list row's positionId, and to find the position id a resourcing import must match against.

order.name string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projectMembers_get read

Get one project membership by id — its employee, project and position. Ids come from projectMembers_list or the projectMembers array on projects_get.

id* string | integer
projectMembers_list read

List project memberships — WHO CAN SEE WHICH PROJECT. Filter by project (`/projects/{id}`) to read one project's roster, or by employee to read every project one person can reach; each row carries its own id, the employee, the project and the position (employee|tech-lead|account-manager|viewer). Reach for this first when someone reports a project missing from their Projects list or cannot log time against it: an empty roster, or a roster without them in it, IS the explanation — visibility is membership. It is also the id source for projectMembers_update and projectMembers_delete. Note the same person can appear several times on one project, once per position.

project any
employee any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projectMeterPrices_list read

List the client unit prices charged for metered utilities (used to price tenant utilities statements). Filters: `project` (IRI) and `utilityType` (electricity, water, gas, heat). A row WITH NO PROJECT is the organisation's DEFAULT tariff: it applies to every project that has no price row of its own. Requires ROLE_TRANSACTIONS_MANAGER. Read-only.

project any
utilityType any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projectPrices_get read

Get one project rate by id — its project, property (null = inherited by the whole project), rule, amount, currency, dateFrom and note. Requires ROLE_PROJECTS_MANAGER. Read-only.

id* string | integer
projectPrices_list read

List the rates in force ON A PROJECT — the stacked per-category amounts (base rent, service charge, operating costs) that make up what a tenant actually pays. Filter by `project` for everything on it, or by `property` for one asset's overrides. NOT PAGINATED — the whole set comes back in one response, unlike attributePrices. READ THE `property` FIELD ON EVERY ROW: null means the rate applies to every asset on the project by inheritance, and a value means it is an override for that one asset. A row with null property is not a row missing its asset. Requires ROLE_PROJECTS_MANAGER. Read-only.

project any
property any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projectTemplates_get read

Get one project template by id, including its full structure document. projectTemplates_list finds the id. Read this before projectTemplates_update — the structure is written WHOLE, so an update must send the complete document, not a fragment. Read-only.

id* string | integer
projectTemplates_list read

List the org's project templates — reusable blueprints of a project, its phases, its task lists and its tasks. Reach for this BEFORE projects_create when the same shape of project is set up repeatedly (an engagement type, an audit, an onboarding): instantiating a template builds the whole tree in one call, where projects_create makes an empty project you then have to fill by hand. The row flagged isDefault is the org's built-in template, applied to a project created with no template chosen. Read-only.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projectTransactionAttachments_list read

List cost-to-project allocations — which incoming invoice (transactionAttachment) is allocated to which project, and for how much. Filter by project or transactionAttachment. projects_costAllocations is the per-project summary of the same rows. Needs ROLE_TRANSACTIONS_MANAGER. Read-only.

transactionAttachment any
project any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
projectTransactions_list read

List transaction-to-project links — which bank transaction (income or cost) is assigned to which project, and for how much. These are the rows a budget reads as source `transaction`/`pt` for its per-project inflows and outflows; document-level allocations of invoices are projectTransactionAttachments_list, not this. Filter by project (IRI /projects/{id}, or project[] for several) to audit what sits on a project; not paginated, so one call returns every link. There is no filter by transaction: transactions_list can return each transaction's projectTransactions (the ids of its links) when you name the field in its properties argument, since it is not in the default fields, but not their project or amount; to read those, filter this tool by the project the transaction is assigned to. Needs ROLE_TRANSACTIONS_MANAGER. Read-only.

project any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
resourceRequestCandidates_get read

One recruitment candidate by id. The id comes from resourceRequestCandidates_list. Needs ROLE_HR_MANAGER. Read-only.

id* string | integer
resourceRequestCandidates_list read

The candidates put forward against hiring requests — people in a recruitment pipeline, not employees available for allocation. Filter by the request id from resourceRequests_list. Needs ROLE_HR_MANAGER. Read-only.

resourceRequest any
candidate any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
resourceRequests_get read

One hiring request by id, with its position and status. Get the id from resourceRequests_list. HR/recruitment, not resourcing allocation. Needs ROLE_HR_MANAGER. Read-only.

id* string | integer
resourceRequests_list read

Open hiring requests — a request to recruit for a position, in the HR domain. Despite the name this is NOT resourcing allocation demand: it is recruitment. Returns the collection; resourceRequests_get reads one, and resourceRequestCandidates_list gives the people put forward for it. Needs ROLE_HR_MANAGER. Read-only.

status any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
resourcingRequests_list read

Open resourcing requests — someone asking for a person to be allocated to a project, which is the demand side of resourcing. This is the flow the Resourcing UI's Requests view renders. Do NOT confuse it with resourceRequests_list: that one is HR RECRUITMENT (hiring for a position). Pair it with resourcingRequestsHistory_list for what has already been decided, and resourcingBench_get for who could satisfy a request. Needs the resourcing module and ROLE_RESOURCING_MANAGER. Read-only.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
resourcingRequestsHistory_list read

What has already happened to resourcing requests — the decision trail (confirmed, declined, changed) behind the open requests in resourcingRequests_list. Reach for it to answer 'was this already asked for and turned down?' before proposing the same allocation again. Needs the resourcing module and ROLE_RESOURCING_MANAGER. Read-only.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
project string | integer
REQUIRED unless you pass cursor (the cursor already carries it). The project whose allocation history to read: its id from projects_list (e.g. `12`) or its IRI (`/projects/12`). Returns every request, decline (with its reason), confirm and change on that project's allocations, newest first, including allocations since deleted.
responsibilities_get read

Get one responsibility by id.

id* string | integer
responsibilities_list read

List responsibilities inside a RACI group. Filter by responsibilityGroup. Responsibilities can nest via parent; people are assigned to them through responsibilityEmployees, not directly.

responsibilityGroup any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
responsibilityEmployees_get read

Get one responsibility assignment by id.

id* string | integer
responsibilityEmployees_list read

List who is assigned to which responsibility, and at what percentage. Filter by employee to read one person's entire RACI load across every group.

employee any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
responsibilityGroups_get read

Get one responsibility group by id.

id* string | integer
responsibilityGroups_list read

List responsibility groups / RACI areas — the top-level "Odpowiedzialności" items, each with an accountable person. Individual responsibilities hang underneath them.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
scheduleEmployees_get read

One schedule-to-employee assignment by id. The id comes from scheduleEmployees_list. Needs ROLE_SCHEDULES_MANAGER. Read-only.

id* string | integer
scheduleEmployees_list read

Which employees are assigned to which working-time schedules. Use it to go from a schedule (schedules_list) to its people, or to find the schedule a given employee follows. Needs ROLE_SCHEDULES_MANAGER. Read-only.

employee any
dateFrom.before string
dateFrom.strictly_before string
dateFrom.after string
dateFrom.strictly_after string
dateTo.before string
dateTo.strictly_before string
dateTo.after string
dateTo.strictly_after string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
schedulePlan_list read

The schedules in force on ONE given date — pass the date in the path. Reach for it to answer 'who is working today / on this date' without reading every schedule and resolving its ranges yourself. Unlike the other schedule reads this only needs ROLE_USER, so it is the one available to an ordinary employee. Read-only.

current boolean
Filter only newest Schedules, without a successor
date* string | integer
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
scheduleRanges_get read

One schedule time range by id. The id comes from scheduleRanges_list. Needs ROLE_SCHEDULES_MANAGER. Read-only.

id* string | integer
scheduleRanges_list read

The time ranges that make up working-time schedules — the actual hours a schedule covers. Read the parent with schedules_get first; this expands its ranges. Needs ROLE_SCHEDULES_MANAGER. Read-only.

schedule any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
schedules_get read

One working-time schedule by id, with its ranges and assigned employees. The id comes from schedules_list; scheduleRanges_list and scheduleEmployees_list read its parts. Needs ROLE_SCHEDULES_MANAGER. Read-only.

id* string | integer
schedules_list read

Working-time schedules — the shift/working patterns an org defines, NOT project allocation. Use resourcingSchedule_get for who is booked on what; use this for the working patterns themselves. schedules_get reads one by id. Needs ROLE_SCHEDULES_MANAGER. Read-only.

current boolean
Filter only newest Schedules, without a successor
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
stages_get read

Get one deal stage by id.

id* string | integer
stages_list read

List deal stages, in order. Filter by pipeline. deals_create requires a stage id from here, and moving a deal between stages is what dealStageHistories records.

pipeline any
order.position string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
tagCategories_get read

Get one tagging category by id, with its name, required flag, position, multiple (cardinality lives on the category, because the category is the field) and allowedRelations. tagCategories_list supplies the id.

id* string | integer
tagCategories_list read

List tagging CATEGORIES — the fields on the categorisation rail (#5186). A category is ONE field whose options are the union of several tag groups, not a section containing one dropdown per group. Its id is what tags_create passes as tagCategory to record which field an applied tag satisfies, which is the only way two categories drawing on the same groups stay distinguishable on read-back. Use tagCategoryGroups_list to see which groups feed each one.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
tagCategoryGroups_get read

Get one category-to-group join by id, with its tagCategory, tagGroup and position. tagCategoryGroups_list supplies the id.

id* string | integer
tagCategoryGroups_list read

List the ordered joins between tagging categories and tag groups — which groups feed which category, and in what order. Filter by tagCategory or tagGroup. This is the table to read before tagCategoryGroups_create, so a group is not attached to the same category twice.

tagCategory any
tagGroup any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
tagDefinitions_get read

Get one tag definition by id — name, label, description, level and its tag group. tagDefinitions_list supplies the id.

id* string | integer
tagDefinitions_list read

List tag definitions — the tags that can be attached to records, each inside a tag group. tags_create takes a tagDefinition id from here plus the record to attach it to.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
tagGroups_get read

Get one tag group by id, with its name and allowedRelations. tagGroups_list supplies the id.

id* string | integer
tagGroups_list read

List tag groups — the containers that organize tag definitions.

cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
tags_get read

Get one applied tag by id — its tagDefinition, the record it is on (relationName + relationId), its tagCategory and weight. tags_list supplies the id.

id* string | integer
tags_list read

List APPLIED tags — the actual links between a tag definition and a record, as opposed to tagDefinitions_list, which is the dictionary of what COULD be applied. Filter by relationName + relationId to read everything coded on one record, including each tag's tagCategory, which is what keeps two categories drawing on the same groups distinguishable on read-back (#5186). Each row's own id is what tags_delete takes. NOTE THE ONE QUESTION IT CANNOT ANSWER: there is no filter by tagDefinition, so "is anything anywhere coded with this definition?" cannot be asked directly — tagDefinitions_delete refusing is currently the reliable way to find out (flowtly-mcp#335).

relationName any
relationId any
tagDefinition any
tagCategory any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
taxRules_list read

List tax rules — the rates and the periods they apply to. Filter by taxGroup.

taxGroup any
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.
tenantTurnovers_list read

List tenant-reported monthly turnover: one row per tenant (counterparty) and calendar month, each with `period` (always the first of the month), `amount`, `currency` and `source`. Filters: `counterparty` (a counterparty id), `source`, and `period.after` / `period.before` (inclusive; `period.strictly_after` / `period.strictly_before` exclusive) as YYYY-MM-DD dates. AMOUNTS ARE COUNTS OF 1/10000 UNITS, as strings: "53000000" is 5300.00 in the row's own currency. A month with NO row means the tenant did not report it, which is not the same as a reported 0. Read-only. Nothing bills from these figures. Needs ROLE_CONTRACTS_VIEWER and the property-management module.

counterparty any
source any
period.before string
period.strictly_before string
period.after string
period.strictly_after string
cursor string
Opaque pagination token from a previous response's nextCursor. Omit for the first page. When present, other filters are ignored — the cursor already encodes them.
itemsPerPage integer
Page size (max 100). Ignored when cursor is set.