Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Your AI agent drafts estimates from inquiries, schedules and moves work orders, invoices finished jobs and chases what is overdue. Sign in to Markate once in your own Cloud Browser. No API request, no developer.
12 tools Read and write
Markate has no MCP server and no ChatGPT or Claude app. Its API key comes only after Markate reviews a request form ("Once approved, you receive your API key", Markate developer page, checked 8 Nov 2026). Cotlet runs 12 Markate tools hosted, over MCP for agents and REST for scripts, in your own Markate login.
| What you need | Markate API | Zapier app | Cotlet |
|---|---|---|---|
| Customers and estimates | After approval | Some triggers and actions | Yes |
| Schedule or move a job | After approval | Limited | Yes, after your OK |
| Invoices and overdue list | After approval | Limited | Yes |
| Ask in ChatGPT or Claude | No | No | Yes |
| Developer needed | Yes | Zap setup | No |
Checked 8 Nov 2026. Sources: Markate developer page: Request API Access · Markate pricing · Markate help: job schedule, calendar and map view
Once, in a browser we host for you.
One address in its settings.
It drafts the work, you OK what customers get.
We never keep your Markate password, and no estimate, invoice or schedule change reaches a customer until you approve it. Who can see your session
Sign in to Markate in a Cloud Browser. Create a Cotlet account, open Markate in its Cloud Browser, sign in with your Markate business login and press Enable for agents.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.
Markate shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned Markate on after connecting? Refresh the connector and the 12 tools appear.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet \
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": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
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: markate_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: markate_write Search matches name, phone, email and street, so a returning customer is found before a duplicate is made.
Returns customers with ID, contact details, service address and open balance. Pass the customer_id to the other tools.
MCP callmarkate_read → list_customers
REST endpointGET https://cotlet.dev/api/v1/markate/customers
| Name | Type | Description |
|---|---|---|
| query string | string | Name, phone, email or street. |
| page integer | integer | Page number. Default: 1. |
{
"customers": [
{
"customer_id": "C-21877",
"name": "Karen Whitfield",
"phone": "(480) 555-0142",
"address": "7140 E Main St, Scottsdale, AZ",
"balance": "0.00"
}
],
"page": 1
} Returns the customer record with notes, past and upcoming work orders, open estimates and unpaid invoices.
MCP callmarkate_read → get_customer
REST endpointGET https://cotlet.dev/api/v1/markate/customers/{customer_id}
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
{
"customer_id": "customer_8c41d2"
} {
"customer_id": "C-21877",
"name": "Karen Whitfield",
"work_orders": [
{
"work_order_id": "WO-5512",
"date": "2026-10-02",
"status": "Completed"
}
],
"open_estimates": 1,
"unpaid_invoices": 0
} Creates the customer with contact details and service address. Search list_customers first so a returning customer does not become a duplicate. Reaches no one, so it runs at once.
MCP callmarkate_write → create_customer
REST endpointPOST https://cotlet.dev/api/v1/markate/customers
| Name | Type | Description |
|---|---|---|
| name string required | string | Customer name. |
| phone string | string | Phone. |
| email string | string | Email. |
| address string | string | Service address. |
{
"name": "Jane Doe"
} {
"customer_id": "C-21940",
"name": "Marcus Delgado"
} Drafts use your own items and prices. Sending waits for your OK.
Creates the estimate as a draft from your items and prices. Sending it to the customer is a separate step.
MCP callmarkate_write → create_estimate
REST endpointPOST https://cotlet.dev/api/v1/markate/customers/{customer_id}/estimates
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
| items array required | array | Lines: item name from your items list, quantity, price. |
| note string | string | Note for the customer. |
{
"customer_id": "customer_8c41d2",
"items": "items"
} {
"estimate_id": "E-3307",
"customer": "Marcus Delgado",
"total": "420.00",
"status": "Draft"
} Sends the estimate with Markate's approval link, by email or SMS as your settings allow. By default you confirm each call; you can switch that off for this tool.
MCP callmarkate_write → send_estimate
REST endpointPOST https://cotlet.dev/api/v1/markate/estimates/{estimate_id}
| Name | Type | Description |
|---|---|---|
| estimate_id string required | string | Estimate ID from create_estimate. |
| channel string | string | email or sms. Default: email. |
{
"estimate_id": "estimate_8c41d2"
} {
"estimate_id": "E-3307",
"status": "Sent",
"sent_to": "marcus@example.com"
} One-off and recurring jobs on the schedule. New jobs and moves wait for your OK; your notification settings decide what the customer hears.
Returns work orders with customer, address, assigned employee, time and status, in schedule order.
MCP callmarkate_read → list_work_orders
REST endpointGET https://cotlet.dev/api/v1/markate/work-orders
| Name | Type | Description |
|---|---|---|
| date_from string required | string | ISO date. |
| date_to string | string | ISO date. Default: date_from. |
| employee string | string | Employee name. |
| status string | string | Scheduled, In progress, Completed. |
| page integer | integer | Page number. Default: 1. |
{
"date_from": "date from"
} {
"work_orders": [
{
"work_order_id": "WO-5530",
"customer": "Tanya Brooks",
"employee": "Luis",
"start": "2026-11-10T09:00",
"status": "Scheduled"
}
],
"page": 1
} Puts the job on the calendar with an employee. Your Markate notification settings decide whether the customer hears about it. By default you confirm each call; you can switch that off for this tool.
MCP callmarkate_write → schedule_work_order
REST endpointPOST https://cotlet.dev/api/v1/markate/customers/{customer_id}/work-order/schedule
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
| title string required | string | What the job is. |
| start string required | string | ISO date and time. |
| employee string | string | Employee name. |
| repeat string | string | Weekly, Monthly or empty for once. |
{
"customer_id": "C-21940",
"title": "Window cleaning, 22 panes",
"start": "2026-11-12T13:00",
"employee": "Luis",
"repeat": "Monthly"
} {
"work_order_id": "WO-5541",
"customer": "Marcus Delgado",
"employee": "Luis",
"start": "2026-11-12T13:00",
"repeat": "Monthly",
"status": "Scheduled"
} Moves the job on the schedule. Your notification settings decide whether the customer hears about it. By default you confirm each call; you can switch that off for this tool.
MCP callmarkate_write → reschedule_work_order
REST endpointPOST https://cotlet.dev/api/v1/markate/work-orders/{work_order_id}/reschedule
| Name | Type | Description |
|---|---|---|
| work_order_id string required | string | Work order ID from list_work_orders. |
| start string required | string | New ISO date and time. |
| employee string | string | New employee. Default: unchanged. |
{
"work_order_id": "work_order_8c41d2",
"start": "start"
} {
"work_order_id": "WO-5530",
"start": "2026-11-11T09:00",
"employee": "Luis",
"status": "Scheduled"
} Draft invoices and tasks reach no one, so they run at once. Sending an invoice waits for your OK.
Creates the invoice as a draft for the customer. It reaches no one until it is sent, so it runs at once.
MCP callmarkate_write → create_invoice
REST endpointPOST https://cotlet.dev/api/v1/markate/customers/{customer_id}/invoices
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from list_customers. |
| work_order_id string | string | Work order to bill. |
| items array | array | Lines when not from a work order. |
{
"customer_id": "customer_8c41d2"
} {
"invoice_id": "INV-8812",
"customer": "Tanya Brooks",
"total": "185.00",
"status": "Draft"
} Sends the invoice the way Markate does from its screen, with the online payment link if you take card payments. By default you confirm each call; you can switch that off for this tool.
MCP callmarkate_write → send_invoice
REST endpointPOST https://cotlet.dev/api/v1/markate/invoices/{invoice_id}
| Name | Type | Description |
|---|---|---|
| invoice_id string required | string | Invoice ID. |
| channel string | string | email or sms. Default: email. |
{
"invoice_id": "invoice_8c41d2"
} {
"invoice_id": "INV-8812",
"status": "Sent",
"sent_to": "tanya@example.com"
} Returns sent invoices not yet paid, oldest first, with amount due and days overdue.
MCP callmarkate_read → list_unpaid_invoices
REST endpointGET https://cotlet.dev/api/v1/markate/unpaid-invoices
| Name | Type | Description |
|---|---|---|
| min_days_overdue integer | integer | Only invoices overdue at least this many days. |
{
"invoices": [
{
"invoice_id": "INV-8744",
"customer": "Karen Whitfield",
"due": "240.00",
"days_overdue": 18
}
]
} Creates a task with a due date, for example a follow-up call. Visible to your team only, so it runs at once.
MCP callmarkate_write → add_task
REST endpointPOST https://cotlet.dev/api/v1/markate/tasks
| Name | Type | Description |
|---|---|---|
| title string required | string | Task text. |
| due string | string | ISO date. |
| assignee string | string | Employee name. |
{
"title": "title"
} {
"task_id": "T-1290",
"title": "Call Karen about the overdue invoice",
"due": "2026-11-10",
"assignee": "Office"
} Your signed-in Markate profile, AES-256-GCM encrypted, in Finland. No password.
The 12 Markate tools, never the session cookie.
What your login sees: customers, estimates, schedule, invoices.
Card payments, refunds, payroll, marketing sends, deletes.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your Markate password.
Cotlet never types your password: you sign in yourself, and the agent only uses the session. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
When Markate moves a button on the schedule or renames a sales screen, we fix the tool and your agent calls it the same way. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Schedule a work order | Yes, delete or move it in Markate |
| Move a work order | Move it back; a notice already sent stays sent |
| Send an estimate or invoice | No, it is in the customer's inbox; void it in Markate |
| Add a customer, draft or task | Yes, edit it in Markate |
4 of 12 tools ask first: send_estimate, schedule_work_order, reschedule_work_order, send_invoice. New customers, draft estimates, draft invoices and tasks reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "schedule_work_order",
"arguments": {
"customer_id": "C-21940",
"title": "Window cleaning, 22 panes",
"start": "2026-11-12T13:00",
"employee": "Luis",
"repeat": "Monthly"
}
} curl -X POST https://cotlet.dev/api/v1/markate/customers/C-21940/work-order/schedule \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Window cleaning, 22 panes","start":"2026-11-12T13:00","employee":"Luis","repeat":"Monthly"}' {
"work_order_id": "WO-5541",
"customer": "Marcus Delgado",
"employee": "Luis",
"start": "2026-11-12T13:00",
"repeat": "Monthly",
"status": "Scheduled"
} A cron job or n8n flow can call the same tools over REST at /api/v1/markate with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $42 a monthfor a home service business with 4 employees, 7,260 credits. Your Markate plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Estimate from an inquiry | 3 × 40 | 1,200 |
| Work order scheduled or moved | 2 × 90 | 1,800 |
| Invoices for finished jobs, daily | 6 × 22 | 1,320 |
| Overdue invoices chased, weekly | 6 × 4 | 240 |
| Invoice sent | 1 × 120 | 1,200 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 7,260 |
Markate publishes no job counts, so the month is our example. 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 |
|---|---|---|
| Markate API | Customers, estimates, work orders and invoices for your own developer. | Key only after an approved request; you build and host the code. |
| Zapier app | Triggers and actions between Markate and other apps. | Zaps to set up per job; no questions in plain words. |
| By hand | Every screen of Markate, one job at a time. | Your office's time. |
If you already have an approved Markate API key and a developer, building on the API is cheaper for simple syncs. To quote, schedule and invoice from ChatGPT or Claude this week, Cotlet works in the Markate account you already have.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), in business since 2019, led by its founders Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Markate tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open Markate under Integrations in the console and sign in to Markate in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to Markate 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 Markate account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Markate: turn an inquiry into an estimate; book recurring service; move a rained-out day. You ask in plain words, and anything that reaches other people waits for your OK first.
No. Markate has no ChatGPT or Claude connector of its own and Markate has no official MCP server (checked 8 Nov 2026). Cotlet is an independent one that works in ChatGPT, Claude, Cursor and any MCP client, on your signed-in account.
Yes, with Cotlet. ChatGPT finds or adds the customer and drafts the estimate from your items and prices. Sending it to the customer waits for your OK by default.
Yes, with Cotlet. ChatGPT puts one-off or recurring jobs on the schedule with the employee you name, and moves jobs when the weather or a sick day changes the plan, after your OK.
Yes, with Cotlet. ChatGPT drafts invoices for completed work orders, sends them with the payment link after your OK and lists what is overdue.
No. Cotlet works through your own Markate login, so you do not need to request and wait for an API key. It can do what your login can do in Markate.
Yes. Kate answers calls inside Markate; Cotlet lets ChatGPT or Claude work in the same account. A job Kate books shows up for your agent like any other work order.
Only in how it is called. Both carry the same 12 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Markate.
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