Live

Dubsado logo

Dubsado API and MCP server

dubsado.com

Dubsado has no public API (checked 11 Oct 2026). Cotlet is a hosted MCP server and REST API for Dubsado with 14 endpoints (7 read, 7 write): your AI agent signs in as you and does the work.

Endpoints
14 7 read, 7 write
Updated
How Cotlet connects your agent to Dubsado
  1. Your agent

    Claude Code, Codex, Cursor or a script

  2. Cotlet

    MCP server and REST API · 14 endpoints

    cotlet.dev/mcp/v1

  3. Dubsado logo

    Dubsado

    Signed in as you on dubsado.com

You sign in once. We never store your password.

Official API

Does Dubsado have an official API?

Dubsado has no public API (checked 11 Oct 2026). Its only official connection is Zapier, on the Premier plan: five triggers and one action, Create Project.

What Dubsado's own tools do compared with Cotlet
Task Dubsado official Cotlet
Create a project for a new client Partly Zapier "Create Project" action, Premier plan only Yes
List projects and clients Partly Zapier triggers fire on new projects and status changes; no listing Yes
Change a project status No Only Dubsado Flows, inside the app, can change a status Yes
Send a proposal, contract or questionnaire No Yes
Read form responses and form status Partly Zapier "Contract Signed" trigger only Yes
Create and send an invoice No Yes
List unpaid invoices Partly Zapier "New Payment Received" trigger only; no list Yes
Log a payment received outside Dubsado No Yes

Sources: Dubsado Help: Dubsado triggers and actions in Zapier · Dubsado Help: Connecting with Zapier (Premier plan required) · Dubsado triggers and actions on Zapier · Official AI Information: Dubsado (plans, Flows, integrations) · Dubsado Help: Flow triggers, client progress (Premier Flows)

Common use cases

What can an AI agent do in Dubsado?

Cotlet is best for freelancers and small creative studios on Dubsado who want their AI agent to open projects, send proposals and invoices, read form answers and chase payments without running or fixing a server.

  • Send a proposal to a new lead

    Maya Chen (maya@example.com) asked about a spring brand shoot in my Instagram DMs. Create a lead project "Spring brand shoot" and send her my Brand Photography proposal with a short personal note. Your agent calls list_clients, create_project, list_form_templates, apply_form_template and send_form.

  • Summarize questionnaire answers before calls Runs: Weekly

    Every Monday, summarize the questionnaire and lead capture answers my leads completed last week: what they want, the date, the budget, and anything that clashes with a booked job. Your agent calls list_projects, list_forms and get_form_responses.

  • Chase unsigned contracts Runs: Weekly

    Which contracts did I send that the client has not signed yet? Draft a short nudge for each, list the ones waiting on my countersignature, and move every project whose contract is signed to my "Booked" job status. Your agent calls list_forms, get_project and update_project_status.

  • Create and send an invoice

    Send the client in "Acme rebrand" an invoice for the Logo package, due in 14 days. Your agent calls list_projects, create_invoice and send_invoice.

  • Log offline payments on invoices Runs: Weekly

    Here are this week's checks and e-transfers. Match each one to the open Dubsado invoice it pays, log it as a manual payment, and list who still owes me. Your agent calls list_clients, list_invoices and record_manual_payment.

  • Move signed projects to a job status Runs: Daily

    Move every project where the contract is signed to the "Booked" job status. Your agent calls list_forms and update_project_status.

Endpoints

What is the Dubsado API?

Cotlet's Dubsado API exposes 14 endpoints for your own Dubsado account: list projects, get project, list clients, list form templates, list forms, get form responses, list invoices, create project, update project status, apply form template, send form, create invoice, send invoice and record manual payment. The list_projects endpoint returns projects with client, lead or job, status, tags and project date. Each endpoint takes simple JSON inputs like project_id, status or limit and works both as an MCP tool for agents and as a REST call for scripts.

All endpoints · 14 total

missing one? request an endpoint

  • POST

    list_projects

    read

    Lists projects newest first. Category is lead or job and follows the status: Dubsado statuses are either lead or job statuses. Filter by status name, category or creation date to see what came in since your last check. Pages hold up to 100 projects; pass next_cursor back as cursor for the next page.

    POST /api/v1/dubsado/list_projects

    Input

    Input: list_projects
    Parameter Type Description
    category enum lead, job or all. Default: all.
    status string Your project status name, e.g. "Proposal Sent".
    created_since date Only projects created on or after this date.
    limit integer 1 to 100. Default: 25.
    cursor string Next page cursor from the previous call.

    Example response

    {
      "projects": [
        {
          "project_id": "prj_3d81b07e",
          "title": "Spring brand shoot",
          "client": {
            "client_id": "cli_41a7e2",
            "name": "Maya Chen",
            "email": "maya@example.com"
          },
          "category": "lead",
          "status": "Proposal Sent",
          "tags": [
            "Brand"
          ],
          "project_date": "2027-04-18",
          "created_at": "2026-10-07T13:12:00Z"
        }
      ],
      "next_cursor": null
    }
  • POST

    get_project

    read

    Returns one project with its client, status, tags and notes, the forms in it with their status, and its invoices with balances. Use it to read a whole project in one call before you act on it.

    POST /api/v1/dubsado/get_project

    Input

    Input: get_project
    Parameter Type Description
    project_id required string Project ID from list_projects.

    Example response

    {
      "project_id": "prj_3d81b07e",
      "title": "Spring brand shoot",
      "client": {
        "client_id": "cli_41a7e2",
        "name": "Maya Chen",
        "email": "maya@example.com"
      },
      "category": "lead",
      "status": "Proposal Sent",
      "tags": [
        "Brand"
      ],
      "project_date": "2027-04-18",
      "notes": "Referred by a past client.",
      "forms": [
        {
          "form_id": "frm_6f2a91c4",
          "type": "proposal",
          "name": "Brand Photography proposal",
          "status": "sent"
        }
      ],
      "invoices": []
    }
  • POST

    list_clients

    read

    Lists clients, the people and companies you work with. Search by name or email. Each client lists its project IDs, which you pass to get_project. Pages hold up to 100 clients.

    POST /api/v1/dubsado/list_clients

    Input

    Input: list_clients
    Parameter Type Description
    query string Search by name or email.
    limit integer 1 to 100. Default: 25.
    cursor string Next page cursor from the previous call.

    Example response

    {
      "clients": [
        {
          "client_id": "cli_41a7e2",
          "name": "Maya Chen",
          "email": "maya@example.com",
          "phone": "+1 555 0100",
          "projects": [
            "prj_3d81b07e"
          ]
        }
      ],
      "next_cursor": null
    }
  • POST

    list_form_templates

    read

    Returns the templates you built in Dubsado: proposals, contracts, questionnaires, sub-agreements and lead capture forms. Pass template_id to apply_form_template. Templates are read only here.

    POST /api/v1/dubsado/list_form_templates

    Input

    Input: list_form_templates
    Parameter Type Description
    type enum proposal, contract, questionnaire, sub_agreement, lead_capture or all. Default: all.

    Example response

    {
      "templates": [
        {
          "template_id": "tpl_5c20aa",
          "name": "Brand Photography proposal",
          "type": "proposal"
        },
        {
          "template_id": "tpl_81d9f3",
          "name": "Photography contract",
          "type": "contract"
        },
        {
          "template_id": "tpl_2e7b60",
          "name": "Shoot questionnaire",
          "type": "questionnaire"
        }
      ]
    }
  • POST

    list_forms

    read

    Lists forms sent from projects, the same forms as Forms, All forms in Dubsado. Status is sent, viewed, action_required or completed. Action required means a contract waits for your countersignature. Filter by type, status or project. Pass form_id to get_form_responses.

    POST /api/v1/dubsado/list_forms

    Input

    Input: list_forms
    Parameter Type Description
    project_id string Only forms in this project.
    type enum proposal, contract, questionnaire, sub_agreement, lead_capture or all. Default: all.
    status string[] Any of sent, viewed, action_required, completed. Default: all statuses.
    limit integer 1 to 100. Default: 25.
    cursor string Next page cursor from the previous call.

    Example response

    {
      "forms": [
        {
          "form_id": "frm_a4410c7e",
          "project_id": "prj_8e15c3a2",
          "project_title": "Acme rebrand",
          "type": "contract",
          "name": "Design services contract",
          "status": "viewed"
        }
      ],
      "next_cursor": null
    }
  • POST

    get_form_responses

    read

    Returns the answers a client gave, in the order of the form, the same as the Responses view on the form. Only completed forms have responses. Questionnaires can be edited after completion, so the answers can change.

    POST /api/v1/dubsado/get_form_responses

    Input

    Input: get_form_responses
    Parameter Type Description
    form_id required string Form ID from list_forms or apply_form_template.
    include_empty boolean Include unanswered fields. Default: false.

    Example response

    {
      "form_id": "frm_9b42e6d1",
      "type": "questionnaire",
      "name": "Shoot questionnaire",
      "project_id": "prj_3d81b07e",
      "responses": [
        {
          "question": "What is the shoot for?",
          "answer": "New website and press kit."
        },
        {
          "question": "Preferred location",
          "answer": "Studio, downtown"
        }
      ]
    }
  • POST

    list_invoices

    read

    Lists invoices, newest first. The due date comes from the invoice payment plan and is empty when the invoice has none. Balance is the total minus the payments logged, including those logged by hand. Pages hold up to 100 invoices.

    POST /api/v1/dubsado/list_invoices

    Input

    Input: list_invoices
    Parameter Type Description
    status enum unpaid, paid or all. Default: unpaid.
    project_id string Only invoices in this project.
    due_before date Only invoices with a payment due before this date.
    limit integer 1 to 100. Default: 25.
    cursor string Next page cursor from the previous call.

    Example response

    {
      "invoices": [
        {
          "invoice_id": "inv_20417",
          "project_id": "prj_8e15c3a2",
          "project_title": "Acme rebrand",
          "number": "0042",
          "total": "1200.00",
          "paid": "400.00",
          "balance": "800.00",
          "due_date": "2026-10-11"
        }
      ],
      "next_cursor": null
    }
  • POST

    create_project

    write

    Creates a project from a title and a client email. If the email is not in Dubsado, a new client is created, with client_name if you give one. The status must be one of your project statuses and decides whether the project is a lead or a job. This call sends nothing to the client, so it asks no confirmation. You can archive or delete the project in Dubsado.

    POST /api/v1/dubsado/create_project

    Input

    Input: create_project
    Parameter Type Description
    title required string Project title, e.g. "Brand Photography".
    client_email required string Existing client, or a new one is created.
    client_name string Name for a new client.
    status string One of your project status names.
    project_date date Project date.
    tags string[] Project tags.
    notes string Notes on the project.

    Example response

    {
      "project_id": "prj_3d81b07e",
      "title": "Spring brand shoot",
      "client": {
        "client_id": "cli_41a7e2",
        "name": "Maya Chen",
        "email": "maya@example.com"
      },
      "category": "lead",
      "status": "Inquiry",
      "created_at": "2026-10-11T09:00:00Z"
    }
  • POST

    update_project_status

    write

    Moves one project to a status you already have. A project can move from a lead status to a job status; Dubsado does not turn a status from one kind into the other. The call sends nothing to the client and you undo it with one more call, so it asks no confirmation. A Flow that starts on a status change still runs.

    POST /api/v1/dubsado/update_project_status

    Input

    Input: update_project_status
    Parameter Type Description
    project_id required string Project ID from list_projects.
    status required string One of your project status names.

    Example response

    {
      "project_id": "prj_3d81b07e",
      "previous_status": "Proposal Sent",
      "status": "Booked",
      "category": "job"
    }
  • POST

    apply_form_template

    write

    Adds a copy of a template to one project and returns its form_id. Changes to the copy do not touch your template. Nothing is sent and the form is not added to the client portal, so this call asks no confirmation. Send it with send_form, or remove the copy in Dubsado.

    POST /api/v1/dubsado/apply_form_template

    Input

    Input: apply_form_template
    Parameter Type Description
    project_id required string Project ID from list_projects.
    template_id required string Template ID from list_form_templates.

    Example response

    {
      "form_id": "frm_6f2a91c4",
      "project_id": "prj_3d81b07e",
      "type": "proposal",
      "name": "Brand Photography proposal",
      "status": "not_sent"
    }
  • POST

    send_form

    write

    Emails the form to the client with a link to it. Without subject and message it uses your default email template for the form. After the client completes it, the form is locked, except questionnaires. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/dubsado/send_form

    Input

    Input: send_form
    Parameter Type Description
    form_id required string Form ID from list_forms or apply_form_template.
    subject string Email subject. Default: from your email template.
    message string Email body. Default: from your email template.

    Example response

    {
      "form_id": "frm_6f2a91c4",
      "project_id": "prj_3d81b07e",
      "type": "proposal",
      "status": "sent",
      "sent_to": "maya@example.com",
      "sent_at": "2026-10-11T09:02:00Z"
    }
  • POST

    create_invoice

    write

    Creates an invoice in a project from saved packages, line items, or both. Dubsado numbers it automatically. The invoice date is the issue date; due_date adds a payment plan with one payment on that date. An invoice worth more than $0 appears in the client portal before it is emailed, so this call needs your OK. Email it with send_invoice. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/dubsado/create_invoice

    Input

    Input: create_invoice
    Parameter Type Description
    project_id required string Project ID from list_projects.
    package_ids string[] IDs of your saved packages to add.
    line_items object[] List of { name, quantity, price, description }.
    due_date date Adds a payment plan with one payment due on this date.

    Example response

    {
      "invoice_id": "inv_20417",
      "project_id": "prj_8e15c3a2",
      "number": "0042",
      "status": "not_sent",
      "line_items": [
        {
          "name": "Logo package",
          "quantity": 1,
          "price": "1200.00"
        }
      ],
      "total": "1200.00",
      "balance": "1200.00",
      "due_date": "2026-10-25"
    }
  • POST

    send_invoice

    write

    Emails the invoice to the client with the invoice link. Without a message it uses your default email template. After it is sent, the automatic payment reminders of Dubsado follow the payment plan. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/dubsado/send_invoice

    Input

    Input: send_invoice
    Parameter Type Description
    invoice_id required string Invoice ID from list_invoices or create_invoice.
    message string Email body. Default: from your email template.

    Example response

    {
      "invoice_id": "inv_20417",
      "status": "sent",
      "sent_to": "client@example.com",
      "sent_at": "2026-10-11T09:05:00Z"
    }
  • POST

    record_manual_payment

    write

    Logs a payment you received outside Dubsado, such as cash or a check, on one invoice. The amount cannot be more than the remaining balance, and a payment for the full balance moves the invoice to Paid. It does not cancel autopay. Only manually logged payments can be edited or deleted, in Dubsado. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/dubsado/record_manual_payment

    Input

    Input: record_manual_payment
    Parameter Type Description
    invoice_id required string Invoice ID from list_invoices or create_invoice.
    amount required string Amount, e.g. "400.00". Not more than the remaining balance.
    paid_on required date Date received.
    method required enum cash, check, credit, e_transfer, paypal, stripe, square, authorize_net or other.
    description string Optional note on the payment.

    Example response

    {
      "invoice_id": "inv_20417",
      "amount": "400.00",
      "method": "check",
      "paid_on": "2026-10-12",
      "balance": "800.00",
      "invoice_status": "unpaid"
    }

Setup

How do I connect Dubsado to Claude Code, Codex or Cursor?

Connecting Dubsado takes three steps: request access, sign in to Dubsado once, then add one MCP server or call the REST API with the same key.

Connect Dubsado over MCP

  1. 1

    Create an account

    Sign up and add Dubsado in the console. Your API key is there too.

  2. 2

    Sign in to Dubsado once

    Open the connect page from the console and sign in to Dubsado the way you always do. We keep the session, never your password, and you can revoke it anytime.

  3. 3

    Add Cotlet to your agent

    Claude Code
    claude mcp add --transport http cotlet \
      https://cotlet.dev/mcp/v1 \
      --header "Authorization: Bearer $COTLET_API_KEY"
    Cursor
    {
      "mcpServers": {
        "cotlet": {
          "url": "https://cotlet.dev/mcp/v1",
          "headers": {
            "Authorization": "Bearer ${COTLET_API_KEY}"
          }
        }
      }
    }
    Codex
    # ~/.codex/config.toml
    [mcp_servers.cotlet]
    url = "https://cotlet.dev/mcp/v1"
    bearer_token_env_var = "COTLET_API_KEY"

    Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

  4. 4

    Ask your agent

    Prompt

    Maya Chen (maya@example.com) asked about a spring brand shoot in my Instagram DMs. Create a lead project "Spring brand shoot" and send her my Brand Photography proposal with a short personal note.

    Ask in plain words. Your agent finds the Dubsado tools on the server and calls them for you; anything that reaches other people waits for your OK unless you switch that off for a tool.

Call Dubsado over REST

  1. 1

    Export your API key

    Shell

    export COTLET_API_KEY="cotlet_..."

    Your scripts use the same API key as your agent. Keep it in an environment variable, never in your code.

  2. 2

    Call a tool

    curl

    curl https://cotlet.dev/api/v1/dubsado/send_form \
      -H "Authorization: Bearer $COTLET_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"form_id":"frm_6f2a91c4","subject":"Your proposal for Spring brand shoot"}'

    Every tool is a POST endpoint at /api/v1/dubsado/{tool}. Send its parameters as JSON, exactly as listed in the endpoints above.

  3. 3

    Read the result

    Example response · send_form

    {
      "form_id": "frm_6f2a91c4",
      "project_id": "prj_3d81b07e",
      "type": "proposal",
      "status": "sent",
      "sent_to": "maya@example.com",
      "sent_at": "2026-10-11T09:02:00Z"
    }

    You get plain JSON back, ready for your script. A failed call costs nothing.

Why Cotlet

Why use Cotlet for Dubsado? Hosted, safe and kept working.

  • Built for agents

    • One MCP server for every app you connect.
    • The same tools as a REST API for scripts and cron jobs.
    • Works with Claude Code, Codex and Cursor.
  • Your login stays yours

    • You sign in to Dubsado yourself. We keep only the session, encrypted with AES-256.
    • The model never sees a login.
    • No stored passwords, no CAPTCHA solving, no MFA bypass.
  • You stay in control

    • Pick read only, or read and write.
    • Anything that reaches other people waits for your OK, unless you switch it off per tool.
    • Revoke access in one click.
  • Kept working for you

    • We test every integration daily.
    • When Dubsado changes, the tool pauses until we fix it.
    • Failed calls cost nothing.

Alternatives

Is there a Dubsado MCP server on GitHub?

Zapier is the only official way in, and it is narrow: it reacts to five events and can create a project, but cannot send anything or read your data. Zapier also offers an MCP server for Dubsado, and it exposes the same five triggers and one action.

Cotlet compared with a Zapier
Zapier Cotlet
Setup Generate an API key under Settings, Connections (Admin or Owner) and paste it into Zapier Request access, sign in to Dubsado once in your browser, add one MCP server or API key
What it can do 5 triggers and 1 action: Create Project Projects, clients, forms, proposals, contracts, invoices and manual payments
Sending to clients Not possible; you send from Dubsado by hand Forms and invoices, each send confirmed by you by default
Dubsado plan Premier plan required (trial accounts include it) Works with the plan you have; features your plan lacks stay unavailable
When Dubsado changes Zapier maintains its Dubsado app Our team tests it daily and fixes it for you; failed calls are free
Your Dubsado session An API key you generated, shown once, which you treat like a password Session only, encrypted in an EU vault; we never store your password
Price Zapier plan on top of Dubsado Premier Free 7-day trial with 5,000 credits, then credits per call

Which one fits you

Pick Cotlet if

  • you are not a developer, or you do not want to maintain a server
  • you need it to keep working when Dubsado changes, without checking it yourself
  • your agent or a script should run it on a schedule, also while your computer is off

Pick an open-source server if

  • you are comfortable installing, updating and fixing it yourself
  • you want the session to stay on your own computer
  • you only need it now and then, from one MCP client

For AI agents

Cotlet for Dubsado in plain text The facts on this page in one block: status, endpoints, access, pricing, contact.

Endpoint health

verified 2h ago

  • list_projects passing
  • get_project passing
  • list_clients passing
  • list_form_templates passing
  • list_forms passing

+ 9 more endpoints

14/14 passing latest check self-healing

dubsado.txt

Dubsado has no public API (checked 11 Oct 2026). Its only official connection is Zapier, on the Premier plan: five triggers and one action, Create Project.
Cotlet provides a hosted MCP server and REST API for Dubsado: 14 tools (7 read, 7 write).
Access       Request access at https://cotlet.dev/app/signup?app=dubsado; we email the API key.

MCP server   https://cotlet.dev/mcp/v1
REST base    https://cotlet.dev/api/v1/dubsado
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one.
Tools        list_projects, get_project, list_clients, list_form_templates, list_forms, get_form_responses, list_invoices, create_project, update_project_status, apply_form_template, send_form, create_invoice, send_invoice, record_manual_payment
Confirm      send_form, create_invoice, send_invoice, record_manual_payment (by default the user approves each call; the user can switch this off per tool, e.g. for scheduled automations)
Markdown     https://cotlet.dev/integrations/dubsado-api-mcp-server.md

How access works:
1. The user requests access at https://cotlet.dev/app/signup?app=dubsado (Dubsado is pre-selected). Each request is reviewed and the API key is sent by email.
2. The user signs in to Dubsado once in a browser. An agent cannot do this step.
3. The API key goes into the MCP client or the REST call as a bearer token.

Fits: people who want a hosted Dubsado server that someone else maintains, including non-developers.

Policy: Cotlet never stores passwords, never solves CAPTCHAs, never bypasses MFA.
Company: legal details in the Terms of service at https://cotlet.dev/terms. Contact contact@cotlet.dev.
Session: the user signs in to Dubsado in a browser; Cotlet keeps only the session, AES-256 encrypted, revocable in the dashboard at any time.
Terms: the user stays responsible for following Dubsado's terms; Cotlet is not affiliated with Dubsado.
Full page as Markdown

Automations

Can Dubsado automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a Dubsado connection it does not have, with the same API key as your agent. Write actions ask for your OK by default; switch that off in your dashboard for the tools you choose, for example to summarize questionnaire answers before calls, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

Where to run Dubsado automations through Cotlet, and how to schedule them
Where How to connect How to schedule
Your AI agent Add https://cotlet.dev/mcp/v1 with your API key. A scheduled agent run, for example a Claude Code routine.
n8n MCP Client node with https://cotlet.dev/mcp/v1, or an HTTP Request node to https://cotlet.dev/api/v1/dubsado/{tool}. Schedule Trigger node.
Make HTTP module: POST https://cotlet.dev/api/v1/dubsado/{tool} with an Authorization: Bearer header and a JSON body. Scenario schedule.
Zapier Webhooks by Zapier: POST https://cotlet.dev/api/v1/dubsado/{tool} with the same header and body. Schedule by Zapier trigger.
Your own script POST https://cotlet.dev/api/v1/dubsado/{tool} with your API key. cron or GitHub Actions.

Pricing & limits

How much does the Dubsado API cost?

Free 7-day trial with 5,000 credits, no card needed. After that, the Dubsado API comes with the Cotlet plan, from $29 a month for 3,000 credits, with no limit on apps. Each month's credits stay valid for 3 months, so unused credits add up.

Cotlet plan sizes: price, monthly credits and price per credit
Size Price Credits / month Per credit
Solo $29/mo 3,000 about $0.0097
Pro $99/mo 12,000 about $0.0083
Agency $299/mo 40,000 $0.0075

Each successful call uses credits for the work it takes; failed calls and timeouts cost nothing. A hard spend cap is on by default. Authenticate with the Authorization: Bearer header.

About Cotlet

How Cotlet holds your access

Cotlet hosts MCP servers and REST APIs for apps with no usable API. Your agent works in your own Dubsado account.

Company details
The legal name, address and registration numbers of the company behind Cotlet are in the Terms of service. Terms
Your session
You sign in to Dubsado yourself, in your browser. We keep only the session, never your password: encrypted with AES-256 in an EU vault, isolated to your account and used only when your agent calls a Dubsado tool you allowed. When it expires, your agent gives you a link to sign in again. Security
Revoking access
Disconnect Dubsado in your dashboard: the session is deleted and access ends at once. Actions that reach other people wait for your OK unless you switch that off per tool.
What we never do
Store passwords, solve CAPTCHAs or bypass MFA.
Dubsado's terms
You use your own Dubsado account and stay responsible for following Dubsado's terms. Cotlet is independent and not affiliated with Dubsado. Terms
Contact
Questions about the company, security or an app: contact@cotlet.dev
About Cotlet

Frequently asked questions

How do I get access?

Request access and pick Dubsado. Cotlet reviews each request and emails you your API key.

Do I need to be technical?

No. You sign in to Dubsado once in your browser and paste one command into your agent, or one URL into n8n. Your agent can walk you through it. There is no server to install, update or fix.

Is a hosted server safe? My Dubsado session would leave my computer.

Cotlet keeps your Dubsado session encrypted with AES-256 in an EU vault, isolated to your account and used only for the tools you allow: read only, or read and write. The AI model never sees it, and you revoke it in one click. A local server keeps the same session in a file on your computer, readable by any program you run, and needs a fresh sign-in whenever it expires.

Do I need the Premier plan or Zapier?

No. Cotlet works in your own Dubsado account and does not use the Zapier connection, which Dubsado limits to the Premier plan (checked 11 Oct 2026). Features your plan lacks stay unavailable: public proposal links, for example, need Premier.

Can my agent send a contract for signature?

Yes. A contract is a form type: apply_form_template adds your contract to the project and send_form emails it, which you confirm by default. When the client signs, Dubsado locks the contract and emails the client a copy.

Will my agent overlap with my Dubsado Flows?

No. Flows keep running as you set them up. Your agent adds work on top of them, for example summarizing answers or drafting reminders, and Flows that start on a status change still run when it moves a project.

Can my agent post or send messages in Dubsado without asking me?

No. Every call to send_form, create_invoice, send_invoice or record_manual_payment waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals. create_project, update_project_status, apply_form_template runs without asking, because it sends nothing to anyone and one call undoes it.

Can I use the Dubsado API in n8n?

Yes. Add https://cotlet.dev/mcp/v1 with your API key in n8n's MCP Client node, or call https://cotlet.dev/api/v1/dubsado/{tool} from the HTTP Request node.

Give your agent access to Dubsado.

Request access and pick it. We review each request and email you your API key. Free 7-day trial with 5,000 credits, no card needed.