Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Orders, hours, materials and planning for your Ordrestyring account. Use it in ChatGPT, Claude or any AI agent over MCP, or in n8n, Make and scripts over REST.
12 tools Read and write
Ordrestyring has a GraphQL API and no official MCP server (checked 31 Oct 2026). The API key is not self-serve: you ask Ordrestyring support for it. Cotlet runs 12 Ordrestyring tools hosted, over MCP for agents and REST for scripts.
| What you need | GraphQL API | GitHub MCP server | Cotlet |
|---|---|---|---|
| Start without asking support | No, key from support | No, needs the same key | Yes, your own login |
| Works from an AI agent | No MCP server | Yes, you run it | Yes, hosted |
| Read orders, hours and materials | If you write queries | Yes | Yes |
| Log hours, plan crews, draft invoices | If you write mutations | Off by default, you opt in | Yes, risky ones ask first |
| Allowed by Ordrestyring's terms | Yes, official | Yes, official API | Uses the web app |
Checked 31 Oct 2026. Sources: Ordrestyring GraphQL API docs · Ordrestyring subscription terms · Ordrestyring pricing
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 Ordrestyring password, and nothing that lands in a fitter's app or locks hours happens 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 Ordrestyring for agents. Sign up, log in to Ordrestyring in its Cloud Browser, then press Enable for agents.
Add 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 Ordrestyring next to your other apps. If you enable Ordrestyring 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-ordrestyring \
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-ordrestyring": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-ordrestyring]
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: ordrestyring_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: ordrestyring_write Create a Cotlet API key with access to Ordrestyring and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
Connect Ordrestyring in Cotlet and enable it for agents. Account access: Your own Ordrestyring user (planning, customers and hour approval need the matching rights or an Admin; a basis user reaches only the orders assigned to them).
curl "https://cotlet.dev/api/v1/ordrestyring/orders?status=in_progress" \
-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": "ordrestyring",
"tool": "list_orders",
"result": {
"orders": [
{
"order_id": "10482",
"customer": "Nørregaard Ejendomme",
"title": "Badeværelse Nørrebro",
"status": "in_progress",
"responsible": "Jonas H."
},
{
"order_id": "10469",
"customer": "Fjordvej Boligforening",
"title": "Tagrende udskiftning",
"status": "in_progress",
"responsible": "Jonas H."
}
],
"next_cursor": null
}
} Returns the orders from the Orders menu with customer, status and responsible employee. The default statuses are open, in progress, closed, posted and cancelled, and your firm may have renamed them.
A basis user sees only the orders assigned to them and the statuses their group may see.
Replace in_progress with the status you need, or leave it out for every order you may see.
Keep the same filters when continuing a list. Compare changed record values as well as order numbers when refreshing your destination.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Read the hours sent for approval each Friday. Use list_time_entries in your configured payroll report. |
| Make | HTTP > Make a request | Read the economy totals of an order into a sheet. Use get_order in your configured business report. |
| Python or Node.js | REST API | Flag material lines where cost and sales price are equal. Use list_material_lines in your configured business report. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads Ordrestyring; 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.
An order needs a customer, so create_order takes a customer ID from the customer list. Basis users see only the orders assigned to them.
Lists the orders in the Orders menu (ordrer). Each row has the order number, customer and status. The default statuses are open, in progress, closed, posted and cancelled; your firm may have renamed or added labels. Basis users only see the orders they are assigned to and the statuses their group may see. Use get_order for hours and materials.
MCP callordrestyring_read → list_orders
REST endpointGET https://cotlet.dev/api/v1/ordrestyring/orders
| Name | Type | Description |
|---|---|---|
| status string | string | open, in_progress, closed, posted or cancelled. Omit for all you may see. |
| query string | string | Order number, customer name or text in the order. |
| cursor string | string | Next page cursor from the previous call. |
{
"orders": [
{
"order_id": "10482",
"customer": "Nørregaard Ejendomme",
"title": "Badeværelse Nørrebro",
"status": "in_progress",
"responsible": "Jonas H."
},
{
"order_id": "10477",
"customer": "Birgit Lund",
"title": "Varmepumpe service",
"status": "open",
"responsible": "Mikkel S."
},
{
"order_id": "10469",
"customer": "Fjordvej Boligforening",
"title": "Tagrende udskiftning",
"status": "in_progress",
"responsible": "Jonas H."
}
],
"next_cursor": null
} Returns what the order page shows: customer, status, responsible employee and the Economy tab (Økonomi): hours, materials and other costs booked so far, plus the offer total when the order came from an offer. Use list_time_entries and list_material_lines for the lines behind the totals.
MCP callordrestyring_read → get_order
REST endpointGET https://cotlet.dev/api/v1/ordrestyring/orders/{order_id}
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order number from list_orders. |
{
"order_id": "order_8c41d2"
} {
"order_id": "10482",
"customer": "Nørregaard Ejendomme",
"title": "Badeværelse Nørrebro",
"status": "in_progress",
"responsible": "Jonas H.",
"economy": {
"hours": 42.5,
"materials_cost": 18240,
"other_costs": 0,
"offer_total": 96000,
"currency": "DKK"
}
} Lists the customer list (kunder). An order cannot be created without a customer, so create_order takes a customer_id from here. The user needs the right to see the customer list; basis users may not have it.
MCP callordrestyring_read → list_customers
REST endpointGET https://cotlet.dev/api/v1/ordrestyring/customers
| Name | Type | Description |
|---|---|---|
| query string | string | Part of the customer name. |
| cursor string | string | Next page cursor from the previous call. |
{
"customers": [
{
"customer_id": "3021",
"name": "Nørregaard Ejendomme",
"city": "København N"
},
{
"customer_id": "3035",
"name": "Birgit Lund",
"city": "Frederiksberg"
}
],
"next_cursor": null
} Does what Create > Order does. An order needs a customer, so pass a customer_id from list_customers. A new order gets the default status and type set in your system settings, and an order template can fill in materials, forms and sub-orders. It reaches nobody until someone is planned on it, so it needs no approval. Cancel the order in Ordrestyring to undo it.
MCP callordrestyring_write → create_order
REST endpointPOST https://cotlet.dev/api/v1/ordrestyring/customers/{customer_id}/orders
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
| title string required | string | Short title of the job. |
| description string | string | What the job is. |
| template string | string | Name of an order template. Omit for none. |
{
"customer_id": "customer_8c41d2",
"title": "title"
} {
"order_id": "10491",
"customer": "Birgit Lund",
"title": "Utæt vandhane køkken",
"status": "open"
} Hours already approved cannot be edited by anyone. Approval needs the Time approval add-on and an Admin.
Does what My hours (Mine timer) and an order's Time spent (Timeforbrug) show: date, time type, order number, from and to, description, and the approval status when the Time approval add-on is on. Billable and non-billable hours are both returned. Pass order_id for one order or employee for one person.
MCP callordrestyring_read → list_time_entries
REST endpointGET https://cotlet.dev/api/v1/ordrestyring/time-entries
| Name | Type | Description |
|---|---|---|
| order_id string | string | Only hours on this order. |
| employee string | string | Employee name. Omit for yourself. |
| from date | date | First day of the period. |
| to date | date | Last day of the period. |
| cursor string | string | Next page cursor from the previous call. |
{
"entries": [
{
"entry_id": "h_88120",
"date": "2026-10-28",
"employee": "Jonas H.",
"time_type": "Svendetime",
"order_id": "10482",
"from": "07:00",
"to": "15:30",
"hours": 8,
"description": "Fliser i bad",
"approval": "pending"
},
{
"entry_id": "h_88131",
"date": "2026-10-29",
"employee": "Jonas H.",
"time_type": "Svendetime",
"order_id": "10482",
"from": "07:00",
"to": "14:30",
"hours": 7,
"description": "Fuger og armatur",
"approval": "pending"
}
],
"next_cursor": null
} Does what My hours (Mine timer) does: date, time type, order number, from and to and a description. Some time types, such as sickness, need no order. Hours that are already approved cannot be changed, by anyone. The entry reaches nobody and can be edited or deleted in Time spent on the order, so it needs no approval.
MCP callordrestyring_write → log_time
REST endpointPOST https://cotlet.dev/api/v1/ordrestyring/times
| Name | Type | Description |
|---|---|---|
| date date required | date | Day the work was done. |
| time_type string required | string | Time type as named in your firm, for example Svendetime. |
| order_id string | string | Order number. Omit for time types that need none. |
| from time required | time | Start time, HH:MM. |
| to time required | time | End time, HH:MM. |
| description string | string | Short text on the registration. |
{
"date": "2026-10-30",
"time_type": "Svendetime",
"order_id": "10482",
"from": "07:00",
"to": "15:00",
"description": "Fliser i bad"
} {
"entry_id": "h_88140",
"date": "2026-10-30",
"time_type": "Svendetime",
"order_id": "10482",
"from": "07:00",
"to": "15:00",
"hours": 8,
"approval": "not_sent"
} Does what the administrator's Time approval menu (Timegodkendelse) does, so it needs the Time approval add-on switched on and an Admin user. Approved hours can no longer be edited by anyone and are what the payroll integration picks up. A rejected entry goes back to the employee. By default you confirm each call; you can switch that off for this tool.
MCP callordrestyring_write → approve_hours
REST endpointPOST https://cotlet.dev/api/v1/ordrestyring/hours/approve
| Name | Type | Description |
|---|---|---|
| entry_ids array required | array | Entry IDs from list_time_entries with approval pending. |
| decision string required | string | approve or reject. |
{
"entry_ids": "entry ids",
"decision": "decision"
} {
"decision": "approve",
"approved": [
"h_88120",
"h_88131"
],
"status": "approved"
} Does what Material usage (Materialeforbrug) on an order shows: each line with item number, quantity, cost price and sales price. A line is marked manual when it was typed in the app or on the PC, and edi when it came from a supplier invoice in the Inbox. A line whose cost and list price are equal is flagged, because it often means your price agreement was not read in.
MCP callordrestyring_read → list_material_lines
REST endpointGET https://cotlet.dev/api/v1/ordrestyring/orders/{order_id}/material-lines
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order number from list_orders. |
{
"order_id": "order_8c41d2"
} {
"order_id": "10482",
"lines": [
{
"item_number": "FL-3030-HV",
"description": "Gulvflise 30x30 hvid",
"quantity": 14,
"cost_price": 118,
"sales_price": 189,
"source": "edi"
},
{
"item_number": "FUGE-5",
"description": "Fugemørtel 5 kg",
"quantity": 3,
"cost_price": 96,
"sales_price": 96,
"source": "manual",
"flagged": true
}
],
"currency": "DKK"
} Does what adding in Material usage (Materialeforbrug) does: search by item number or name in your wholesale catalogs and internal items, or type a line by hand with a price. From a catalog the cheapest supplier is the default. The line reaches nobody and can be edited or moved to another order in the app, so it needs no approval.
MCP callordrestyring_write → add_material_line
REST endpointPOST https://cotlet.dev/api/v1/ordrestyring/orders/{order_id}/material-lines
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order number from list_orders. |
| item string required | string | Item number or name to search for, or a free text line. |
| quantity number required | number | Quantity. |
| cost_price number | number | Only for a hand-typed line. |
| sales_price number | number | Only for a hand-typed line. |
{
"order_id": "order_8c41d2",
"item": "item",
"quantity": 1
} {
"order_id": "10482",
"item_number": "FL-3030-HV",
"description": "Gulvflise 30x30 hvid",
"quantity": 4,
"cost_price": 118,
"sales_price": 189,
"source": "manual"
} Planned time shows in the fitter's app at once. Invoice drafts are never sent from here.
Does what the Day overview (Dagsoversigt) shows for a day or a week: planned time per employee with order, start and end. Planned time with an order is what the fitter sees in the app. Personal and other events are returned too, without customer data.
MCP callordrestyring_read → list_planned_tasks
REST endpointGET https://cotlet.dev/api/v1/ordrestyring/planned-tasks
| Name | Type | Description |
|---|---|---|
| from date required | date | First day. |
| to date | date | Last day. Default is the same day. |
| employee string | string | Employee name. Omit for everyone you may see. |
{
"from": "2026-10-01"
} {
"tasks": [
{
"task_id": "p_5521",
"date": "2026-11-03",
"employee": "Jonas H.",
"kind": "planned_time",
"order_id": "10482",
"from": "07:00",
"to": "15:00"
},
{
"task_id": "p_5524",
"date": "2026-11-03",
"employee": "Mikkel S.",
"kind": "planned_time",
"order_id": "10477",
"from": "08:00",
"to": "12:00"
}
]
} Does what clicking a day in the Day overview (Dagsoversigt) does for planned time. It needs an order, because the fitter's app shows the order and customer details with it, so the employee sees it at once. Pass several employees to put them on the same order. Planned time is not worked time: it books no hours. Delete it in the Day overview to undo it. By default you confirm each call; you can switch that off for this tool.
MCP callordrestyring_write → plan_task
REST endpointPOST https://cotlet.dev/api/v1/ordrestyring/orders/{order_id}/task/plan
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order number from list_orders. |
| employees array required | array | Employee names. |
| date date required | date | Day to plan. |
| from time | time | Start time, HH:MM. Default is the firm's opening hours. |
| to time | time | End time, HH:MM. |
{
"order_id": "order_8c41d2",
"employees": "employees",
"date": "2026-10-01"
} {
"order_id": "10477",
"date": "2026-11-04",
"planned": [
{
"employee": "Mikkel S.",
"from": "08:00",
"to": "12:00"
}
],
"status": "planned"
} Does what fetching lines into an invoice draft (fakturakladde) does: the fitters' registered hours and materials on the order become lines. Nothing is sent to the customer or the accounting system. The draft stays in Ordrestyring until the owner reviews it, approves it and sends it, so the tool needs no approval.
MCP callordrestyring_write → create_invoice_draft
REST endpointPOST https://cotlet.dev/api/v1/ordrestyring/orders/{order_id}/invoice-drafts
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order number from list_orders. |
| include string | string | hours, materials or both. Default both. |
{
"order_id": "order_8c41d2"
} {
"order_id": "10482",
"draft_id": "d_2207",
"lines": 11,
"hours": 42.5,
"materials_total": 26110,
"currency": "DKK",
"status": "draft"
} Your logged-in Ordrestyring profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 12 Ordrestyring tools. Never the cookie.
What your user sees: orders, customers, hours, materials, planning.
Sending invoices, subscription, payroll, passwords and deleting.
Your agent gets a link. You sign in again, we never type your password.
Disable for agents, reset the browser, or change your Ordrestyring 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.
"Aceve reserves the right to put technical measures in place and enforce them, including access control, limits on simultaneous logins and IP validation, to protect the application from misuse and unauthorised use. Aceve may suspend access without notice on suspicion of unauthorised or improper use."
Section 2.4 makes each user licence personal, one person per account, and section 2.3 makes you answerable for what is done through your login. The terms never mention bots, scraping or AI agents. We found no public case of an Ordrestyring account closed for automation (checked 31 Oct 2026). Connect your own user, not a login shared with a colleague.
Ordrestyring may suspend access without notice on suspicion of misuse. Start with reads and a few writes, then widen.
When Ordrestyring moves a button or renames a field, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Create an order | Cancel the order in Ordrestyring |
| Log hours or book a material | Edit or delete the line on the order |
| Plan an employee | Delete the planned time in the Day overview; the fitter has already seen it |
| Approve hours | No, approved hours cannot be edited by anyone |
| Create an invoice draft | Delete or edit the draft; nothing was sent |
2 of 12 tools ask first: plan_task and approve_hours. One puts a job in a fitter's app, the other locks hours for payroll. Drafts, hours, materials and new orders reach nobody, so they run at once. Switch the wait off per tool for a scheduled run.
Logged hours stay editable until they are sent for approval and approved. Check payroll hours before you approve them.
{
"name": "log_time",
"arguments": {
"date": "2026-10-30",
"time_type": "Svendetime",
"order_id": "10482",
"from": "07:00",
"to": "15:00",
"description": "Fliser i bad"
}
} curl -X POST https://cotlet.dev/api/v1/ordrestyring/times \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2026-10-30","time_type":"Svendetime","order_id":"10482","from":"07:00","to":"15:00","description":"Fliser i bad"}' {
"entry_id": "h_88140",
"date": "2026-10-30",
"time_type": "Svendetime",
"order_id": "10482",
"from": "07:00",
"to": "15:00",
"hours": 8,
"approval": "not_sent"
} Scripts and cron jobs reach the same tools over REST at /api/v1/ordrestyring, with the same key and price. Time approval fails on an account without the add-on, and a failed call costs nothing. The tools table lists the REST path of each tool.
About $22 a monthfor a firm with 8 fitters, 3,740 credits. Your Ordrestyring licences are billed by Ordrestyring as before.
| Job | Calls | Credits |
|---|---|---|
| Create an order for a new job | 2 × 20 | 400 |
| Log hours and book materials after a job | 3 × 40 | 1,200 |
| Plan next week's crew | 5 × 4 | 200 |
| Approve hours before payroll | 2 × 4 | 80 |
| Draft invoices for finished orders | 3 × 12 | 360 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,740 |
The month is our example: 20 new orders, 40 jobs with hours and materials, 4 weekly plans and 12 invoice drafts. Ordrestyring lists 339 DKK per user a month for 1 to 10 users with a 12-month commitment (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 |
|---|---|---|
| borgels/mcp-server-ordrestyring | TypeScript MCP server on the GraphQL API with tools for orders, customers, time, materials, planning and invoice drafts. Read-only by default. 0 stars, created 13 May 2026, last commit 31 Oct 2026. | Independent project. Needs an API token from Ordrestyring support and you run it. Writes need an opt-in and a prepared operation hash. |
| LasseRafn/php-ordrestyring | PHP wrapper for the old REST v2 API. | Last commit 19 Apr 2023, the REST API is marked legacy. |
| Ordrestyring's listed integrations | Accounting and payroll systems such as e-conomic, Dinero, Uniconta and Zenegy. | Fixed flows for invoices and hours, nothing for an agent. |
| Your own GraphQL script | Anything the key allows. | Key from support, a developer to write and keep it, a hard cap of 60 requests a minute on every route. |
If you already hold an API token and run Node.js, the GitHub server is a reasonable free start. Cotlet suits firms with no token and no developer: you sign in with your own user, we host and fix the tools, and n8n, Make and scripts reach the same ones over REST.
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 Ordrestyring tools.
Create a free account at https://cotlet.dev, open Ordrestyring under Integrations in the console and log in to Ordrestyring in its Cloud Browser. The trial starts with your first app, no card asked.
Sign up at cotlet.dev, log in to Ordrestyring 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 Ordrestyring account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Ordrestyring: log the day\; book materials after a job; create an order from a customer call. You ask in plain words, and anything that reaches other people waits for your OK first.
You ask Ordrestyring support, by chat in the system or by email, and they send the token (checked 31 Oct 2026). Cotlet needs no key: it works in your own login.
Your own user. A basis user can log hours and book materials on orders assigned to them. Planning, hour approval and the customer list need the matching rights or an Admin, and approval also needs the Time approval add-on.
No. create_invoice_draft fetches hours and materials into an invoice draft and stops there. You or the owner review, approve and send it in Ordrestyring, which is also when the order moves to posted.
Yes, 14 days on its own site (checked 31 Oct 2026). After it the standard licence is 339 DKK per user a month for 1 to 10 users with a 12-month commitment. Cotlet adds no Ordrestyring fee.
Only the door is different. Both expose the same 12 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 Ordrestyring ApS or Aceve.
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