{"tools":[{"name":"list_documents","title":"List documents","description":"Lists the documents of the company (invoices, receipts, contracts…) with their status, accounting period, what Enty read from them and the bank transactions they are attached to, newest first. Use it to check whether a document is already in Enty, to find the documents of a period (period=2026-09), the ones not attached to any transaction yet (hasTransactions=false) or the ones attached to a given transaction (transactionId). To find bank transactions that still need a document, use list_transactions (GET /api/v1/banking/transactions) with hasDocuments=false instead.","inputSchema":{"type":"object","properties":{"documentId":{"description":"Only these documents: one id or several","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b90"]]},"name":{"description":"Text to find in the file name, case-insensitive, e.g. invoice","type":"string","minLength":1,"maxLength":200,"examples":["invoice"]},"status":{"description":"processing, denied or confirmed (one or several)","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","enum":["processing","denied","confirmed"]},"examples":[["denied"]]},"period":{"description":"Accounting period: YYYY (e.g. 2026) finds every period of that year; YYYY-MM (2026-09) a monthly period and YYYY-Qn (2026-Q3) a quarterly one exactly, as the response shows them. Which form a company's documents usually have depends on how it reports — whoami (GET /api/v1/me) tells (periodType); when unsure, ask for the year. Documents still being placed (period null) are not included","type":"string","pattern":"^(\\d{4})(?:-(0[1-9]|1[0-2])|-[Qq]([1-4]))?$","examples":["2026-09"]},"hasPeriod":{"description":"false = documents without a period yet (period null: Enty is still placing them by the issue date recognised on them, or none was recognised); true = documents with one","type":"boolean","examples":[false]},"createdFrom":{"description":"Uploaded on or after: a day YYYY-MM-DD (from its start, UTC) or an ISO date-time with Z or an offset, e.g. 2026-09-01","type":"string","examples":["2026-09-01"]},"createdTo":{"description":"Uploaded on or before: a day YYYY-MM-DD (to its end, UTC, inclusive) or an ISO date-time with Z or an offset, e.g. 2026-09-30","type":"string","examples":["2026-09-30"]},"transactionId":{"description":"Only documents attached to one of these bank transactions (ids from list_transactions (GET /api/v1/banking/transactions))","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f"]]},"hasTransactions":{"description":"true = attached to at least one bank transaction; false = attached to none yet","type":"boolean","examples":[false]},"counterpartyName":{"description":"Text to find in the counterparty Enty read from the document, case-insensitive, e.g. canva","type":"string","minLength":1,"maxLength":200,"examples":["canva"]},"sort":{"description":"Sort by createdAt, name; prefix the field with - for descending order. Default: -createdAt.","type":"string","enum":["createdAt","-createdAt","name","-name"],"examples":["-createdAt"]},"limit":{"description":"Items per page, 1..100, default 25","default":25,"type":"integer","minimum":1,"maximum":100},"offset":{"description":"Items to skip, default 0","default":0,"type":"integer","minimum":0}},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","description":"Id of the document; equals the id of the uploaded file","examples":["3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b90"]},"name":{"type":"string","description":"File name, e.g. invoice-2026-09.pdf"},"status":{"type":"string","enum":["processing","denied","confirmed"],"description":"processing: waiting for the accountant; denied / confirmed: the accountant decided"},"rejectionReason":{"anyOf":[{"type":"string","enum":["missing_details","unrelated_to_accounting","other"]},{"type":"null"}],"description":"Why the accountant denied it; null unless denied"},"rejectionComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The accountant's comment on the denial"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Document type, e.g. incoming, outcoming (also an invoice issued in Enty), invoice_from_enty (an invoice from Enty to the company) or statement (a bank statement, which cannot be attached to transactions); null until the accountant or recognition assigns one"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the document entered Enty, e.g. manual (uploaded), mail, invoicing (issued in Enty), chargebee (an invoice from Enty) or banking (a bank statement)"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Accounting period the document belongs to: YYYY-MM for a month (e.g. 2026-09), YYYY-Qn for a quarter (2026-Q3) or YYYY for a year (2026), depending on how the company reports. null while Enty is still placing the document by the issue date recognised on it, and stays null when no issue date could be recognised — set the period in the Enty app then","examples":["2026-09"]},"periodType":{"anyOf":[{"type":"string","enum":["month","quarter","year"]},{"type":"null"}],"description":"month, quarter or year: what kind of period `period` is; null when period is null"},"createdAt":{"type":"string","format":"date-time","description":"When the document was uploaded, ISO date-time in UTC"},"isRead":{"type":"boolean","description":"Whether the accountant has opened the document"},"recognized":{"anyOf":[{"type":"object","properties":{"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Issuer or recipient, e.g. Canva Pty Ltd"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Total amount, e.g. 49.9"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 4217 code, e.g. EUR"},"issueDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Issue date, ISO date-time"},"documentType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Where the document came from: uploaded for one uploaded or received by mail (it stays uploaded once recognition finishes); invoice or credit_note for one issued in Enty invoicing; hr for an HR document","examples":["uploaded"]}},"required":["counterpartyName","amount","currency","issueDate","documentType"],"additionalProperties":false},{"type":"null"}],"description":"What Enty read from the document. Present right after the upload with empty values (amount 0) and filled in once recognition finishes; null when Enty filed the document without reading it (e.g. a file uploaded with \"invoice_for_\" in its name), and such a document cannot be attached to transactions"},"transactionIds":{"type":"array","items":{"type":"string"},"description":"Bank transactions the document is attached to; empty when none"}},"required":["documentId","name","status","rejectionReason","rejectionComment","type","source","period","periodType","createdAt","isRead","recognized","transactionIds"],"additionalProperties":false}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"description":"Number of items in this page"},"offset":{"type":"integer","minimum":0,"description":"Offset that produced this page"},"limit":{"type":"integer","minimum":1,"description":"Limit that produced this page"},"total":{"type":"integer","minimum":0,"description":"Number of items matching the filters, across all pages"},"hasMore":{"type":"boolean","description":"Whether more items follow this page; request them with offset = offset + count"}},"required":["count","offset","limit","total","hasMore"],"additionalProperties":false,"description":"Pagination metadata"}},"required":["items","meta"],"additionalProperties":false},"annotations":{"title":"List documents","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"accounting.documents.list","io.enty/access":"read","io.enty/rest":"GET /api/v1/accounting/documents"}},{"name":"upload_document","title":"Upload a document","description":"Uploads a document — an invoice, receipt or contract — to the company's accounting in Enty, where the accountant processes it. Pass transactionId to attach it to that bank transaction in the same call (or attach it later with attach_document (PUT /api/v1/banking/transactions/{transactionId}/documents/{documentId})). Pass period to file it into a given accounting period. Without one, the document of a VAT-registered company is placed by the issue date Enty recognises on it; for a company without a VAT number it goes into the current year, so pass period for a document of an earlier year. Returns the document: it starts in status processing, and transactionIds shows the attachment. A file with exactly the same content as an existing document is refused before anything is stored.\n\nThe file travels outside the tool call: call create_upload_url with the file name, PUT the file (PDF, PNG or JPEG, at most 10 MB) to the uploadUrl it returns, then call this tool with that uploadId; the name given there becomes the document name. Never put file contents into tool arguments.\n\nErrors besides the standard ones:\n- 409 DUPLICATE_DOCUMENT — a file with exactly the same content is already a document of the company; nothing new is stored, and existingDocumentId names that document when known — use it instead (attach it, if that was the goal)\n- 503 FILE_STORAGE_UNAVAILABLE — the file could not be stored right now and nothing was filed; retry the same request later, with the same idempotency key\n- 404 UPLOAD_NOT_FOUND — the upload does not exist, has expired, was already filed, or belongs to another user or company; create a new one with create_upload_url\n- 409 UPLOAD_NOT_RECEIVED — no file has been sent to the uploadUrl yet; PUT the file there first, then retry\n- 409 UPLOAD_ALREADY_USED — the uploaded file was already filed; documentId names the document it became — use that instead of filing it again\n- 409 UPLOAD_IN_USE — the upload is being received or filed by another request; retry after Retry-After seconds\n- 503 UPLOADS_BUSY — the server is receiving too many files right now; retry after Retry-After seconds\n- 503 UPLOAD_STAGING_UNAVAILABLE — uploaded files cannot be kept right now and nothing was changed; retry after Retry-After seconds\n- DOCUMENT_CREATED_NOT_ATTACHED — the document was uploaded but attaching it to the transaction failed (the status is that of the failure); the documentId member names the document — attach it with attach_document (PUT /api/v1/banking/transactions/{transactionId}/documents/{documentId}) instead of uploading it again\n- 409 DOCUMENT_NOT_ATTACHABLE — the document was uploaded, but Enty filed it without reading it (for example as a bank statement), so it cannot be attached to a transaction; the documentId member names it — it stays among the documents, do not upload it again","inputSchema":{"type":"object","properties":{"uploadId":{"type":"string","pattern":"^upl_[A-Za-z0-9_-]{22}$","description":"Id of a file uploaded beforehand: create it with create_upload_url, PUT the file to its uploadUrl, then pass the id here","examples":["upl_7Hq2LmX9pRt4VbN8sKe3Wd"]},"period":{"description":"Accounting period to file the document into: YYYY-MM (e.g. 2026-09), YYYY-Qn (2026-Q3) or YYYY (2026). For YYYY-MM and YYYY-Qn the company's own period type decides the folder: without a VAT number it is the annual period of that year, a quarterly company gets the quarter (of a month too), a monthly one the month (for a quarter: its first month). YYYY files the document into the annual period of that year for every company — for a VAT-registered one that is no month or quarter, and the document is not moved by its date later. Omit period to let Enty place the document: for a VAT-registered company by the issue date recognised on it (period is null until then, and stays null when no issue date is recognised); for a company without a VAT number into the current year — pass period for documents of an earlier year","type":"string","pattern":"^(\\d{4})(?:-(0[1-9]|1[0-2])|-[Qq]([1-4]))?$","examples":["2026-09"]},"transactionId":{"description":"Bank transaction to attach the new document to, from list_transactions (GET /api/v1/banking/transactions); it is checked before anything is stored. Omit it to upload the document on its own","type":"string","format":"uuid","examples":["8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f"]},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"pattern":"\\S","description":"Optional. A key you generate once per logical action (a UUID) and reuse when retrying, so a retried call does not apply the change twice."}},"additionalProperties":false,"required":["uploadId"]},"outputSchema":{"type":"object","properties":{"documentId":{"type":"string","description":"Id of the document; equals the id of the uploaded file","examples":["3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b90"]},"name":{"type":"string","description":"File name, e.g. invoice-2026-09.pdf"},"status":{"type":"string","enum":["processing","denied","confirmed"],"description":"processing: waiting for the accountant; denied / confirmed: the accountant decided"},"rejectionReason":{"anyOf":[{"type":"string","enum":["missing_details","unrelated_to_accounting","other"]},{"type":"null"}],"description":"Why the accountant denied it; null unless denied"},"rejectionComment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The accountant's comment on the denial"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Document type, e.g. incoming, outcoming (also an invoice issued in Enty), invoice_from_enty (an invoice from Enty to the company) or statement (a bank statement, which cannot be attached to transactions); null until the accountant or recognition assigns one"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"How the document entered Enty, e.g. manual (uploaded), mail, invoicing (issued in Enty), chargebee (an invoice from Enty) or banking (a bank statement)"},"period":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Accounting period the document belongs to: YYYY-MM for a month (e.g. 2026-09), YYYY-Qn for a quarter (2026-Q3) or YYYY for a year (2026), depending on how the company reports. null while Enty is still placing the document by the issue date recognised on it, and stays null when no issue date could be recognised — set the period in the Enty app then","examples":["2026-09"]},"periodType":{"anyOf":[{"type":"string","enum":["month","quarter","year"]},{"type":"null"}],"description":"month, quarter or year: what kind of period `period` is; null when period is null"},"createdAt":{"type":"string","format":"date-time","description":"When the document was uploaded, ISO date-time in UTC"},"isRead":{"type":"boolean","description":"Whether the accountant has opened the document"},"recognized":{"anyOf":[{"type":"object","properties":{"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Issuer or recipient, e.g. Canva Pty Ltd"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Total amount, e.g. 49.9"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 4217 code, e.g. EUR"},"issueDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Issue date, ISO date-time"},"documentType":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Where the document came from: uploaded for one uploaded or received by mail (it stays uploaded once recognition finishes); invoice or credit_note for one issued in Enty invoicing; hr for an HR document","examples":["uploaded"]}},"required":["counterpartyName","amount","currency","issueDate","documentType"],"additionalProperties":false},{"type":"null"}],"description":"What Enty read from the document. Present right after the upload with empty values (amount 0) and filled in once recognition finishes; null when Enty filed the document without reading it (e.g. a file uploaded with \"invoice_for_\" in its name), and such a document cannot be attached to transactions"},"transactionIds":{"type":"array","items":{"type":"string"},"description":"Bank transactions the document is attached to; empty when none"}},"required":["documentId","name","status","rejectionReason","rejectionComment","type","source","period","periodType","createdAt","isRead","recognized","transactionIds"],"additionalProperties":false},"annotations":{"title":"Upload a document","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"accounting.documents.upload","io.enty/access":"write","io.enty/rest":"POST /api/v1/accounting/documents"}},{"name":"list_bank_accounts","title":"List bank accounts","description":"Lists the company's bank accounts: the ones synced from a bank, the ones added by hand and the cash account. Use it to get the accountId that list_transactions (GET /api/v1/banking/transactions) filters by (every account listed here is accepted there, a disconnected one too), or to see which bank connections no longer deliver new transactions (connectionStatus=disconnected). Returns the name, bank, IBAN, currency, kind and connection status of each account; usually all of them fit on one page.","inputSchema":{"type":"object","properties":{"accountId":{"description":"One or several account ids, e.g. 5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9"]]},"name":{"description":"Part of the account name, case-insensitive, e.g. current","type":"string","minLength":1,"maxLength":200,"examples":["current"]},"bankName":{"description":"Part of the bank name, case-insensitive, e.g. lhv","type":"string","minLength":1,"maxLength":200,"examples":["lhv"]},"iban":{"description":"Part of the IBAN or account number, spaces ignored, e.g. EE38 2200","type":"string","minLength":1,"maxLength":64,"examples":["EE38 2200"]},"currency":{"description":"One or several ISO 4217 currency codes, any case, e.g. EUR","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":3,"maxLength":3},"examples":[["EUR"]]},"kind":{"description":"One or several of bank (synced from a bank), manual (added by hand) and cash, e.g. manual and cash","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","enum":["bank","manual","cash"]},"examples":[["manual","cash"]]},"connectionStatus":{"description":"connected or disconnected, e.g. disconnected to find bank connections to renew; manual and cash accounts have no connection and never match","type":"string","enum":["connected","disconnected"],"examples":["disconnected"]},"isDefault":{"description":"true = only the default account, whose payment details go on invoices; false = all the others","type":"boolean","examples":[true]},"sort":{"description":"Sort by name, bankName, currency, createdAt; prefix the field with - for descending order. Without sort: the default account first, then the others by name.","type":"string","enum":["name","-name","bankName","-bankName","currency","-currency","createdAt","-createdAt"],"examples":["-name"]},"limit":{"description":"Items per page, 1..100, default 100","default":100,"type":"integer","minimum":1,"maximum":100},"offset":{"description":"Items to skip, default 0","default":0,"type":"integer","minimum":0}},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"accountId":{"type":"string","description":"Id of the account; use it as accountId in list_transactions (GET /api/v1/banking/transactions)","examples":["5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the account in Enty, the accountName its transactions carry, e.g. LHV Current Account EUR","examples":["LHV Current Account EUR"]},"bankName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the bank, e.g. LHV Pank"},"iban":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"IBAN as stored, e.g. EE382200221020145685; for some accounts synced from a bank that has no IBAN it holds the account number"},"swift":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SWIFT/BIC code of the bank, e.g. LHVBEE22"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO 4217 code, e.g. EUR; null when a manual account was added without one"},"kind":{"type":"string","enum":["bank","manual","cash"],"description":"bank — synced from the bank; manual — added by hand in Enty, its transactions are imported from statements; cash — the cash account"},"connectionStatus":{"anyOf":[{"type":"string","enum":["connected","disconnected"]},{"type":"null"}],"description":"For bank accounts: connected, or disconnected — no new transactions arrive until the bank is reconnected in the Enty web app (the transactions already there stay listable). null for manual and cash accounts"},"isDefault":{"type":"boolean","description":"Whether it is the company's default account, whose payment details go on invoices; a company may have none"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the account was added to Enty, e.g. 2026-01-15T09:30:00.000Z"}},"required":["accountId","name","bankName","iban","swift","currency","kind","connectionStatus","isDefault","createdAt"],"additionalProperties":false}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"description":"Number of items in this page"},"offset":{"type":"integer","minimum":0,"description":"Offset that produced this page"},"limit":{"type":"integer","minimum":1,"description":"Limit that produced this page"},"total":{"type":"integer","minimum":0,"description":"Number of items matching the filters, across all pages"},"hasMore":{"type":"boolean","description":"Whether more items follow this page; request them with offset = offset + count"}},"required":["count","offset","limit","total","hasMore"],"additionalProperties":false,"description":"Pagination metadata"}},"required":["items","meta"],"additionalProperties":false},"annotations":{"title":"List bank accounts","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"banking.accounts.list","io.enty/access":"read","io.enty/rest":"GET /api/v1/banking/accounts"}},{"name":"list_categories","title":"List transaction categories","description":"Lists the company's transaction categories, one row per category with its group and its type (incoming or outgoing). Use it to get the categoryId to set with update_transaction (PATCH /api/v1/banking/transactions/{transactionId}) — pass type=outgoing for an expense and type=incoming for a payment received, since a transaction takes only a category of its own type — or to filter list_transactions (GET /api/v1/banking/transactions) by category. Returns the name, group, type and confirmation of each category; usually all of them fit on one page.","inputSchema":{"type":"object","properties":{"categoryId":{"description":"One or several category ids, e.g. 2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d"]]},"name":{"description":"Part of the category name, case-insensitive, e.g. software","type":"string","minLength":1,"maxLength":200,"examples":["software"]},"type":{"description":"incoming or outgoing: the direction of the transactions a category applies to. A transaction takes only a category of its own type, so use the type of the transaction, e.g. outgoing","type":"string","enum":["incoming","outgoing"],"examples":["outgoing"]},"groupId":{"description":"Id of a category group, e.g. 7d4e5f6a-8b90-4e8a-9c21-3f2a9c1e5b7d","type":"string","format":"uuid","examples":["7d4e5f6a-8b90-4e8a-9c21-3f2a9c1e5b7d"]},"groupName":{"description":"Part of the group name, case-insensitive, e.g. office","type":"string","minLength":1,"maxLength":200,"examples":["office"]},"confirmed":{"description":"true = categories the company confirmed; false = suggested ones it has not confirmed yet","type":"boolean","examples":[true]},"sort":{"description":"Sort by name, groupName, type; prefix the field with - for descending order. Without sort: by group name, then by category name.","type":"string","enum":["name","-name","groupName","-groupName","type","-type"],"examples":["-name"]},"limit":{"description":"Items per page, 1..100, default 100","default":100,"type":"integer","minimum":1,"maximum":100},"offset":{"description":"Items to skip, default 0","default":0,"type":"integer","minimum":0}},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":"string","description":"Id of the category; use it as categoryId in update_transaction (PATCH /api/v1/banking/transactions/{transactionId}) and list_transactions (GET /api/v1/banking/transactions)","examples":["2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d"]},"name":{"type":"string","description":"Name of the category, e.g. Software"},"colour":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Colour the Enty app shows it in, e.g. #4F46E5"},"type":{"type":"string","description":"incoming or outgoing — the direction of the transactions it applies to","examples":["outgoing"]},"groupId":{"type":"string","description":"Id of the group the category belongs to"},"groupName":{"type":"string","description":"Name of that group, e.g. Office and IT"},"confirmed":{"type":"boolean","description":"Whether the company confirmed the category; unconfirmed ones are suggestions and can still be assigned"},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the category was created, ISO date-time"}},"required":["categoryId","name","colour","type","groupId","groupName","confirmed","createdAt"],"additionalProperties":false}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"description":"Number of items in this page"},"offset":{"type":"integer","minimum":0,"description":"Offset that produced this page"},"limit":{"type":"integer","minimum":1,"description":"Limit that produced this page"},"total":{"type":"integer","minimum":0,"description":"Number of items matching the filters, across all pages"},"hasMore":{"type":"boolean","description":"Whether more items follow this page; request them with offset = offset + count"}},"required":["count","offset","limit","total","hasMore"],"additionalProperties":false,"description":"Pagination metadata"}},"required":["items","meta"],"additionalProperties":false},"annotations":{"title":"List transaction categories","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"banking.categories.list","io.enty/access":"read","io.enty/rest":"GET /api/v1/banking/categories"}},{"name":"attach_document","title":"Attach a document to a bank transaction","description":"Attaches a document already in Enty (from list_documents (GET /api/v1/accounting/documents) or upload_document (POST /api/v1/accounting/documents)) to a bank transaction. Invoices issued in Enty and Enty's own invoices to the company can be attached; bank statements cannot. Attaching the same pair again is harmless. Returns the transaction with its documents. To upload a new file and attach it in one call, use upload_document (POST /api/v1/accounting/documents) with transactionId; for several pairs, attach_documents (POST /api/v1/banking/transactions/batch-attach).\n\nErrors besides the standard ones:\n- 409 DOCUMENT_NOT_ATTACHABLE — the document cannot be attached to a transaction: it is a bank statement (type statement or source banking, or a file uploaded as the statement of a bank account or imported as one by the accountant) — bank statements cannot be attached — or Enty filed it without reading it (recognized is null). Invoices issued in Enty and Enty's own invoices to the company can be attached","inputSchema":{"type":"object","properties":{"transactionId":{"type":"string","format":"uuid","description":"Id of a bank transaction of the company, from list_transactions (GET /api/v1/banking/transactions)","examples":["8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f"]},"documentId":{"type":"string","format":"uuid","description":"Id of a document of the company, from list_documents (GET /api/v1/accounting/documents)","examples":["3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b90"]},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"pattern":"\\S","description":"Optional. A key you generate once per logical action (a UUID) and reuse when retrying, so a retried call does not apply the change twice."}},"required":["transactionId","documentId"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the transaction"},"accountId":{"type":"string","description":"Bank account the transaction belongs to, see list_bank_accounts (GET /api/v1/banking/accounts)"},"accountName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of that account, e.g. LHV Current Account EUR"},"type":{"type":"string","enum":["incoming","outgoing"],"description":"incoming (money received) or outgoing (money paid), from the sign of amount"},"amount":{"type":"number","description":"Signed amount in the transaction currency, e.g. -49.90; negative for outgoing"},"currency":{"type":"string","description":"ISO 4217 code, e.g. EUR"},"transactionDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the bank posted the transaction, or the payment date (bookingDate) when the bank gives none; ISO date-time in UTC, e.g. 2026-09-15T00:00:00.000Z. dateFrom and dateTo filter on it"},"bookingDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the payment was made, as the bank reports it (for a transaction created by hand or imported, the date given there); ISO date-time in UTC, always set"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"PROCESSED (settled) or PENDING (a card payment the bank has not settled yet); null for some older transactions"},"origin":{"type":"string","enum":["bank","import"],"description":"bank: synchronised from the bank; import: created by hand or imported from a file"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payment details, as the bank statement gives them unless the company changed them"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text comment of the company"},"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned counterparty, or the payer/payee name from the statement"},"counterpartyId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned counterparty, see list_counterparties (GET /api/v1/invoicing/counterparties); null when none is assigned"},"categoryId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned category, see list_categories (GET /api/v1/banking/categories); null when none"},"categoryName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned category, e.g. Software"},"includeTransaction":{"type":"boolean","description":"Whether the transaction counts in the finance reports of the Enty app"},"docNeeded":{"type":"boolean","description":"true = this transaction requires a supporting document (it stays true after one is attached); false = no document is needed. To find transactions still missing one, use hasDocuments=false in list_transactions (GET /api/v1/banking/transactions)"},"reasonNotNeeded":{"anyOf":[{"type":"string","enum":["bank_or_platform_fee","e_commerce_payout","government_or_tax_payment","internal_transfer","salary_or_director_payment","bank_interest","cashback"]},{"type":"null"}],"description":"Why no document is needed, when the company said so: bank_or_platform_fee — a fee of the bank or a payment platform; e_commerce_payout — a payout from a shop or marketplace platform (Stripe, PayPal, Amazon…); government_or_tax_payment — a tax or a state fee; internal_transfer — a transfer between accounts of the company; salary_or_director_payment — a salary or a payment to the director; bank_interest — interest paid by the bank; cashback — a cashback credit. null otherwise"},"noSupportingDocument":{"type":"boolean","description":"true = the company marked in the Enty app that no supporting document exists for this transaction; it is then left out of hasDocuments=false"},"documentsStatus":{"anyOf":[{"type":"string","enum":["processing","denied","confirmed"]},{"type":"null"}],"description":"Worst status among the attached documents (denied, then processing, then confirmed); null when nothing is attached"},"documents":{"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","description":"Id of the document"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File name of the document, e.g. invoice-2026-09.pdf"}},"required":["documentId","name"],"additionalProperties":false},"description":"Documents attached to the transaction"}},"required":["transactionId","accountId","accountName","type","amount","currency","transactionDate","bookingDate","status","origin","description","comment","counterpartyName","counterpartyId","categoryId","categoryName","includeTransaction","docNeeded","reasonNotNeeded","noSupportingDocument","documentsStatus","documents"],"additionalProperties":false},"annotations":{"title":"Attach a document to a bank transaction","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"banking.transactionDocuments.attach","io.enty/access":"write","io.enty/rest":"PUT /api/v1/banking/transactions/{transactionId}/documents/{documentId}"}},{"name":"attach_documents","title":"Attach documents to bank transactions","description":"Attaches documents already in Enty to bank transactions, up to 50 transaction–document pairs per call (several documents may go to one transaction). Invoices issued in Enty and Enty's own invoices to the company can be attached; bank statements cannot. Returns one result per pair, in input order: the transaction with its documents, or the error of that pair. For a single pair, attach_document (PUT /api/v1/banking/transactions/{transactionId}/documents/{documentId}) is simpler.\n\nEach item is applied on its own; check results[].status for every item.\n\nErrors besides the standard ones (per item in results[].error.code unless an HTTP status is given):\n- DOCUMENT_NOT_ATTACHABLE — the document cannot be attached to a transaction: it is a bank statement (type statement or source banking, or a file uploaded as the statement of a bank account or imported as one by the accountant) — bank statements cannot be attached — or Enty filed it without reading it (recognized is null). Invoices issued in Enty and Enty's own invoices to the company can be attached","inputSchema":{"type":"object","properties":{"items":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"transactionId":{"type":"string","format":"uuid","description":"Id of a bank transaction of the company, from list_transactions (GET /api/v1/banking/transactions)","examples":["8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f"]},"documentId":{"type":"string","format":"uuid","description":"Id of a document of the company, from list_documents (GET /api/v1/accounting/documents)","examples":["3f2a9c1e-5b7d-4e8a-9c21-7d4e5f6a8b90"]}},"required":["transactionId","documentId"],"additionalProperties":false},"description":"Transaction–document pairs to attach, 1..50 per request"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"pattern":"\\S","description":"Optional. A key you generate once per logical action (a UUID) and reuse when retrying, so a retried call does not apply the change twice."}},"required":["items"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"results":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"index":{"type":"integer","minimum":0},"status":{"type":"string","const":"ok"},"item":{"type":"object","properties":{"transactionId":{"type":"string"},"documentId":{"type":"string"},"transaction":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the transaction"},"accountId":{"type":"string","description":"Bank account the transaction belongs to, see list_bank_accounts (GET /api/v1/banking/accounts)"},"accountName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of that account, e.g. LHV Current Account EUR"},"type":{"type":"string","enum":["incoming","outgoing"],"description":"incoming (money received) or outgoing (money paid), from the sign of amount"},"amount":{"type":"number","description":"Signed amount in the transaction currency, e.g. -49.90; negative for outgoing"},"currency":{"type":"string","description":"ISO 4217 code, e.g. EUR"},"transactionDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the bank posted the transaction, or the payment date (bookingDate) when the bank gives none; ISO date-time in UTC, e.g. 2026-09-15T00:00:00.000Z. dateFrom and dateTo filter on it"},"bookingDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the payment was made, as the bank reports it (for a transaction created by hand or imported, the date given there); ISO date-time in UTC, always set"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"PROCESSED (settled) or PENDING (a card payment the bank has not settled yet); null for some older transactions"},"origin":{"type":"string","enum":["bank","import"],"description":"bank: synchronised from the bank; import: created by hand or imported from a file"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payment details, as the bank statement gives them unless the company changed them"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text comment of the company"},"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned counterparty, or the payer/payee name from the statement"},"counterpartyId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned counterparty, see list_counterparties (GET /api/v1/invoicing/counterparties); null when none is assigned"},"categoryId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned category, see list_categories (GET /api/v1/banking/categories); null when none"},"categoryName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned category, e.g. Software"},"includeTransaction":{"type":"boolean","description":"Whether the transaction counts in the finance reports of the Enty app"},"docNeeded":{"type":"boolean","description":"true = this transaction requires a supporting document (it stays true after one is attached); false = no document is needed. To find transactions still missing one, use hasDocuments=false in list_transactions (GET /api/v1/banking/transactions)"},"reasonNotNeeded":{"anyOf":[{"type":"string","enum":["bank_or_platform_fee","e_commerce_payout","government_or_tax_payment","internal_transfer","salary_or_director_payment","bank_interest","cashback"]},{"type":"null"}],"description":"Why no document is needed, when the company said so: bank_or_platform_fee — a fee of the bank or a payment platform; e_commerce_payout — a payout from a shop or marketplace platform (Stripe, PayPal, Amazon…); government_or_tax_payment — a tax or a state fee; internal_transfer — a transfer between accounts of the company; salary_or_director_payment — a salary or a payment to the director; bank_interest — interest paid by the bank; cashback — a cashback credit. null otherwise"},"noSupportingDocument":{"type":"boolean","description":"true = the company marked in the Enty app that no supporting document exists for this transaction; it is then left out of hasDocuments=false"},"documentsStatus":{"anyOf":[{"type":"string","enum":["processing","denied","confirmed"]},{"type":"null"}],"description":"Worst status among the attached documents (denied, then processing, then confirmed); null when nothing is attached"},"documents":{"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","description":"Id of the document"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File name of the document, e.g. invoice-2026-09.pdf"}},"required":["documentId","name"],"additionalProperties":false},"description":"Documents attached to the transaction"}},"required":["transactionId","accountId","accountName","type","amount","currency","transactionDate","bookingDate","status","origin","description","comment","counterpartyName","counterpartyId","categoryId","categoryName","includeTransaction","docNeeded","reasonNotNeeded","noSupportingDocument","documentsStatus","documents"],"additionalProperties":false}},"required":["transactionId","documentId","transaction"],"additionalProperties":false}},"required":["index","status","item"],"additionalProperties":false},{"type":"object","properties":{"index":{"type":"integer","minimum":0},"status":{"type":"string","const":"error"},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code, same vocabulary as problem+json"},"title":{"type":"string"},"detail":{"type":"string","description":"What to change for this item to succeed"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}},"required":["path","code","message"],"additionalProperties":false}},"extensions":{"description":"Extra machine-readable data of the code, when it has any","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["code","title","detail"],"additionalProperties":false}},"required":["index","status","error"],"additionalProperties":false}]},"description":"One entry per input item, in input order"},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0}},"required":["total","succeeded","failed"],"additionalProperties":false}},"required":["results","meta"],"additionalProperties":false},"annotations":{"title":"Attach documents to bank transactions","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"banking.transactionDocuments.batchAttach","io.enty/access":"write","io.enty/rest":"POST /api/v1/banking/transactions/batch-attach"}},{"name":"update_transactions","title":"Update several bank transactions","description":"Changes up to 50 bank transactions in one call — the same fields as update_transaction (PATCH /api/v1/banking/transactions/{transactionId}), one item per transaction. Returns one result per item, in input order: the updated transaction, or the error of that item.\n\nEach item is applied on its own; check results[].status for every item.\n\nErrors besides the standard ones (per item in results[].error.code unless an HTTP status is given):\n- CATEGORY_DIRECTION_MISMATCH — the category applies to transactions of the other direction (its type must equal the transaction type) and nothing was saved; pick a category from list_categories (GET /api/v1/banking/categories) with type=<the transaction type>\n- PARTIALLY_APPLIED — the other fields sent were saved but docNeeded (and reasonNotNeeded) was not; extensions.applied names the fields saved, e.g. [\"comment\", \"categoryId\"], and extensions.failed is [\"docNeeded\"] — retry with only docNeeded and reasonNotNeeded\n- BAD_USER_INPUT — the date of a transaction that came from the bank cannot be changed; only transactions created by hand or imported from a file accept date","inputSchema":{"type":"object","properties":{"items":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"transactionId":{"type":"string","format":"uuid","description":"Id of a bank transaction of the company, from list_transactions (GET /api/v1/banking/transactions)","examples":["8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f"]},"comment":{"description":"Free-text comment of the company, e.g. Team offsite in Tartu; null clears it","examples":["Annual Canva subscription for the design team"],"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"description":{"description":"Payment details shown as the description of the transaction, e.g. Invoice 2026-118; null clears them","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"date":{"description":"New transaction date, YYYY-MM-DD, e.g. 2026-09-14; only transactions created by hand or imported from a file (origin import) accept it","type":"string","format":"date"},"categoryId":{"description":"Category to assign, from list_categories (GET /api/v1/banking/categories) with type=<the transaction type>: a category applies only to transactions of its direction","examples":["2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d"],"type":"string","format":"uuid"},"counterpartyId":{"description":"Counterparty to assign, from list_counterparties (GET /api/v1/invoicing/counterparties); null removes the assigned one","examples":["9f8e7d6c-5b4a-4c3d-8e2f-1a0b9c8d7e6f"],"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"docNeeded":{"description":"false = no document will be provided for this transaction (send reasonNotNeeded with it); true = it requires a document again","type":"boolean"},"reasonNotNeeded":{"description":"Why no document is needed; required with docNeeded: false. bank_or_platform_fee — a fee of the bank or a payment platform; e_commerce_payout — a payout from a shop or marketplace platform (Stripe, PayPal, Amazon…); government_or_tax_payment — a tax or a state fee; internal_transfer — a transfer between accounts of the company; salary_or_director_payment — a salary or a payment to the director; bank_interest — interest paid by the bank; cashback — a cashback credit","examples":["bank_or_platform_fee"],"type":"string","enum":["bank_or_platform_fee","e_commerce_payout","government_or_tax_payment","internal_transfer","salary_or_director_payment","bank_interest","cashback"]}},"required":["transactionId"],"additionalProperties":false},"description":"Transactions to change, 1..50 per request"},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"pattern":"\\S","description":"Optional. A key you generate once per logical action (a UUID) and reuse when retrying, so a retried call does not apply the change twice."}},"required":["items"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"results":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"index":{"type":"integer","minimum":0},"status":{"type":"string","const":"ok"},"item":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the transaction"},"accountId":{"type":"string","description":"Bank account the transaction belongs to, see list_bank_accounts (GET /api/v1/banking/accounts)"},"accountName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of that account, e.g. LHV Current Account EUR"},"type":{"type":"string","enum":["incoming","outgoing"],"description":"incoming (money received) or outgoing (money paid), from the sign of amount"},"amount":{"type":"number","description":"Signed amount in the transaction currency, e.g. -49.90; negative for outgoing"},"currency":{"type":"string","description":"ISO 4217 code, e.g. EUR"},"transactionDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the bank posted the transaction, or the payment date (bookingDate) when the bank gives none; ISO date-time in UTC, e.g. 2026-09-15T00:00:00.000Z. dateFrom and dateTo filter on it"},"bookingDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the payment was made, as the bank reports it (for a transaction created by hand or imported, the date given there); ISO date-time in UTC, always set"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"PROCESSED (settled) or PENDING (a card payment the bank has not settled yet); null for some older transactions"},"origin":{"type":"string","enum":["bank","import"],"description":"bank: synchronised from the bank; import: created by hand or imported from a file"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payment details, as the bank statement gives them unless the company changed them"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text comment of the company"},"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned counterparty, or the payer/payee name from the statement"},"counterpartyId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned counterparty, see list_counterparties (GET /api/v1/invoicing/counterparties); null when none is assigned"},"categoryId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned category, see list_categories (GET /api/v1/banking/categories); null when none"},"categoryName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned category, e.g. Software"},"includeTransaction":{"type":"boolean","description":"Whether the transaction counts in the finance reports of the Enty app"},"docNeeded":{"type":"boolean","description":"true = this transaction requires a supporting document (it stays true after one is attached); false = no document is needed. To find transactions still missing one, use hasDocuments=false in list_transactions (GET /api/v1/banking/transactions)"},"reasonNotNeeded":{"anyOf":[{"type":"string","enum":["bank_or_platform_fee","e_commerce_payout","government_or_tax_payment","internal_transfer","salary_or_director_payment","bank_interest","cashback"]},{"type":"null"}],"description":"Why no document is needed, when the company said so: bank_or_platform_fee — a fee of the bank or a payment platform; e_commerce_payout — a payout from a shop or marketplace platform (Stripe, PayPal, Amazon…); government_or_tax_payment — a tax or a state fee; internal_transfer — a transfer between accounts of the company; salary_or_director_payment — a salary or a payment to the director; bank_interest — interest paid by the bank; cashback — a cashback credit. null otherwise"},"noSupportingDocument":{"type":"boolean","description":"true = the company marked in the Enty app that no supporting document exists for this transaction; it is then left out of hasDocuments=false"},"documentsStatus":{"anyOf":[{"type":"string","enum":["processing","denied","confirmed"]},{"type":"null"}],"description":"Worst status among the attached documents (denied, then processing, then confirmed); null when nothing is attached"},"documents":{"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","description":"Id of the document"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File name of the document, e.g. invoice-2026-09.pdf"}},"required":["documentId","name"],"additionalProperties":false},"description":"Documents attached to the transaction"}},"required":["transactionId","accountId","accountName","type","amount","currency","transactionDate","bookingDate","status","origin","description","comment","counterpartyName","counterpartyId","categoryId","categoryName","includeTransaction","docNeeded","reasonNotNeeded","noSupportingDocument","documentsStatus","documents"],"additionalProperties":false}},"required":["index","status","item"],"additionalProperties":false},{"type":"object","properties":{"index":{"type":"integer","minimum":0},"status":{"type":"string","const":"error"},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable error code, same vocabulary as problem+json"},"title":{"type":"string"},"detail":{"type":"string","description":"What to change for this item to succeed"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}},"required":["path","code","message"],"additionalProperties":false}},"extensions":{"description":"Extra machine-readable data of the code, when it has any","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["code","title","detail"],"additionalProperties":false}},"required":["index","status","error"],"additionalProperties":false}]},"description":"One entry per input item, in input order"},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0},"succeeded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0}},"required":["total","succeeded","failed"],"additionalProperties":false}},"required":["results","meta"],"additionalProperties":false},"annotations":{"title":"Update several bank transactions","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"banking.transactions.batchUpdate","io.enty/access":"write","io.enty/rest":"POST /api/v1/banking/transactions/batch-update"}},{"name":"list_transactions","title":"List bank transactions","description":"Lists the bank transactions of the company across all its bank accounts, newest first, with amount, counterparty, category and attached documents. For the transactions still missing a document use hasDocuments=false — \"September transactions without documents\" is dateFrom=2026-09-01&dateTo=2026-09-30&hasDocuments=false. Narrow by dateFrom/dateTo, type, amountMin/amountMax (without sign; amount itself is negative for money paid), search for a payee or payment text, or by account, category or counterparty. Change a transaction with update_transaction (PATCH /api/v1/banking/transactions/{transactionId}); attach a document with attach_document (PUT /api/v1/banking/transactions/{transactionId}/documents/{documentId}), or upload one with upload_document (POST /api/v1/accounting/documents) and transactionId.","inputSchema":{"type":"object","properties":{"transactionId":{"description":"Only these transactions: one id or several","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f"]]},"accountId":{"description":"Only transactions of these bank accounts (ids from list_bank_accounts (GET /api/v1/banking/accounts)); all accounts when omitted","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9"]]},"type":{"description":"incoming (money received) or outgoing (money paid)","type":"string","enum":["incoming","outgoing"],"examples":["outgoing"]},"dateFrom":{"description":"First day of transactionDate (the date the bank posted it, else the payment date), inclusive, YYYY-MM-DD, e.g. 2026-09-01","type":"string","format":"date","examples":["2026-09-01"]},"dateTo":{"description":"Last day of transactionDate, inclusive (the whole day), YYYY-MM-DD, e.g. 2026-09-30","type":"string","format":"date","examples":["2026-09-30"]},"amountMin":{"description":"Smallest amount, inclusive, without sign (combine with type for the direction), e.g. 100; amountMin = amountMax finds an exact amount","type":"number","minimum":0,"examples":[100]},"amountMax":{"description":"Largest amount, inclusive, without sign, e.g. 250.50","type":"number","minimum":0,"examples":[250.5]},"search":{"description":"Text to find in the counterparty name, payment details, account name or amount, case-insensitive, e.g. canva","type":"string","minLength":1,"maxLength":200,"examples":["canva"]},"counterpartyId":{"description":"Only transactions assigned to these counterparties (ids from list_counterparties (GET /api/v1/invoicing/counterparties))","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["9f8e7d6c-5b4a-4c3d-8e2f-1a0b9c8d7e6f"]]},"categoryId":{"description":"Only transactions in these categories (ids from list_categories (GET /api/v1/banking/categories))","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid"},"examples":[["2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d"]]},"docNeeded":{"description":"true = this transaction requires a supporting document (it stays true after one is attached); false = no document is needed. To find transactions still missing one, use hasDocuments=false","type":"boolean","examples":[true]},"documentsStatus":{"description":"Only transactions whose worst attached document has this status: processing, denied or confirmed (one or several)","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","enum":["processing","denied","confirmed"]},"examples":[["denied"]]},"hasDocuments":{"description":"Only transactions that require a document (docNeeded=true). false = still missing one: nothing attached, not pending at the bank (status is not PENDING) and not marked noSupportingDocument — the list to ask the user for documents. true = at least one document attached. Cannot be combined with docNeeded=false, nor hasDocuments=false with documentsStatus","type":"boolean","examples":[false]},"sort":{"description":"Sort by transactionDate, bookingDate, amount, accountName, categoryName, counterpartyName; prefix the field with - for descending order. Default: -transactionDate. amount is signed: biggest expenses first is type=outgoing&sort=amount, biggest income first is type=incoming&sort=-amount. accountName sorts by the name the bank gave the account; accounts without one come last in either direction.","type":"string","enum":["transactionDate","-transactionDate","bookingDate","-bookingDate","amount","-amount","accountName","-accountName","categoryName","-categoryName","counterpartyName","-counterpartyName"],"examples":["-transactionDate"]},"limit":{"description":"Items per page, 1..100, default 25","default":25,"type":"integer","minimum":1,"maximum":100},"offset":{"description":"Items to skip, default 0","default":0,"type":"integer","minimum":0}},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the transaction"},"accountId":{"type":"string","description":"Bank account the transaction belongs to, see list_bank_accounts (GET /api/v1/banking/accounts)"},"accountName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of that account, e.g. LHV Current Account EUR"},"type":{"type":"string","enum":["incoming","outgoing"],"description":"incoming (money received) or outgoing (money paid), from the sign of amount"},"amount":{"type":"number","description":"Signed amount in the transaction currency, e.g. -49.90; negative for outgoing"},"currency":{"type":"string","description":"ISO 4217 code, e.g. EUR"},"transactionDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the bank posted the transaction, or the payment date (bookingDate) when the bank gives none; ISO date-time in UTC, e.g. 2026-09-15T00:00:00.000Z. dateFrom and dateTo filter on it"},"bookingDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the payment was made, as the bank reports it (for a transaction created by hand or imported, the date given there); ISO date-time in UTC, always set"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"PROCESSED (settled) or PENDING (a card payment the bank has not settled yet); null for some older transactions"},"origin":{"type":"string","enum":["bank","import"],"description":"bank: synchronised from the bank; import: created by hand or imported from a file"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payment details, as the bank statement gives them unless the company changed them"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text comment of the company"},"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned counterparty, or the payer/payee name from the statement"},"counterpartyId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned counterparty, see list_counterparties (GET /api/v1/invoicing/counterparties); null when none is assigned"},"categoryId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned category, see list_categories (GET /api/v1/banking/categories); null when none"},"categoryName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned category, e.g. Software"},"includeTransaction":{"type":"boolean","description":"Whether the transaction counts in the finance reports of the Enty app"},"docNeeded":{"type":"boolean","description":"true = this transaction requires a supporting document (it stays true after one is attached); false = no document is needed. To find transactions still missing one, use hasDocuments=false in list_transactions (GET /api/v1/banking/transactions)"},"reasonNotNeeded":{"anyOf":[{"type":"string","enum":["bank_or_platform_fee","e_commerce_payout","government_or_tax_payment","internal_transfer","salary_or_director_payment","bank_interest","cashback"]},{"type":"null"}],"description":"Why no document is needed, when the company said so: bank_or_platform_fee — a fee of the bank or a payment platform; e_commerce_payout — a payout from a shop or marketplace platform (Stripe, PayPal, Amazon…); government_or_tax_payment — a tax or a state fee; internal_transfer — a transfer between accounts of the company; salary_or_director_payment — a salary or a payment to the director; bank_interest — interest paid by the bank; cashback — a cashback credit. null otherwise"},"noSupportingDocument":{"type":"boolean","description":"true = the company marked in the Enty app that no supporting document exists for this transaction; it is then left out of hasDocuments=false"},"documentsStatus":{"anyOf":[{"type":"string","enum":["processing","denied","confirmed"]},{"type":"null"}],"description":"Worst status among the attached documents (denied, then processing, then confirmed); null when nothing is attached"},"documents":{"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","description":"Id of the document"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File name of the document, e.g. invoice-2026-09.pdf"}},"required":["documentId","name"],"additionalProperties":false},"description":"Documents attached to the transaction"}},"required":["transactionId","accountId","accountName","type","amount","currency","transactionDate","bookingDate","status","origin","description","comment","counterpartyName","counterpartyId","categoryId","categoryName","includeTransaction","docNeeded","reasonNotNeeded","noSupportingDocument","documentsStatus","documents"],"additionalProperties":false}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"description":"Number of items in this page"},"offset":{"type":"integer","minimum":0,"description":"Offset that produced this page"},"limit":{"type":"integer","minimum":1,"description":"Limit that produced this page"},"total":{"type":"integer","minimum":0,"description":"Number of items matching the filters, across all pages"},"hasMore":{"type":"boolean","description":"Whether more items follow this page; request them with offset = offset + count"}},"required":["count","offset","limit","total","hasMore"],"additionalProperties":false,"description":"Pagination metadata"}},"required":["items","meta"],"additionalProperties":false},"annotations":{"title":"List bank transactions","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"banking.transactions.list","io.enty/access":"read","io.enty/rest":"GET /api/v1/banking/transactions"}},{"name":"update_transaction","title":"Update a bank transaction","description":"Changes one bank transaction: its category, counterparty, comment, description, the date of a transaction created by hand or imported from a file, and whether it needs a document (with the reason when it does not). Send only the fields to change; null clears comment, description or counterpartyId. Returns the updated transaction. A category applies only to transactions of its direction: take one from list_categories (GET /api/v1/banking/categories) with type equal to the transaction type. To change several transactions in one call, use update_transactions (POST /api/v1/banking/transactions/batch-update).\n\nErrors besides the standard ones:\n- 409 CATEGORY_DIRECTION_MISMATCH — the category applies to transactions of the other direction (its type must equal the transaction type) and nothing was saved; pick a category from list_categories (GET /api/v1/banking/categories) with type=<the transaction type>\n- PARTIALLY_APPLIED — the other fields sent were saved but docNeeded (and reasonNotNeeded) was not; extensions.applied names the fields saved, e.g. [\"comment\", \"categoryId\"], and extensions.failed is [\"docNeeded\"] — retry with only docNeeded and reasonNotNeeded\n- 400 BAD_USER_INPUT — the date of a transaction that came from the bank cannot be changed; only transactions created by hand or imported from a file accept date","inputSchema":{"type":"object","properties":{"transactionId":{"type":"string","format":"uuid","description":"Id of a bank transaction of the company, from list_transactions (GET /api/v1/banking/transactions)","examples":["8c1d2e3f-4a5b-4c6d-9e7f-0a1b2c3d4e5f"]},"comment":{"description":"Free-text comment of the company, e.g. Team offsite in Tartu; null clears it","examples":["Annual Canva subscription for the design team"],"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"description":{"description":"Payment details shown as the description of the transaction, e.g. Invoice 2026-118; null clears them","anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"date":{"description":"New transaction date, YYYY-MM-DD, e.g. 2026-09-14; only transactions created by hand or imported from a file (origin import) accept it","type":"string","format":"date"},"categoryId":{"description":"Category to assign, from list_categories (GET /api/v1/banking/categories) with type=<the transaction type>: a category applies only to transactions of its direction","examples":["2a3b4c5d-6e7f-4a8b-9c0d-1e2f3a4b5c6d"],"type":"string","format":"uuid"},"counterpartyId":{"description":"Counterparty to assign, from list_counterparties (GET /api/v1/invoicing/counterparties); null removes the assigned one","examples":["9f8e7d6c-5b4a-4c3d-8e2f-1a0b9c8d7e6f"],"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"docNeeded":{"description":"false = no document will be provided for this transaction (send reasonNotNeeded with it); true = it requires a document again","type":"boolean"},"reasonNotNeeded":{"description":"Why no document is needed; required with docNeeded: false. bank_or_platform_fee — a fee of the bank or a payment platform; e_commerce_payout — a payout from a shop or marketplace platform (Stripe, PayPal, Amazon…); government_or_tax_payment — a tax or a state fee; internal_transfer — a transfer between accounts of the company; salary_or_director_payment — a salary or a payment to the director; bank_interest — interest paid by the bank; cashback — a cashback credit","examples":["bank_or_platform_fee"],"type":"string","enum":["bank_or_platform_fee","e_commerce_payout","government_or_tax_payment","internal_transfer","salary_or_director_payment","bank_interest","cashback"]},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"pattern":"\\S","description":"Optional. A key you generate once per logical action (a UUID) and reuse when retrying, so a retried call does not apply the change twice."}},"required":["transactionId"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"transactionId":{"type":"string","description":"Id of the transaction"},"accountId":{"type":"string","description":"Bank account the transaction belongs to, see list_bank_accounts (GET /api/v1/banking/accounts)"},"accountName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of that account, e.g. LHV Current Account EUR"},"type":{"type":"string","enum":["incoming","outgoing"],"description":"incoming (money received) or outgoing (money paid), from the sign of amount"},"amount":{"type":"number","description":"Signed amount in the transaction currency, e.g. -49.90; negative for outgoing"},"currency":{"type":"string","description":"ISO 4217 code, e.g. EUR"},"transactionDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the bank posted the transaction, or the payment date (bookingDate) when the bank gives none; ISO date-time in UTC, e.g. 2026-09-15T00:00:00.000Z. dateFrom and dateTo filter on it"},"bookingDate":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Date the payment was made, as the bank reports it (for a transaction created by hand or imported, the date given there); ISO date-time in UTC, always set"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"PROCESSED (settled) or PENDING (a card payment the bank has not settled yet); null for some older transactions"},"origin":{"type":"string","enum":["bank","import"],"description":"bank: synchronised from the bank; import: created by hand or imported from a file"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payment details, as the bank statement gives them unless the company changed them"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text comment of the company"},"counterpartyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned counterparty, or the payer/payee name from the statement"},"counterpartyId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned counterparty, see list_counterparties (GET /api/v1/invoicing/counterparties); null when none is assigned"},"categoryId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Assigned category, see list_categories (GET /api/v1/banking/categories); null when none"},"categoryName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of the assigned category, e.g. Software"},"includeTransaction":{"type":"boolean","description":"Whether the transaction counts in the finance reports of the Enty app"},"docNeeded":{"type":"boolean","description":"true = this transaction requires a supporting document (it stays true after one is attached); false = no document is needed. To find transactions still missing one, use hasDocuments=false in list_transactions (GET /api/v1/banking/transactions)"},"reasonNotNeeded":{"anyOf":[{"type":"string","enum":["bank_or_platform_fee","e_commerce_payout","government_or_tax_payment","internal_transfer","salary_or_director_payment","bank_interest","cashback"]},{"type":"null"}],"description":"Why no document is needed, when the company said so: bank_or_platform_fee — a fee of the bank or a payment platform; e_commerce_payout — a payout from a shop or marketplace platform (Stripe, PayPal, Amazon…); government_or_tax_payment — a tax or a state fee; internal_transfer — a transfer between accounts of the company; salary_or_director_payment — a salary or a payment to the director; bank_interest — interest paid by the bank; cashback — a cashback credit. null otherwise"},"noSupportingDocument":{"type":"boolean","description":"true = the company marked in the Enty app that no supporting document exists for this transaction; it is then left out of hasDocuments=false"},"documentsStatus":{"anyOf":[{"type":"string","enum":["processing","denied","confirmed"]},{"type":"null"}],"description":"Worst status among the attached documents (denied, then processing, then confirmed); null when nothing is attached"},"documents":{"type":"array","items":{"type":"object","properties":{"documentId":{"type":"string","description":"Id of the document"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File name of the document, e.g. invoice-2026-09.pdf"}},"required":["documentId","name"],"additionalProperties":false},"description":"Documents attached to the transaction"}},"required":["transactionId","accountId","accountName","type","amount","currency","transactionDate","bookingDate","status","origin","description","comment","counterpartyName","counterpartyId","categoryId","categoryName","includeTransaction","docNeeded","reasonNotNeeded","noSupportingDocument","documentsStatus","documents"],"additionalProperties":false},"annotations":{"title":"Update a bank transaction","readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"banking.transactions.update","io.enty/access":"write","io.enty/rest":"PATCH /api/v1/banking/transactions/{transactionId}"}},{"name":"create_upload_url","title":"Create an upload URL for a document file","description":"Step 1 of uploading a document over MCP, where a tool call carries no file. Returns a one-time uploadUrl valid for 30 minutes. Step 2: send the file there with PUT and no Authorization header — the URL is the credential — e.g. curl --fail-with-body -sS -T <path> '<uploadUrl>'; PDF, PNG or JPEG, at most 10 MB. Without a shell, give the uploadUrl to the user to open in a browser, where they pick the file, and wait for their confirmation. A PUT that fails without an Enty problem document (e.g. a 403 or a refused connection from a sandbox proxy) never reached Enty: the sandbox does not allow the host of uploadUrl. Ask the user to add that host to the allowed domains of their code execution settings (claude.ai and Claude Desktop: Settings → Capabilities), and meanwhile give them uploadUrl to open in a browser. Step 3: call upload_document with the uploadId (and transactionId to attach the document to a bank transaction). Never put file contents into tool arguments.\n\nErrors besides the standard ones:\n- 429 UPLOAD_LIMIT_REACHED — at most 10 uploads may be open at once per user and company; file or let the earlier ones expire, retry after Retry-After seconds\n- 503 UPLOAD_STAGING_UNAVAILABLE — uploaded files cannot be kept right now and nothing was changed; retry after Retry-After seconds","inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"allOf":[{"pattern":"\\.([pP][dD][fF]|[pP][nN][gG]|[jJ][pP][eE]?[gG])$"},{"pattern":"^[^\\u0000-\\u001f\\u007f]*$"}],"description":"File name with its extension, e.g. \"invoice-2026-05.pdf\"; it becomes the document name","examples":["canva-invoice-2026-09.pdf"]},"sha256":{"description":"SHA-256 of the file, hex; when given, only exactly this file is accepted at the uploadUrl","type":"string","pattern":"^[0-9a-fA-F]{64}$"}},"required":["name"],"additionalProperties":false},"outputSchema":{"type":"object","properties":{"uploadId":{"type":"string","description":"Pass it as uploadId to upload_document once the file is sent"},"uploadUrl":{"type":"string","description":"Send the file here with PUT; the URL itself is the credential — keep it private"},"method":{"type":"string","const":"PUT"},"expiresAt":{"type":"string","format":"date-time","description":"Until when the file can be sent and filed"},"maxBytes":{"type":"number","description":"Largest file accepted, in bytes"},"acceptedTypes":{"type":"array","items":{"type":"string"},"description":"Media types accepted"},"curl":{"type":"string","description":"Ready-to-run command, with <path to file> to replace"},"next":{"type":"string","description":"What to do next"}},"required":["uploadId","uploadUrl","method","expiresAt","maxBytes","acceptedTypes","curl","next"],"additionalProperties":false},"annotations":{"title":"Create an upload URL for a document file","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"_meta":{"io.enty/operation":"files.uploads.create","io.enty/access":"write"}},{"name":"list_counterparties","title":"List counterparties","description":"Lists the company's counterparties — the clients it invoices and the suppliers it pays — with contact, tax and address details. Use it to find the counterpartyId of a transaction's payer or payee by part of the name, the email or the VAT number, then set it with update_transaction (PATCH /api/v1/banking/transactions/{transactionId}) or filter list_transactions (GET /api/v1/banking/transactions) by it (a uuid id only; for a counterparty whose id has another form, search there by its name). Returns the most recently updated counterparties first.","inputSchema":{"type":"object","properties":{"counterpartyId":{"description":"One or several counterparty ids, e.g. 9f8e7d6c-5b4a-4c3d-8e2f-1a0b9c8d7e6f","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":256},"examples":[["9f8e7d6c-5b4a-4c3d-8e2f-1a0b9c8d7e6f"]]},"name":{"description":"Part of the name, case-insensitive: the company name, or the first, last and middle name of a person, e.g. canva","type":"string","minLength":1,"maxLength":200,"examples":["canva"]},"email":{"description":"Part of the email address, case-insensitive, e.g. billing@","type":"string","minLength":1,"maxLength":200,"examples":["billing@"]},"taxNumber":{"description":"VAT number, exact match ignoring spaces and case, e.g. EE102345678","type":"string","minLength":1,"maxLength":50,"examples":["EE102345678"]},"legalStatus":{"description":"Individual or Legal Entity, e.g. Legal Entity","type":"string","enum":["Individual","Legal Entity"],"examples":["Legal Entity"]},"isClient":{"description":"true = clients, whom the company invoices","type":"boolean","examples":[true]},"isProvider":{"description":"true = providers, the suppliers the company pays","type":"boolean","examples":[true]},"sort":{"description":"Sort by name, createdAt, updatedAt; prefix the field with - for descending order. Default: -updatedAt.","type":"string","enum":["name","-name","createdAt","-createdAt","updatedAt","-updatedAt"],"examples":["-updatedAt"]},"limit":{"description":"Items per page, 1..100, default 25","default":25,"type":"integer","minimum":1,"maximum":100},"offset":{"description":"Items to skip, default 0","default":0,"type":"integer","minimum":0}},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"counterpartyId":{"type":"string","description":"Id of the counterparty; use it as counterpartyId in update_transaction (PATCH /api/v1/banking/transactions/{transactionId}) and, when it is a uuid, list_transactions (GET /api/v1/banking/transactions). Counterparties brought over from the earlier invoicing provider keep ids of another form","examples":["9f8e7d6c-5b4a-4c3d-8e2f-1a0b9c8d7e6f"]},"name":{"type":"string","description":"Full name: the company name, or the first, last and middle name of a person joined, e.g. Canva Pty Ltd","examples":["Canva Pty Ltd"]},"firstName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First name of a person, or the company name of a legal entity"},"lastName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Last name of a person"},"middleName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Middle name of a person"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Email address, e.g. billing@canva.example"},"taxNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"VAT number, e.g. EE102345678"},"companyNumber":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Business registry code, e.g. 16123456"},"legalStatus":{"type":"string","enum":["Individual","Legal Entity"],"description":"Individual (a person) or Legal Entity (a company or organisation)"},"taxStatus":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Taxable or Non Taxable"},"isClient":{"type":"boolean","description":"Whether the company invoices this counterparty"},"isProvider":{"type":"boolean","description":"Whether this counterparty supplies the company"},"addresses":{"type":"array","items":{"type":"object","properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Billing or Shipping"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Street and building, e.g. 1 George Street"},"city":{"anyOf":[{"type":"string"},{"type":"null"}]},"zip":{"anyOf":[{"type":"string"},{"type":"null"}]},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Country name, e.g. Australia"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","address","city","zip","country","phone"],"additionalProperties":false}},"createdAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the counterparty was added to Enty"},"updatedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"When the counterparty was last changed, e.g. 2026-09-14T08:02:11.000Z"}},"required":["counterpartyId","name","firstName","lastName","middleName","email","taxNumber","companyNumber","legalStatus","taxStatus","isClient","isProvider","addresses","createdAt","updatedAt"],"additionalProperties":false}},"meta":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"description":"Number of items in this page"},"offset":{"type":"integer","minimum":0,"description":"Offset that produced this page"},"limit":{"type":"integer","minimum":1,"description":"Limit that produced this page"},"total":{"type":"integer","minimum":0,"description":"Number of items matching the filters, across all pages"},"hasMore":{"type":"boolean","description":"Whether more items follow this page; request them with offset = offset + count"}},"required":["count","offset","limit","total","hasMore"],"additionalProperties":false,"description":"Pagination metadata"}},"required":["items","meta"],"additionalProperties":false},"annotations":{"title":"List counterparties","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"invoicing.counterparties.list","io.enty/access":"read","io.enty/rest":"GET /api/v1/invoicing/counterparties"}},{"name":"whoami","title":"Get the current user and company","description":"Returns the user, the company and the access level behind the API key or connection used for the call, and how the company's documents are grouped into accounting periods by default. Call it first to check the key and to learn which company every other operation acts on and whether changes are allowed (access is editor).","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"outputSchema":{"type":"object","properties":{"userId":{"type":"string","description":"User who owns the credential"},"email":{"type":"string","description":"Email of that user, e.g. founder@northwind.example"},"companyId":{"type":"string","description":"Company the credential is bound to; every operation acts on it"},"companyName":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name of that company, e.g. Northwind Labs OÜ"},"access":{"type":"string","enum":["reader","editor"],"description":"reader: read operations only; editor: read and write operations"},"credentialType":{"type":"string","enum":["api_key","session"],"description":"api_key: an API key or an OAuth connection; session: a signed-in Enty web session"},"periodType":{"type":"string","enum":["month","quarter","year"],"description":"How Enty groups this company's documents into accounting periods by default, and so the form of the period list_documents (GET /api/v1/accounting/documents) shows for a document uploaded without one: month (VAT-registered companies, e.g. 2026-09), quarter (VAT-registered companies in the Netherlands, e.g. 2026-Q3) or year (companies without a VAT number, e.g. 2026). Documents uploaded with an explicit period, or filed before the company got its VAT number, may have another form; period=YYYY in list_documents covers every period of a year","examples":["month"]}},"required":["userId","email","companyId","companyName","access","credentialType","periodType"],"additionalProperties":false},"annotations":{"title":"Get the current user and company","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"_meta":{"io.enty/operation":"system.whoami","io.enty/access":"read","io.enty/rest":"GET /api/v1/me"}}]}