Invoicing & freelance CRM
Dubsado
Projects, proposals, contracts and invoices for creative businesses.
16 endpoints
Your AI agent logs enquiries as leads, sends quotes, contracts and invoices, records payments and plans your day. Sign in to 17hats once in your own Cloud Browser. No API, no new plan.
9 tools Read and write
17hats has no MCP server, no ChatGPT or Claude app and no public API. Its only key is for Zapier on the new subscription plan, and it "is limited to importing, updating and syncing Contacts" (17hats help, checked 9 Nov 2026). Cotlet runs 9 17hats tools hosted, over MCP for agents and REST for scripts, in your own 17hats login.
| What you need | 17hats API | Zapier app | Cotlet |
|---|---|---|---|
| Contacts and leads | No API | Contacts, new plan | Yes |
| Projects | No API | No | Yes |
| Quotes, contracts, invoices | No API | No | Yes, after your OK |
| Ask in ChatGPT or Claude | No | No | Yes |
| Plan needed | None | New plan | Any |
Checked 8 Nov 2026. Sources: 17hats help: Zapier integration · 17hats pricing · 17hats help: Tour of 17hats
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 17hats password, and no quote, contract, invoice or payment goes through until you approve it. Who can see your session
Sign in to 17hats in a Cloud Browser. Create a Cotlet account, open 17hats in its Cloud Browser, sign in with your 17hats 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.
17hats shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned 17hats on after connecting? Refresh the connector and the 9 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: 17hats_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: 17hats_write New contacts and projects reach no one by themselves, so they run at once. A workflow step that emails the client follows your workflow settings.
Returns contacts with ID, type, email, phone and their projects.
MCP call17hats_read → list_contacts
REST endpointGET https://cotlet.dev/api/v1/17hats/contacts
| Name | Type | Description |
|---|---|---|
| query string | string | Name or email. |
| type string | string | Hot Lead, Client, Cold Prospect, Other. |
| page integer | integer | Page number. Default: 1. |
{
"contacts": [
{
"contact_id": "CT-77120",
"name": "Megan Alvarez",
"type": "Hot Lead",
"email": "megan@example.com",
"projects": 1
}
],
"page": 1
} Creates the contact with type and details. Reaches no one, so it runs at once.
MCP call17hats_write → add_contact
REST endpointPOST https://cotlet.dev/api/v1/17hats/contacts
| Name | Type | Description |
|---|---|---|
| name string required | string | Full name. |
| email string | string | Email. |
| phone string | string | Phone. |
| type string | string | Hot Lead, Client, Cold Prospect, Other. Default: Hot Lead. |
| note string | string | What they asked for. |
{
"name": "Tyler Brennan",
"email": "tyler@example.com",
"type": "Hot Lead",
"note": "Headshots, early December"
} {
"contact_id": "CT-77188",
"name": "Tyler Brennan",
"type": "Hot Lead"
} Returns projects with contact, event date, status, unpaid invoice total and the next to-do.
MCP call17hats_read → list_projects
REST endpointGET https://cotlet.dev/api/v1/17hats/projects
| Name | Type | Description |
|---|---|---|
| status string | string | Lead, Booked, Completed. |
| date_from string | string | ISO date. |
| date_to string | string | ISO date. |
| page integer | integer | Page number. Default: 1. |
{
"projects": [
{
"project_id": "PJ-4410",
"contact": "Megan Alvarez",
"name": "Alvarez family session",
"date": "2026-11-22",
"status": "Booked",
"due": "350.00",
"next_todo": "Send prep guide"
}
],
"page": 1
} Creates the project and applies the workflow you name. Workflow steps that email the client follow your workflow settings. Reaches no one by itself, so it runs at once.
MCP call17hats_write → create_project
REST endpointPOST https://cotlet.dev/api/v1/17hats/contacts/{contact_id}/projects
| Name | Type | Description |
|---|---|---|
| contact_id string required | string | Contact ID from list_contacts. |
| name string required | string | Project name. |
| date string | string | ISO event date. |
| workflow string | string | Workflow name. |
{
"contact_id": "contact_8c41d2",
"name": "Jane Doe"
} {
"project_id": "PJ-4433",
"contact": "Tyler Brennan",
"name": "Brennan headshots",
"date": "2026-12-02",
"status": "Lead"
} Returns to-dos from workflows and your own list, with project and due date.
MCP call17hats_read → list_todos
REST endpointGET https://cotlet.dev/api/v1/17hats/todos
| Name | Type | Description |
|---|---|---|
| due_by string | string | ISO date. Default: today. |
{
"todos": [
{
"title": "Send prep guide",
"project": "Alvarez family session",
"due": "2026-11-09"
}
]
} Quotes, contracts, invoices and recorded payments wait for your OK.
Builds the quote from your items or a template and emails it to the client to accept. By default you confirm each call; you can switch that off for this tool.
MCP call17hats_write → send_quote
REST endpointPOST https://cotlet.dev/api/v1/17hats/projects/{project_id}/quotes
| Name | Type | Description |
|---|---|---|
| project_id string required | string | Project ID from list_projects. |
| items array required | array | Item name, quantity, price. |
| template string | string | Quote template name. |
{
"project_id": "project_8c41d2",
"items": "items"
} {
"quote_id": "Q-2219",
"project": "Brennan headshots",
"total": "450.00",
"status": "Sent"
} Fills the contract template for the project and emails it for the client's signature. By default you confirm each call; you can switch that off for this tool.
MCP call17hats_write → send_contract
REST endpointPOST https://cotlet.dev/api/v1/17hats/projects/{project_id}/contracts
| Name | Type | Description |
|---|---|---|
| project_id string required | string | Project ID from list_projects. |
| template string required | string | Contract template name. |
{
"project_id": "project_8c41d2",
"template": "template"
} {
"contract_id": "K-1180",
"project": "Brennan headshots",
"template": "Portrait session agreement",
"status": "Sent"
} Creates the invoice, with a payment schedule if you give one, and emails it with the payment link. Your automatic reminders then apply. By default you confirm each call; you can switch that off for this tool.
MCP call17hats_write → send_invoice
REST endpointPOST https://cotlet.dev/api/v1/17hats/projects/{project_id}/invoices
| Name | Type | Description |
|---|---|---|
| project_id string required | string | Project ID from list_projects. |
| items array required | array | Item name, quantity, price. |
| due string | string | ISO due date. |
{
"project_id": "project_8c41d2",
"items": "items"
} {
"invoice_id": "INV-6031",
"project": "Brennan headshots",
"total": "450.00",
"status": "Sent"
} Marks the amount paid on the invoice, for example a check or bank transfer, so reminders stop. By default you confirm each call; you can switch that off for this tool.
MCP call17hats_write → record_payment
REST endpointPOST https://cotlet.dev/api/v1/17hats/invoices/{invoice_id}/payments
| Name | Type | Description |
|---|---|---|
| invoice_id string required | string | Invoice ID. |
| amount number required | number | Amount paid. |
| method string | string | Check, cash, bank transfer. |
{
"invoice_id": "invoice_8c41d2",
"amount": 1
} {
"invoice_id": "INV-6012",
"paid": "350.00",
"balance": "0.00"
} Your signed-in 17hats profile, AES-256-GCM encrypted, in Finland. No password.
The 9 17hats tools, never the session cookie.
What your login sees: contacts, projects, documents, to-dos.
Bookkeeping, bank connections, texting, refunds, deletes.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your 17hats 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 17hats moves a button on a project or renames a document 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 |
|---|---|
| Add a contact or project | Yes, edit or archive it in 17hats |
| Send a quote, contract or invoice | No, it is in the client's inbox; void it in 17hats |
| Record a payment | Yes, delete the payment in 17hats |
4 of 9 tools ask first: send_quote, send_contract, send_invoice, record_payment. New contacts and projects reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "add_contact",
"arguments": {
"name": "Tyler Brennan",
"email": "tyler@example.com",
"type": "Hot Lead",
"note": "Headshots, early December"
}
} curl -X POST https://cotlet.dev/api/v1/17hats/contacts \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Tyler Brennan","email":"tyler@example.com","type":"Hot Lead","note":"Headshots, early December"}' {
"contact_id": "CT-77188",
"name": "Tyler Brennan",
"type": "Hot Lead"
} A cron job or n8n flow can call the same tools over REST at /api/v1/17hats with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $18 a monthfor a solo portrait and wedding photographer, 3,100 credits. Your 17hats plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Enquiry logged as a lead | 2 × 25 | 500 |
| Quote and contract sent | 3 × 10 | 300 |
| Invoice sent | 2 × 12 | 240 |
| Day planned | 2 × 22 | 440 |
| Payment recorded | 2 × 6 | 120 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,100 |
17hats publishes no usage 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 |
|---|---|---|
| Zapier app | Contacts between 17hats and your other tools. | New plan only; no projects, quotes or invoices. |
| 17hats workflows | Automatic emails and to-dos per project. | Fixed steps you set up; nothing on request. |
| By hand | Every screen of 17hats, one client at a time. | Your editing time. |
If you only need contacts synced to your email list, the Zapier app does that on the new plan. To log leads, quote and invoice from ChatGPT or Claude this week, Cotlet works in the 17hats 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 17hats tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open 17hats under Integrations in the console and sign in to 17hats in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to 17hats 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 17hats account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in 17hats: log enquiries as leads; quote and book; plan the day. You ask in plain words, and anything that reaches other people waits for your OK first.
No. 17hats has no ChatGPT or Claude connector of its own and 17hats has no official MCP server (checked 9 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 adds enquiries as hot leads and starts the project with your workflow, so nothing gets lost in your inbox.
Yes, with Cotlet. ChatGPT creates the invoice on the project and sends it with the payment link after your OK. Your automatic reminders then run as usual.
Yes, with Cotlet. ChatGPT builds the quote from your items and fills your contract template, and both wait for your OK before they go out.
No. Cotlet works through your own 17hats login on any plan. The Zapier key is limited to the new subscription plan and to contacts.
Only in how it is called. Both carry the same 9 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with 17hats.
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