Live

Tradify logo

Tradify API and MCP server

tradifyhq.com

Tradify publishes no API, developer docs or webhooks (checked 11 Oct 2026). Cotlet is a hosted MCP server and REST API for Tradify with 15 endpoints (6 read, 9 write): your AI agent signs in as you and does the work.

Endpoints
15 6 read, 9 write
Updated
How Cotlet connects your agent to Tradify
  1. Your agent

    Claude Code, Codex, Cursor or a script

  2. Cotlet

    MCP server and REST API · 15 endpoints

    cotlet.dev/mcp/v1

  3. Tradify logo

    Tradify

    Signed in as you on tradifyhq.com

You sign in once. We never store your password.

Official API

Does Tradify have an official API?

Tradify publishes no API, developer docs or webhooks (checked 11 Oct 2026). It connects to other tools through built-in integrations: QuickBooks, Xero, Sage, Stripe and Google Calendar.

What Tradify's own tools do compared with Cotlet
Task Tradify official Cotlet
Create jobs and update their status No Yes
Create quotes with line items No Yes
Email quotes and invoices to customers No Yes
Turn an accepted quote into an invoice No Yes
List unpaid and overdue invoices Partly Only after they sync to Xero, QuickBooks or Sage, through that app Yes
Record a payment on an invoice No Yes
Schedule staff appointments No Yes
Add customers No Yes

Sources: Tradify Help Center: Sage integration (one-way sync) · Tradify: integrations (QuickBooks, Xero, Stripe, Google Calendar) · Tradify Help Center: Syncing Information From Xero Into Tradify (two-way payments) · Tradify Help Center: Connect Your Google Calendar To Tradify (one-way)

Common use cases

What can an AI agent do in Tradify?

Cotlet is best for trade business owners and office managers who want their AI agent to handle jobs, quotes, invoices and the schedule in Tradify without running or fixing a server.

  • Chase overdue invoices after the reminders stop Runs: Weekly

    Record the bank transfers I paste below against their Tradify invoices, then list every invoice still overdue, totalled per customer, oldest first. Your agent calls list_invoices and record_payment.

  • Create a job and book staff from a phone call

    New job for Sam Lee at 12 Oak St: replace the hot water cylinder. Book Mike for Thursday morning, about four hours, and email Sam the confirmation. Your agent calls list_customers, create_customer, create_job, list_appointments and schedule_appointment.

  • Write a quote from your site notes

    Quote the bathroom rewire at 14 Elm Rd from my notes: 6 hours on the Standard rate, 6 LED downlights from the price list, one extractor fan at $85. Show me the draft before you send it. Your agent calls list_customers, list_jobs, create_quote and send_quote.

  • Invoice a deposit when a quote is accepted Runs: Weekly

    For every Tradify quote accepted this week, create a 30% deposit invoice, skip anything under $500 or already invoiced, and send them after I check the list. Your agent calls list_quotes, list_jobs, get_job, create_invoice_from_quote and send_invoice.

  • Send tomorrow's schedule by staff member Runs: Daily

    Who is booked where tomorrow? Send me the schedule by staff member. Your agent calls list_appointments.

  • Record a payment and close the job

    The Patel invoice was paid by bank transfer today, record it and mark the job complete. Your agent calls list_invoices, record_payment and update_job_status.

Endpoints

What is the Tradify API?

Cotlet's Tradify API exposes 15 endpoints for your own Tradify account: list jobs, get job, list customers, list quotes, list invoices, list appointments, create customer, create job, update job status, create quote, send quote, create invoice from quote, send invoice, record payment and schedule appointment. The list_jobs endpoint returns jobs with number, customer, site address, status and assigned staff. Each endpoint takes simple JSON inputs like status, customer_id or limit and works both as an MCP tool for agents and as a REST call for scripts.

All endpoints · 15 total

missing one? request an endpoint

  • POST

    list_jobs

    read

    Lists jobs with their number, customer, site address, status and assigned staff. By default it returns active jobs; set status to see to-invoice, on hold, complete or cancelled jobs. Pages hold up to 100 jobs; pass next_cursor back as cursor for the next page.

    POST /api/v1/tradify/list_jobs

    Input

    Input: list_jobs
    Parameter Type Description
    status enum active, unassigned, assigned, scheduled, in_progress, to_invoice, on_hold, complete or cancelled. Default: active.
    customer_id string Only jobs for this customer.
    search string Match job number, customer or description.
    limit integer 1 to 100. Default: 50.
    cursor string Next page cursor from the previous call.

    Example response

    {
      "jobs": [
        {
          "job_id": "j_20931",
          "number": "J-0418",
          "customer": "Sam Lee",
          "site_address": "12 Oak St",
          "status": "scheduled",
          "staff": [
            "Mike Ross"
          ],
          "description": "Replace hot water cylinder"
        }
      ],
      "next_cursor": null
    }
  • POST

    get_job

    read

    Returns one job with its description, site, tasks, notes, appointments, costs and the quotes and invoices linked to it. Use it before changing a job so your agent sees its current state.

    POST /api/v1/tradify/get_job

    Input

    Input: get_job
    Parameter Type Description
    job_id required string Job ID from list_jobs.

    Example response

    {
      "job_id": "j_20931",
      "number": "J-0418",
      "customer": "Sam Lee",
      "site_address": "12 Oak St",
      "status": "scheduled",
      "description": "Replace hot water cylinder",
      "appointments": [
        {
          "staff": [
            "Mike Ross"
          ],
          "start": "2026-10-15T08:00:00+13:00",
          "end": "2026-10-15T12:00:00+13:00"
        }
      ],
      "quotes": [
        "q_90102"
      ],
      "invoices": []
    }
  • POST

    list_customers

    read

    Lists customer profiles with contact details and sites. Search matches name, email or phone, so your agent can find the customer ID before creating a job or quote.

    POST /api/v1/tradify/list_customers

    Input

    Input: list_customers
    Parameter Type Description
    search string Match name, email or phone.
    limit integer 1 to 100. Default: 50.

    Example response

    {
      "customers": [
        {
          "customer_id": "c_48120",
          "name": "Sam Lee",
          "email": "sam@example.com",
          "phone": "021 555 0142",
          "sites": [
            "12 Oak St"
          ]
        }
      ]
    }
  • POST

    list_quotes

    read

    Lists quotes with customer, total, quote date, expiry date and status. By default it returns quotes awaiting acceptance; use status accepted with a since date to find quotes accepted in a period.

    POST /api/v1/tradify/list_quotes

    Input

    Input: list_quotes
    Parameter Type Description
    status enum draft, awaiting_acceptance, accepted, expired or cancelled. Default: awaiting_acceptance.
    since date Only quotes dated on or after this date.
    limit integer 1 to 100. Default: 50.

    Example response

    {
      "quotes": [
        {
          "quote_id": "q_90314",
          "number": "Q-1042",
          "customer": "Sam Lee",
          "total": "752.10",
          "quote_date": "2026-10-09",
          "expiry_date": "2026-11-09",
          "status": "accepted"
        }
      ]
    }
  • POST

    list_invoices

    read

    Lists invoices with customer, job, due date, total, amount paid and amount due. Amount due is total minus amount paid. By default it returns approved invoices; use status overdue to chase late payers.

    POST /api/v1/tradify/list_invoices

    Input

    Input: list_invoices
    Parameter Type Description
    status enum draft, approved, overdue or paid. Default: approved.
    customer_id string Only invoices for this customer.
    limit integer 1 to 100. Default: 50.

    Example response

    {
      "invoices": [
        {
          "invoice_id": "inv_7781",
          "number": "INV-2210",
          "customer": "Priya Patel",
          "job": "J-0402",
          "due_date": "2026-09-30",
          "total": "420.00",
          "paid": "0.00",
          "due": "420.00",
          "status": "overdue"
        },
        {
          "invoice_id": "inv_7790",
          "number": "INV-2219",
          "customer": "Tom Hale",
          "job": "J-0409",
          "due_date": "2026-10-02",
          "total": "980.00",
          "paid": "300.00",
          "due": "680.00",
          "status": "overdue"
        }
      ]
    }
  • POST

    list_appointments

    read

    Returns Scheduler appointments between two dates, each with staff, job, start and end times and notes. The range is at most 31 days. Pass staff names to see only those people.

    POST /api/v1/tradify/list_appointments

    Input

    Input: list_appointments
    Parameter Type Description
    from required date First day.
    to required date Last day, up to 31 days after from.
    staff string[] Only these staff members, by name.

    Example response

    {
      "appointments": [
        {
          "staff": [
            "Mike Ross"
          ],
          "job": "J-0418",
          "start": "2026-10-13T08:00:00+13:00",
          "end": "2026-10-13T12:00:00+13:00",
          "notes": "Bring new cylinder"
        }
      ]
    }
  • POST

    create_customer

    write

    Creates a customer profile, optionally with a site address. It reaches no one and stays inside Tradify, so it runs without asking first.

    POST /api/v1/tradify/create_customer

    Input

    Input: create_customer
    Parameter Type Description
    name required string Customer or company name.
    email string Email for quotes and invoices.
    phone string Phone number.
    address string Postal or site address.

    Example response

    {
      "customer_id": "c_48177",
      "name": "Priya Patel",
      "status": "created"
    }
  • POST

    create_job

    write

    Creates a job for a customer. The new job starts as Unassigned until an appointment or staff is added. It reaches no one and stays inside Tradify, so it runs without asking first.

    POST /api/v1/tradify/create_job

    Input

    Input: create_job
    Parameter Type Description
    customer_id required string Customer ID from list_customers or create_customer.
    description required string What the work is.
    site_address string Job address if different from the customer.
    reference string Your reference, e.g. a PO number.

    Example response

    {
      "job_id": "j_20931",
      "number": "J-0418",
      "customer": "Sam Lee",
      "site_address": "12 Oak St",
      "description": "Replace hot water cylinder",
      "status": "unassigned"
    }
  • POST

    update_job_status

    write

    Sets a manual status on a job: to_invoice, on_hold, complete, cancelled or the name of one of your custom statuses. It reaches no one and one more call sets it back, so it runs without asking first.

    POST /api/v1/tradify/update_job_status

    Input

    Input: update_job_status
    Parameter Type Description
    job_id required string Job ID from list_jobs.
    status required string to_invoice, on_hold, complete, cancelled or the name of a custom status.

    Example response

    {
      "job_id": "j_20931",
      "status": "complete"
    }
  • POST

    create_quote

    write

    Creates a draft quote with line items of type time, misc, price list or kit. Expiry date defaults to your expiry days setting. The quote stays a draft inside Tradify until send_quote, so it runs without asking first.

    POST /api/v1/tradify/create_quote

    Input

    Input: create_quote
    Parameter Type Description
    customer_id required string Customer ID.
    line_items required object List of items: type (misc, time, price_list or kit), description, quantity, unit price or billing rate.
    description string Shown on the quote.
    expiry_date date Default: your expiry days setting.
    tax_inclusive boolean Prices include tax. Default: false.
    job_id string Link the quote to an existing job.

    Example response

    {
      "quote_id": "q_90314",
      "number": "Q-1042",
      "status": "draft",
      "customer": "Sam Lee",
      "lines": [
        {
          "description": "Electrician labour",
          "quantity": 6,
          "amount": "510.00"
        },
        {
          "description": "LED downlights",
          "quantity": 6,
          "amount": "144.00"
        }
      ],
      "subtotal": "654.00",
      "tax": "98.10",
      "total": "752.10",
      "expiry_date": "2026-11-09"
    }
  • POST

    send_quote

    write

    Approves a draft quote and emails it to the customer with a link to accept or decline online. The email text defaults to your quote email template. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/tradify/send_quote

    Input

    Input: send_quote
    Parameter Type Description
    quote_id required string Quote ID from list_quotes.
    message string Email text. Default: your quote email template.
    send_me_a_copy boolean Copy to your own email. Default: false.

    Example response

    {
      "quote_id": "q_90314",
      "status": "awaiting_acceptance",
      "emailed_to": "sam@example.com"
    }
  • POST

    create_invoice_from_quote

    write

    Creates a draft invoice from an accepted quote. Mode entire invoices everything, remaining invoices what is not yet invoiced, percentage and fixed_amount take amount, and line_items picks lines. The invoice stays a draft until send_invoice, so it runs without asking first.

    POST /api/v1/tradify/create_invoice_from_quote

    Input

    Input: create_invoice_from_quote
    Parameter Type Description
    quote_id required string Quote ID from list_quotes.
    mode required enum entire, remaining, percentage, fixed_amount or line_items.
    amount string Percent or fixed amount, for those modes.

    Example response

    {
      "invoice_id": "inv_7802",
      "number": "INV-2231",
      "quote_id": "q_90314",
      "status": "draft",
      "total": "225.63"
    }
  • POST

    send_invoice

    write

    Approves a draft invoice and emails it to the customer, with payment reminders if you enabled them. The email text defaults to your invoice email template. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/tradify/send_invoice

    Input

    Input: send_invoice
    Parameter Type Description
    invoice_id required string Invoice ID from list_invoices.
    message string Email text. Default: your invoice email template.
    send_me_a_copy boolean Copy to your own email. Default: false.

    Example response

    {
      "invoice_id": "inv_7802",
      "status": "approved",
      "emailed_to": "sam@example.com"
    }
  • POST

    record_payment

    write

    Records a payment received against an invoice and reduces the amount due. If your accounting app is connected, the payment syncs to it. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/tradify/record_payment

    Input

    Input: record_payment
    Parameter Type Description
    invoice_id required string Invoice ID from list_invoices.
    amount required string Amount received.
    date date Payment date. Default: today.
    method string Payment method name from your settings.

    Example response

    {
      "invoice_id": "inv_7781",
      "payment_id": "pay_5530",
      "amount": "420.00",
      "date": "2026-10-11",
      "method": "Bank transfer",
      "due": "0.00",
      "status": "paid"
    }
  • POST

    schedule_appointment

    write

    Books a job appointment on the Scheduler for the staff you name; with no staff the appointment is unassigned. Set email_customer to send the customer a confirmation, otherwise nothing is emailed. By default you confirm each call; you can switch that off for this tool.

    POST /api/v1/tradify/schedule_appointment

    Input

    Input: schedule_appointment
    Parameter Type Description
    job_id required string Job ID from list_jobs.
    start required datetime ISO 8601 with time zone.
    end required datetime ISO 8601 with time zone.
    staff string[] Staff member names. Empty: unassigned appointment.
    notes string Notes for the crew.
    email_customer boolean Send the customer an email confirmation. Default: false.

    Example response

    {
      "appointment_id": "ap_3318",
      "job_id": "j_20931",
      "staff": [
        "Mike Ross"
      ],
      "start": "2026-10-15T08:00:00+13:00",
      "end": "2026-10-15T12:00:00+13:00",
      "customer_emailed": false
    }

Setup

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

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

Connect Tradify over MCP

  1. 1

    Create an account

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

  2. 2

    Sign in to Tradify once

    Open the connect page from the console and sign in to Tradify 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

    Record the bank transfers I paste below against their Tradify invoices, then list every invoice still overdue, totalled per customer, oldest first.

    Ask in plain words. Your agent finds the Tradify 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 Tradify 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/tradify/create_quote \
      -H "Authorization: Bearer $COTLET_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"customer_id":"c_48120","description":"Bathroom rewire, 6 downlights and extractor fan","line_items":[{"type":"time","description":"Electrician labour","quantity":6,"billing_rate":"Standard"},{"type":"misc","description":"LED downlights","quantity":6,"unit_price":"24.00"}],"tax_inclusive":false}'

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

  3. 3

    Read the result

    Example response · create_quote

    {
      "quote_id": "q_90314",
      "number": "Q-1042",
      "status": "draft",
      "customer": "Sam Lee",
      "subtotal": "654.00",
      "tax": "98.10",
      "total": "752.10",
      "expiry_date": "2026-11-09"
    }

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

Why Cotlet

Why use Cotlet for Tradify? 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 Tradify 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 Tradify changes, the tool pauses until we fix it.
    • Failed calls cost nothing.

Alternatives

Is there a Tradify MCP server on GitHub?

No MCP server for Tradify turned up, and Tradify has no API to build one on. Today the choice is doing the work by hand in the Tradify web app, or Cotlet, which signs in as you and does it for your agent.

Cotlet compared with a By hand in Tradify
By hand in Tradify Cotlet
Setup Nothing, you open Tradify and click Request access, sign in to Tradify once, add one MCP server or API key
Quotes from notes You type every line item into the quote form Your agent drafts the quote from your notes; nothing is emailed until you confirm
When Tradify changes You learn the new screens Our team tests it daily and fixes it for you; failed calls are free
Your Tradify session In your browser Encrypted in an EU vault, limited to the actions you allow, revoked in one click
When the session expires You sign in again Your agent gets a link to sign in again
Where it runs Your browser, while you are at the desk Hosted: Claude Code, Codex, Cursor, n8n and scripts, also on a schedule
Price Free, paid for with your time 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 Tradify 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 Tradify in plain text The facts on this page in one block: status, endpoints, access, pricing, contact.

Endpoint health

verified 2h ago

  • list_jobs passing
  • get_job passing
  • list_customers passing
  • list_quotes passing
  • list_invoices passing

+ 10 more endpoints

15/15 passing latest check self-healing

tradify.txt

Tradify publishes no API, developer docs or webhooks (checked 11 Oct 2026). It connects to other tools through built-in integrations: QuickBooks, Xero, Sage, Stripe and Google Calendar.
Cotlet provides a hosted MCP server and REST API for Tradify: 15 tools (6 read, 9 write).
Access       Request access at https://cotlet.dev/app/signup?app=tradify; we email the API key.

MCP server   https://cotlet.dev/mcp/v1
REST base    https://cotlet.dev/api/v1/tradify
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one.
Tools        list_jobs, get_job, list_customers, list_quotes, list_invoices, list_appointments, create_customer, create_job, update_job_status, create_quote, send_quote, create_invoice_from_quote, send_invoice, record_payment, schedule_appointment
Confirm      send_quote, send_invoice, record_payment, schedule_appointment (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/tradify-api-mcp-server.md

How access works:
1. The user requests access at https://cotlet.dev/app/signup?app=tradify (Tradify is pre-selected). Each request is reviewed and the API key is sent by email.
2. The user signs in to Tradify 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 Tradify 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 Tradify 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 Tradify's terms; Cotlet is not affiliated with Tradify.
Full page as Markdown

Automations

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

Yes. Cotlet does not replace your automation platform: it gives it a Tradify 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 chase overdue invoices after the reminders stop, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

Where to run Tradify 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/tradify/{tool}. Schedule Trigger node.
Make HTTP module: POST https://cotlet.dev/api/v1/tradify/{tool} with an Authorization: Bearer header and a JSON body. Scenario schedule.
Zapier Webhooks by Zapier: POST https://cotlet.dev/api/v1/tradify/{tool} with the same header and body. Schedule by Zapier trigger.
Your own script POST https://cotlet.dev/api/v1/tradify/{tool} with your API key. cron or GitHub Actions.

Pricing & limits

How much does the Tradify API cost?

Free 7-day trial with 5,000 credits, no card needed. After that, the Tradify 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 Tradify 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 Tradify 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 Tradify tool you allowed. When it expires, your agent gives you a link to sign in again. Security
Revoking access
Disconnect Tradify 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.
Tradify's terms
You use your own Tradify account and stay responsible for following Tradify's terms. Cotlet is independent and not affiliated with Tradify. 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 Tradify. Cotlet reviews each request and emails you your API key.

Do I need to be technical?

No. You sign in to Tradify 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 Tradify session would leave my computer.

Cotlet keeps your Tradify 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.

Can my agent email quotes and invoices on its own?

Only if you allow it. send_quote and send_invoice ask for your OK on each call by default, and you can switch that off per tool. Drafts made with create_quote and create_invoice_from_quote reach no customer.

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

No. Every call to send_quote, send_invoice, record_payment or schedule_appointment 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_customer, create_job, update_job_status, create_quote, create_invoice_from_quote runs without asking, because it sends nothing to anyone and one call undoes it.

Can I use the Tradify 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/tradify/{tool} from the HTTP Request node.

Give your agent access to Tradify.

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.