Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Orders, clients, time entries, materials and invoices from your Minuba account. Use it in ChatGPT, Claude or any AI agent over MCP, or in n8n, Make and scripts over REST.
14 tools Read and write
Minuba has an official REST API, but Minuba issues the API key on request and there is no MCP server (checked 31 Oct 2026). Cotlet runs 14 Minuba tools hosted, over MCP for agents and REST for scripts, with no key from Minuba.
| What you need | Official API | Your own HTTP steps | Cotlet |
|---|---|---|---|
| Read orders, clients and time | Yes, with a key | If you build it | Yes |
| Log time and materials | Yes, with a key | If you build it | Yes |
| Send an invoice to the client | Not documented | No | Yes, after your OK |
| Service agreements | Not documented | No | Yes |
| Start without asking Minuba | Needs approval | Needs approval | Yes, sign in once |
Checked 31 Oct 2026. Sources: Minuba support: Minuba API · Minuba API documentation · Minuba support: user settings, API and auth key · Minuba integrations
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your Minuba password, and no invoice reaches a client until you approve it. Who can see your session
Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.
Enable Minuba for agents. Sign up, log in to Minuba in its Cloud Browser, then press Enable for agents.
Paste the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, also carries Minuba next to your other apps. If you enable Minuba after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-minuba \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-minuba": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-minuba]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: minuba_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: minuba_write Create a Cotlet API key with access to Minuba and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
Connect Minuba in Cotlet and enable it for agents. Account access: your own Minuba user (an administrator or billing user for invoices and clients). Tools follow what that user and your plan can see.
curl "https://cotlet.dev/api/v1/minuba/orders?state=delayed" \
-H "Authorization: Bearer $COTLET_API_KEY" A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.
{
"status": "success",
"app": "minuba",
"tool": "list_orders",
"result": {
"orders": [
{
"order_id": "ord_20411",
"order_number": 20411,
"name": "Varmepumpe, Skovvej 12",
"client": "Skovvej Boligforening",
"state": "delayed",
"pending_date": "2026-10-28",
"pending_note": "Waiting for supplier"
}
],
"next_cursor": null
}
} Returns orders in the chosen state with client, number and the pending date and note when set. Valid states are proposal_draft, proposal, order_draft, new, started, delayed, completed, closed and rejected.
Without all_employees, the list covers what your Minuba user is assigned to or may see.
Pass next_cursor unchanged as cursor until it is null, keeping the same state while paging.
Keep order IDs in your workflow and compare state and pending date on each run, because an existing order can change state.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Run list_orders with state=completed and list_invoices with state=draft each Friday to prepare an invoice review sheet. |
| Make | HTTP > Make a request | Read last week's hours with list_timesheet_entries and compare them with list_users to flag employees with no entries. |
| Python or Node.js | REST API | Call register_time for each row of a daily CSV of hours. Deleting a wrong entry stays a manual step in Minuba. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads Minuba; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.
Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.
The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.
Reads show what your Minuba user may see. A draft order or a new client reaches no one.
Lists orders and quotes. Filter by state, order number or last change. Returns the number, name, client, state, assigned employees and the pending date and note when one is set. Nothing is changed.
MCP callminuba_read → list_orders
REST endpointGET https://cotlet.dev/api/v1/minuba/orders
| Name | Type | Description |
|---|---|---|
| state string | string | One of proposal_draft, proposal, order_draft, new, started, delayed, completed, closed, rejected. |
| order_number integer | integer | Exact order number. |
| updated_after date | date | Only orders changed on or after this date. |
| all_employees boolean | boolean | Include orders assigned to other employees. Needs a role that can see them. |
| cursor string | string | Next page cursor from the previous call. |
{
"orders": [
{
"order_id": "ord_20418",
"order_number": 20418,
"name": "Badeværelse hos Hansen",
"client": "Familien Hansen",
"state": "started",
"pending_date": null
},
{
"order_id": "ord_20411",
"order_number": 20411,
"name": "Varmepumpe, Skovvej 12",
"client": "Skovvej Boligforening",
"state": "delayed",
"pending_date": "2026-10-28",
"pending_note": "Waiting for supplier"
}
],
"next_cursor": null
} Returns one order as its work slip shows it: client and address, state, assigned employees, the pending date and note, and the hours and material lines registered so far. Prices are left out for a user without price access. Nothing is changed.
MCP callminuba_read → get_order
REST endpointGET https://cotlet.dev/api/v1/minuba/orders/{order_id}
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order ID from list_orders. |
{
"order_id": "order_8c41d2"
} {
"order_id": "ord_20418",
"order_number": 20418,
"name": "Badeværelse hos Hansen",
"client": "Familien Hansen",
"address": "Egevej 7, 2800 Kongens Lyngby",
"state": "started",
"employees": [
"Jens Madsen",
"Ali Yilmaz"
],
"hours_registered": 31.5,
"material_lines": 9
} Searches the customer register by client number or CVR (org number) and returns name, address, email and phone. Use it before create_client to avoid a duplicate. Nothing is changed.
MCP callminuba_read → list_clients
REST endpointGET https://cotlet.dev/api/v1/minuba/clients
| Name | Type | Description |
|---|---|---|
| client_number integer | integer | Exact client number. |
| org_number string | string | CVR number. |
| updated_after date | date | Only clients changed on or after this date. |
{
"clients": [
{
"client_id": "cli_3302",
"client_number": 3302,
"name": "Skovvej Boligforening",
"org_number": "29384756",
"email": "bestyrelse@skovvej.example",
"phone": "+45 31 00 00 01"
}
]
} Lists the users of the company with name and user type (administrative, limited or resource). Use the IDs with list_timesheet_entries. Nothing is changed.
MCP callminuba_read → list_users
REST endpointGET https://cotlet.dev/api/v1/minuba/users
No parameters.
{
"users": [
{
"user_id": "usr_11",
"name": "Jens Madsen",
"user_type": "resource"
},
{
"user_id": "usr_12",
"name": "Ali Yilmaz",
"user_type": "limited"
},
{
"user_id": "usr_01",
"name": "Mette Holm",
"user_type": "administrative"
}
]
} Adds one client and returns its client_id and number. Check list_clients first so you do not create a duplicate. The client is told nothing. It reaches no one and is undone by deleting the client in Minuba, so it runs without asking.
MCP callminuba_write → create_client
REST endpointPOST https://cotlet.dev/api/v1/minuba/clients
| Name | Type | Description |
|---|---|---|
| name string required | string | Client name. |
| org_number string | string | CVR number for a company. |
| email string | string | Contact email. |
| phone string | string | Phone number. |
| address string | string | Street, postcode and city. |
{
"name": "Jane Doe"
} {
"client_id": "cli_3318",
"client_number": 3318,
"name": "Nordlys Tømrer ApS",
"org_number": "12345678"
} Creates a draft for one client and returns the order_id and number. Choose a quote draft or an order draft. The draft stays in Minuba until someone approves it there. It reaches no one and is undone by deleting the draft, so it runs without asking.
MCP callminuba_write → create_order
REST endpointPOST https://cotlet.dev/api/v1/minuba/clients/{client_id}/orders
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from list_clients or create_client. |
| name string required | string | Order name. |
| kind string | string | proposal_draft or order_draft. Default: order_draft. |
| description string | string | What the job is. |
{
"client_id": "client_8c41d2",
"name": "Jane Doe"
} {
"order_id": "ord_20431",
"order_number": 20431,
"name": "Tagreparation",
"client": "Nordlys Tømrer ApS",
"state": "proposal_draft"
} Time follows the 15 or 30 minute interval of your company settings. Files are listed by name, never downloaded.
Returns time entries of one employee or of everyone for a date range. Each entry shows whether it is order-related, not order-related or absence, the order it sits on, the work type and the note. Nothing is changed.
MCP callminuba_read → list_timesheet_entries
REST endpointGET https://cotlet.dev/api/v1/minuba/timesheet-entries
| Name | Type | Description |
|---|---|---|
| user_id string | string | Employee ID from list_users. Leave out for all employees you may see. |
| date_from date | date | First day. |
| date_to date | date | Last day. |
{
"entries": [
{
"entry_id": "te_90311",
"user": "Jens Madsen",
"date": "2026-10-26",
"hours": 7.5,
"kind": "order",
"order_number": 20418,
"work_type": "Montering",
"note": "Fliser i bad"
},
{
"entry_id": "te_90312",
"user": "Ali Yilmaz",
"date": "2026-10-26",
"hours": 8,
"kind": "order",
"order_number": 20418,
"work_type": "Montering",
"note": ""
}
]
} Adds a time entry for the signed-in employee, or for another one if your role allows it. Give an order to make it order-related; leave the order out for non-order time. Times follow the 15 or 30 minute interval set in the company settings. The hours land on the work slip and in the invoice basis. It reaches no one and is undone by deleting the entry, so it runs without asking.
MCP callminuba_write → register_time
REST endpointPOST https://cotlet.dev/api/v1/minuba/times
| Name | Type | Description |
|---|---|---|
| order_id string | string | Order ID from list_orders. Leave out for time not related to an order. |
| date date required | date | Day of the work. |
| start_time string required | string | Start, HH:MM. |
| end_time string required | string | End, HH:MM. |
| work_type string | string | Work type as your company set it up, for example Montering. |
| note string | string | What was done. It can appear on the customer invoice, depending on your settings. |
| user_id string | string | Employee ID from list_users. Default: the signed-in user. |
{
"order_id": "ord_20418",
"date": "2026-10-31",
"start_time": "08:00",
"end_time": "14:00",
"work_type": "Montering",
"note": "Fuger og silikone"
} {
"entry_id": "te_90340",
"order_number": 20418,
"date": "2026-10-31",
"hours": 6,
"work_type": "Montering",
"note": "Fuger og silikone"
} Returns the material registrations on one order: material number, description, quantity, who registered it and when, and whether the line is excluded from invoicing. Nothing is changed.
MCP callminuba_read → list_order_materials
REST endpointGET https://cotlet.dev/api/v1/minuba/order-materials
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order ID from list_orders. |
| registered_after date | date | Only lines registered on or after this date. |
{
"order_id": "order_8c41d2"
} {
"order_number": 20418,
"lines": [
{
"material_no": "4410",
"description": "Fugemasse, 310 ml",
"quantity": 3,
"registered_by": "Jens Madsen",
"date": "2026-10-26",
"excluded_from_invoice": false
},
{
"material_no": "0001",
"description": "Parkering",
"quantity": 1,
"registered_by": "Ali Yilmaz",
"date": "2026-10-26",
"excluded_from_invoice": true
}
]
} Adds a quantity of one material from your material list to the order. The line appears on the work slip and flows into the invoice draft unless the material is marked to stay off invoices. It reaches no one and is undone by deleting the line, so it runs without asking.
MCP callminuba_write → register_material
REST endpointPOST https://cotlet.dev/api/v1/minuba/orders/{order_id}/materials
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order ID from list_orders. |
| material_no string required | string | Material number from your material list. |
| quantity number required | number | Amount used. |
{
"order_id": "order_8c41d2",
"material_no": "material no",
"quantity": 1
} {
"order_number": 20418,
"material_no": "4410",
"description": "Fugemasse, 310 ml",
"quantity": 3,
"excluded_from_invoice": false
} Lists the files in the Documentation section of an order: file name, folder, uploader, upload date and who the file is visible to. It returns names and metadata, not the file content. Nothing is changed.
MCP callminuba_read → list_order_documents
REST endpointGET https://cotlet.dev/api/v1/minuba/order-documents
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order ID from list_orders. |
{
"order_id": "order_8c41d2"
} {
"order_number": 20418,
"files": [
{
"name": "vandskade-foer.jpg",
"folder": "Før",
"uploaded_by": "Jens Madsen",
"date": "2026-10-24",
"visible_to": "everyone"
},
{
"name": "tegning-bad.pdf",
"folder": "Tegninger",
"uploaded_by": "Mette Holm",
"date": "2026-10-22",
"visible_to": "administrators and billing"
}
]
} Sending an invoice is the one call a client hears about. Service agreements need that module on your account.
Lists invoices as Minuba shows them: drafts, invoiced and credited. Returns the invoice number, order, client, total and the export status. Set not_exported to see only invoices not yet sent to the accounting system. Nothing is changed.
MCP callminuba_read → list_invoices
REST endpointGET https://cotlet.dev/api/v1/minuba/invoices
| Name | Type | Description |
|---|---|---|
| state string | string | One of draft, invoiced, credited. |
| order_id string | string | Only invoices of this order. |
| not_exported boolean | boolean | Only invoices not yet exported to the accounting system. |
| cursor string | string | Next page cursor from the previous call. |
{
"invoices": [
{
"invoice_id": "inv_7710",
"invoice_number": 5521,
"order_number": 20405,
"client": "Skovvej Boligforening",
"state": "draft",
"net": 12000,
"vat": 3000,
"total": 15000,
"currency": "DKK",
"exported": false
}
],
"next_cursor": null
} Sends one invoice to the client by email or EAN, as the send action in Minuba does. The client receives it and is asked to pay. An approved invoice is locked in Minuba, so a mistake needs a credit note. By default you confirm each call; you can switch that off for this tool.
MCP callminuba_write → send_invoice
REST endpointPOST https://cotlet.dev/api/v1/minuba/invoices/{invoice_id}
| Name | Type | Description |
|---|---|---|
| invoice_id string required | string | Invoice ID from list_invoices. |
| channel string required | string | email or ean. |
| message string | string | Note in the email. |
{
"invoice_id": "invoice_8c41d2",
"channel": "channel"
} {
"invoice_id": "inv_7710",
"invoice_number": 5521,
"status": "sent",
"channel": "email",
"sent_to": "bestyrelse@skovvej.example",
"total": 15000,
"currency": "DKK"
} Lists the service agreements, which act as templates for orders at fixed intervals. Returns the client, the interval, the responsible employee and the date of the next visit. Needs the service agreement module on your account. Nothing is changed.
MCP callminuba_read → list_service_agreements
REST endpointGET https://cotlet.dev/api/v1/minuba/service-agreements
| Name | Type | Description |
|---|---|---|
| client_id string | string | Client ID from list_clients. |
| due_before date | date | Only agreements with a next visit before this date. |
{
"agreements": [
{
"agreement_id": "sa_204",
"client": "Skovvej Boligforening",
"name": "Årligt serviceeftersyn varmepumpe",
"interval": "yearly",
"responsible": "Jens Madsen",
"next_visit": "2026-11-18"
}
]
} Your logged-in Minuba profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 14 Minuba tools. Never the cookie or your password.
What your Minuba user sees: orders, clients, hours, invoices.
Users, rights, plan, password, payments and deleting.
You sign in again yourself. We never type your password.
Disable for agents, reset the browser, or change your Minuba password.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.
"The customer may under no circumstances hand over Minuba or related material to a third party, unless a separate written agreement exists."
The PRO terms have no clause on bots, scraping or AI agents. Minuba could still read the clause above broadly, and it may end an agreement with immediate effect for a breach. Cotlet works in your own session through the Minuba web app. We found no public case of a Minuba account closed for automation (checked 31 Oct 2026).
Ask Minuba for the official API key if you need an integration its terms bless. Cotlet suits you when you want results now and without code.
When Minuba moves a button or renames a field, the fix happens on our side and your prompts keep working. Minuba also updates monthly, usually on the second Thursday evening, according to its terms. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create a client or order draft | Delete it in Minuba |
| Register time | Delete or edit the entry |
| Register material | Delete the line on the work slip |
| Send an invoice | No, the client has it; an approved invoice is locked, so credit it |
1 of 14 tools ask first: send_invoice, the one that reaches a client and asks for money. Drafts, time and material lines reach nobody, so they run at once. Switch the wait off per tool for a scheduled run.
Time you register can reach the customer invoice, because the note may be copied onto it depending on your company settings.
{
"name": "register_time",
"arguments": {
"order_id": "ord_20418",
"date": "2026-10-31",
"start_time": "08:00",
"end_time": "14:00",
"work_type": "Montering",
"note": "Fuger og silikone"
}
} curl -X POST https://cotlet.dev/api/v1/minuba/times \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"order_id":"ord_20418","date":"2026-10-31","start_time":"08:00","end_time":"14:00","work_type":"Montering","note":"Fuger og silikone"}' {
"entry_id": "te_90340",
"order_number": 20418,
"date": "2026-10-31",
"hours": 6,
"work_type": "Montering",
"note": "Fuger og silikone"
} Scripts and cron jobs reach the same tools over REST at /api/v1/minuba, with the same key and price. A tool for a module your Minuba account lacks fails, and a failed call costs nothing. The tools table lists the REST path of each tool.
About $23 a monthfor a small firm with about 25 orders a month, 3,900 credits. Your Minuba plan is billed by Minuba as before.
| Job | Calls | Credits |
|---|---|---|
| Daily check of started and delayed orders | 3 × 22 | 660 |
| Weekly check for missing time entries | 2 × 4 | 80 |
| Log time and material from a message | 3 × 40 | 1,200 |
| Weekly invoice run, 5 invoices | 7 × 4 | 280 |
| Inquiry to client and order draft | 3 × 6 | 180 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,900 |
The month is our example: a small firm with about 25 orders, 6 new inquiries and a weekly invoice run of 5. Minuba PRO starts at 289 kr per administrative user a month ex VAT, and Minuba GO is free for up to two users (minuba.dk, 31 Oct 2026). Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Minuba API | Official REST API, 41 resources, per-user auth key. | Minuba issues the API key on request. It cannot send an invoice or read service agreements. |
| becomejgj/minuba-proxy | A small proxy that sends Squarespace form data to the Minuba API. | 0 stars, last commit 29 Jul 2025. One job, and it needs the API key. |
| Zapier, Make, n8n | Generic HTTP steps can call the official API. | No Minuba connector is listed. You build every call and still need the key. |
| Other order systems | Tools with an open API or built-in automation. | You move your orders and history off Minuba. |
There is no Minuba MCP server on GitHub or npm and no hosted one besides ours. If Minuba grants you the API key, a script on the official API is the leaner way to read orders and log time. Cotlet fits when you do not have the key, want an agent without code, or need the invoice send.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Minuba tools.
Create a free account at https://cotlet.dev, open Minuba under Integrations in the console and log in to Minuba in its Cloud Browser. The trial starts with your first app, no card asked.
Sign up at cotlet.dev, log in to Minuba once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Minuba account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Minuba: check which orders are started or delayed; find employees with missing time registrations; log time and materials from a message. You ask in plain words, and anything that reaches other people waits for your OK first.
Cotlet works in your own account, so the tools follow what your plan includes (checked 31 Oct 2026). Minuba lists service agreements, quotes and reminder handling under the administrative user of Minuba PRO, and Minuba GO is free for up to two users with order management and invoicing. Tools for a module your account lacks fail, and a failed call costs nothing.
Those of the Minuba user you sign in with. Minuba has an administrator and a billing role, so use one of them for invoice and client tools. A user without price access sees orders without prices.
Not in its API documentation (checked 31 Oct 2026). Nothing tells an agent that an order changed, so run your agent on a schedule, for example a daily list_orders pass.
No. Cotlet works in your signed-in Minuba session, so you need no API key from Minuba and no auth key. If you want the official API, Minuba issues the key on request at integrationer@minuba.dk.
Only the door is different. Both expose the same 14 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Minuba ApS.
Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy