All integrations

Finmei

BUSINESS · COMMERCE & FINANCE

Invoices, expenses, and the business profile of the account they connected.

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

finmei_delete_invoices_by_idWRITE

Delete an invoice via DELETE /invoices/{id}. PERMANENTLY DELETE an invoice. There is no recycle bin and no undo in the API, and an invoice is a financial record that the customer's tax authority may require them to retain -- deleting an issued invoice can leave a gap in a numbered series. Prefer issuing a credit invoice. An id this business does not hold answers 404 rather than deleting anything. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. This writes to the customer's real accounting records; Finmei offers no sandbox and no test mode. There is no undo and no recycle bin: Finmei's API offers no way to restore what this call removes. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it.

api
finmei_get_expensesREAD

List expenses via GET /expenses. List the expenses recorded on this connection's Finmei business, each with its id, seller, total, currency, date and created/updated timestamps. The reply is `{"data": [...], "meta": {...}}` and the `meta` block carries `current_page`, `last_page`, `per_page` (always 50) and `total`. This is where an expense id comes from -- every other expense tool needs one, and there is no way to create an expense through this integration because Finmei requires the bill file to be uploaded with it. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it. Page size is fixed at 50 and cannot be raised, so reading a large business costs one call per 50 records against that budget.

api
finmei_get_expenses_by_idREAD

Get an expense via GET /expenses/{id}. Fetch one expense by its id. An id this business does not hold answers 404 with `{"message": "No query results for model [App\Models\Expense] <id>"}` -- and so does a malformed id, so a 404 here means 'not in THIS business', which on Finmei includes an expense that belongs to another business on the same account. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it.

api
finmei_get_invoicesREAD

List invoices via GET /invoices. List the invoices issued by this connection's Finmei business, with the same `{"data", "meta"}` envelope and the same fixed page size of 50 as the expense list. This is where an invoice id comes from. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it. Page size is fixed at 50 and cannot be raised, so reading a large business costs one call per 50 records against that budget.

api
finmei_get_invoices_by_idREAD

Get an invoice via GET /invoices/{id}. Fetch one invoice by its id, with its buyer, seller, line items, payment options and totals. An unknown or malformed id answers 404 `No query results for model [App\Models\Invoice] <id>`; an invoice belonging to another business on the same Finmei account is not visible to this connection and answers the same 404. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it.

api
finmei_get_profileREAD

Get the connected business profile via GET /profile. Return the business this connection's API token is assigned to: its `business_id`, `business_title`, `business_type` and address, plus `company_name`/`company_code`/`vat_code` for a company or `first_name`/`last_name`/`individual_tax_id` for an individual. A FINMEI TOKEN IS SCOPED TO ONE BUSINESS and cannot read any other on the same account, so this is the tool that says which set of books a connection is actually pointed at -- call it first when an account holds several businesses. It is also this integration's credential probe: Finmei checks the token here before it is stored. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it.

api
finmei_post_invoicesWRITE

Create an invoice via POST /invoices. Issue a new invoice. `type`, `invoice_date` (YYYY-MM-DD), `series`, `currency` (uppercase ISO 4217), `buyer` (with `buyer.type` set to `company` or `individual`) and `products` are required; each product line needs `name`, `units`, `quantity` and `price`, and `vat_percentage` as well when the seller has a VAT code and the type is one of the vat_invoice forms. THE SELLER SIDE IS WHERE THIS CALL FAILS: set `use_default_seller_info` to true to bill under the business's own saved details, or supply the whole `seller` object -- exactly one of the two, never neither and never both. THIS ISSUES A REAL FINANCIAL DOCUMENT in the customer's accounts under the next number in the series you name, so confirm the series and the numbering before calling it rather than after. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. This writes to the customer's real accounting records; Finmei offers no sandbox and no test mode. Finmei answers 422 with a per-field `errors` object naming exactly what is wrong, and it validates the body BEFORE looking the record up -- so a 422 is about the body and says nothing about whether the id exists. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it.

api
finmei_put_expenses_by_idWRITE

Update an expense via PUT /expenses/{id}. Update an expense's form fields: `seller`, `total`, `currency` and `date`. ALL FOUR ARE REQUIRED ON EVERY CALL -- this is a whole-record replacement, not a patch, so read the expense first and send back every field including the ones you are not changing, or Finmei answers 422 for the ones you left out. The bill FILE is not touched by this call and cannot be changed through this integration. Validation runs before the record is looked up, so an incomplete body answers 422 even when the id does not exist. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. This writes to the customer's real accounting records; Finmei offers no sandbox and no test mode. THIS IS A REPLACEMENT, NOT A PATCH: every field the record should keep has to be resent, so read the record first and send the whole thing back with your edits in it. Finmei answers 422 with a per-field `errors` object naming exactly what is wrong, and it validates the body BEFORE looking the record up -- so a 422 is about the body and says nothing about whether the id exists. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it.

api
finmei_put_invoices_by_idWRITE

Update an invoice via PUT /invoices/{id}. Replace an existing invoice. The body is the SAME shape as Create an invoice and carries the same requirements -- this is a full replacement, not a patch, so anything you omit is dropped rather than kept. Read the invoice first and send the whole document back with your edits in it. Amending an issued invoice is an accounting act in most jurisdictions; a credit invoice (`credit_invoice` / `credit_vat_invoice`) is usually the correct instrument rather than rewriting the original. Each Finmei API token is assigned to a single BUSINESS and cannot reach any other business on the same account, so everything this tool returns or changes belongs to this connection's one business. This writes to the customer's real accounting records; Finmei offers no sandbox and no test mode. THIS IS A REPLACEMENT, NOT A PATCH: every field the record should keep has to be resent, so read the record first and send the whole thing back with your edits in it. Finmei answers 422 with a per-field `errors` object naming exactly what is wrong, and it validates the body BEFORE looking the record up -- so a 422 is about the body and says nothing about whether the id exists. Finmei allows 60 requests per minute per connected token and reports the budget on every authenticated response in `x-ratelimit-limit` and `x-ratelimit-remaining`; a rejected credential consumes none of it.

api

Put Finmei behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.