Invoicing & freelance CRM
Dubsado
Projects, proposals, contracts and invoices for creative businesses.
16 endpoints
Your AI agent writes invoices from your job notes, reminds clients who are late, sends estimates and records the checks. Sign in to Invoice2go once in your own Cloud Browser. No API, no Zapier setup.
10 tools Read and write
Invoice2go has no MCP server, no ChatGPT or Claude app and no public API: its integrations site lists a REST API only as "Request this integration" (checked 8 Nov 2026). Cotlet runs 10 Invoice2go tools hosted, over MCP for agents and REST for scripts, in your own Invoice2go login.
| What you need | Invoice2go API | Zapier app | Cotlet |
|---|---|---|---|
| Create an invoice | No API | Fixed workflows | Yes |
| Send invoices and estimates | No API | Fixed workflows | Yes, after your OK |
| Remind late payers | No API | Fixed workflows | Yes, after your OK |
| Ask in ChatGPT or Claude | No | Through Zapier MCP | Yes |
Checked 8 Nov 2026. Sources: Invoice2go: REST API integration (request only) · Invoice2go integrations · Zapier: Invoice2go integrations · Invoice2go pricing
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 Invoice2go password, and no invoice, reminder, estimate or payment goes through until you approve it. Who can see your session
Sign in to Invoice2go in a Cloud Browser. Create a Cotlet account, open Invoice2go in its Cloud Browser, sign in with your Invoice2go account 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.
Invoice2go shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned Invoice2go on after connecting? Refresh the connector and the 10 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: invoice2go_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: invoice2go_write New invoices start as drafts with your default terms. Sending, reminders and payments wait for your OK.
Returns invoices with client, total, balance, due date and status (Draft, Sent, Overdue, Paid). Newest first.
MCP callinvoice2go_read → list_invoices
REST endpointGET https://cotlet.dev/api/v1/invoice2go/invoices
| Name | Type | Description |
|---|---|---|
| status string | string | draft, sent, overdue, paid or all. Default: all. |
| client string | string | Client name. |
| page integer | integer | Page number. Default: 1. |
{
"invoices": [
{
"invoice_number": "1084",
"client": "Rivera Dental",
"total": "1,450.00",
"balance": "1,450.00",
"due": "2026-10-30",
"status": "Overdue"
}
],
"page": 1
} Returns the lines, tax, deposit, payments recorded and the activity: sent, opened, reminded.
MCP callinvoice2go_read → get_invoice
REST endpointGET https://cotlet.dev/api/v1/invoice2go/invoices/{invoice_number}
| Name | Type | Description |
|---|---|---|
| invoice_number string required | string | Invoice number from list_invoices. |
{
"invoice_number": "invoice number"
} {
"invoice_number": "1084",
"client": "Rivera Dental",
"items": [
{
"description": "Electrical panel upgrade",
"quantity": 1,
"unit_price": "1,450.00"
}
],
"payments": [],
"activity": [
"Sent 2026-10-16",
"Opened 2026-10-17"
]
} Creates the invoice with your default terms, tax and payment options. It stays a draft until send_invoice, so it runs at once.
MCP callinvoice2go_write → create_invoice
REST endpointPOST https://cotlet.dev/api/v1/invoice2go/invoices
| Name | Type | Description |
|---|---|---|
| client string required | string | Client name; a new name creates the client. |
| items object[] required | object[] | Lines: description, quantity, unit price. |
| due_date string | string | ISO date. Default: your terms. |
| notes string | string | Notes shown on the invoice. |
{
"client": "client",
"items": [
"items"
]
} {
"invoice_number": "1092",
"client": "Sam Okafor",
"total": "640.00",
"status": "Draft"
} Sends the invoice with your payment options to the client's email or the addresses you pass. By default you confirm each call; you can switch that off for this tool.
MCP callinvoice2go_write → send_invoice
REST endpointPOST https://cotlet.dev/api/v1/invoice2go/invoices/{invoice_number}
| Name | Type | Description |
|---|---|---|
| invoice_number string required | string | Invoice number from list_invoices. |
| to string[] | string[] | Recipient emails. Default: the client's email. |
| message string | string | Email message. |
{
"invoice_number": "invoice number"
} {
"invoice_number": "1092",
"status": "Sent",
"sent_to": [
"sam@example.com"
]
} Sends a reminder for the invoice to the client, with your message if you pass one. By default you confirm each call; you can switch that off for this tool.
MCP callinvoice2go_write → send_reminder
REST endpointPOST https://cotlet.dev/api/v1/invoice2go/invoices/{invoice_number}/reminders
| Name | Type | Description |
|---|---|---|
| invoice_number string required | string | Invoice number from list_invoices. |
| message string | string | Reminder message. |
{
"invoice_number": "1084",
"message": "A friendly reminder that invoice 1084 is now past due."
} {
"invoice_number": "1084",
"reminded": "rivera@example.com",
"days_overdue": 9
} Adds a cash, check or bank transfer payment and updates the balance. No card is charged. By default you confirm each call; you can switch that off for this tool.
MCP callinvoice2go_write → record_payment
REST endpointPOST https://cotlet.dev/api/v1/invoice2go/invoices/{invoice_number}/payments
| Name | Type | Description |
|---|---|---|
| invoice_number string required | string | Invoice number from list_invoices. |
| amount string required | string | Amount, e.g. 1450.00. |
| method string | string | cash, check, bank_transfer or other. |
{
"invoice_number": "invoice number",
"amount": "amount"
} {
"invoice_number": "1084",
"payment": {
"method": "Check",
"amount": "1,450.00"
},
"balance": "0.00",
"status": "Paid"
} Estimates start as drafts and go out only after your OK.
Returns estimates with client, total and status, so the agent can follow up on open ones.
MCP callinvoice2go_read → list_estimates
REST endpointGET https://cotlet.dev/api/v1/invoice2go/estimates
| Name | Type | Description |
|---|---|---|
| status string | string | draft, sent, approved or all. Default: all. |
| page integer | integer | Page number. Default: 1. |
{
"estimates": [
{
"estimate_number": "E-0231",
"client": "Sam Okafor",
"total": "2,980.00",
"status": "Sent",
"date": "2026-10-29"
}
],
"page": 1
} Creates the estimate from your lines. It stays a draft until send_estimate, so it runs at once.
MCP callinvoice2go_write → create_estimate
REST endpointPOST https://cotlet.dev/api/v1/invoice2go/estimates
| Name | Type | Description |
|---|---|---|
| client string required | string | Client name. |
| items object[] required | object[] | Lines: description, quantity, unit price. |
| notes string | string | Notes shown on the estimate. |
{
"client": "client",
"items": [
"items"
]
} {
"estimate_number": "E-0236",
"client": "Grace Lin",
"total": "3,400.00",
"status": "Draft"
} Sends the estimate to the client's email or the addresses you pass. By default you confirm each call; you can switch that off for this tool.
MCP callinvoice2go_write → send_estimate
REST endpointPOST https://cotlet.dev/api/v1/invoice2go/estimates/{estimate_number}
| Name | Type | Description |
|---|---|---|
| estimate_number string required | string | Estimate number from list_estimates. |
| to string[] | string[] | Recipient emails. Default: the client's email. |
{
"estimate_number": "estimate number"
} {
"estimate_number": "E-0236",
"status": "Sent",
"sent_to": [
"grace@example.com"
]
} Clients with contact details and the total of their unpaid invoices.
Returns clients with email, phone and the total of their unpaid invoices.
MCP callinvoice2go_read → list_clients
REST endpointGET https://cotlet.dev/api/v1/invoice2go/clients
| Name | Type | Description |
|---|---|---|
| query string | string | Name, email or phone. |
| page integer | integer | Page number. Default: 1. |
{
"clients": [
{
"name": "Rivera Dental",
"email": "rivera@example.com",
"phone": "555-0177",
"owing": "1,450.00"
}
],
"page": 1
} Your signed-in Invoice2go profile, AES-256-GCM encrypted, in Finland. No password.
The 10 Invoice2go tools, never the session cookie.
What your login sees: clients, invoices, estimates, payments.
Card charges, payouts, payment settings, subscription, deletes.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your Invoice2go 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 Invoice2go moves the Send button or renames an invoice status, 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 |
|---|---|
| Create an invoice or estimate | Yes, edit or delete the draft |
| Record a payment | Remove the payment in Invoice2go |
| Send an invoice, estimate or reminder | No |
4 of 10 tools ask first: send_invoice, send_reminder, record_payment, send_estimate. Draft invoices and draft estimates reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "send_reminder",
"arguments": {
"invoice_number": "1084",
"message": "A friendly reminder that invoice 1084 is now past due."
}
} curl -X POST https://cotlet.dev/api/v1/invoice2go/invoices/1084/reminders \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message":"A friendly reminder that invoice 1084 is now past due."}' {
"invoice_number": "1084",
"reminded": "rivera@example.com",
"days_overdue": 9
} A cron job or n8n flow can call the same tools over REST at /api/v1/invoice2go with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $20 a monthfor a two-person electrical business, 3,500 credits. Your Invoice2go plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Invoice from job notes, sent | 3 × 40 | 1,200 |
| Overdue reminders, weekly (4) | 5 × 4 | 200 |
| Estimate built and sent | 2 × 15 | 300 |
| Payment recorded | 1 × 30 | 300 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,500 |
Invoice2go publishes no invoice 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: Invoice2go | Fixed workflows between Invoice2go and other apps. | A Zapier plan; the workflow does what you built, not what you ask. |
| Invoice2go REST API | Listed on the integrations site. | Only as "Request this integration"; no keys to use today. |
| By hand | Every screen of Invoice2go, one invoice at a time. | Your evenings. |
If a fixed Zapier workflow covers your need, use it. To write, send and chase invoices by asking in ChatGPT or Claude, Cotlet works in the Invoice2go account you already have.
Prefer code? Our public repo has a ready Invoice2go MCP config for Claude Code, ChatGPT and Cursor, an agent skill and a small command-line tool. Add your Cotlet API key and your agent works in your own Invoice2go account.
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 Invoice2go tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open Invoice2go under Integrations in the console and sign in to Invoice2go in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to Invoice2go 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 Invoice2go account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Invoice2go: create invoices from job notes; remind clients about overdue invoices; send estimates from site visit notes. You ask in plain words, and anything that reaches other people waits for your OK first.
No. Invoice2go has no ChatGPT or Claude connector of its own and Invoice2go 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. Tell ChatGPT the client, lines and due date and it creates the invoice as a draft, then sends it after your OK.
Yes, with Cotlet. ChatGPT finds overdue invoices and sends a reminder for each one after your OK, then tells you what is still outstanding.
Yes, with Cotlet. ChatGPT builds the estimate from your site notes and sends it to the client after your OK.
No public one. Invoice2go lists a REST API only as an integration you can request (checked 8 Nov 2026). Cotlet works through your own Invoice2go sign-in instead.
No. record_payment only records a payment you already received, such as cash or a check. Online payments stay in Invoice2go.
Only in how it is called. Both carry the same 10 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Invoice2go.
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