Yardi API and MCP server Let your AI agent run the busywork in Yardi Breeze.

Read Yardi Breeze properties, tenant balances and work orders through MCP or REST. Connect an AI agent or build a reporting workflow for your permitted properties.

  • Free 7-day trial, no card
  • Unofficial, not affiliated with Yardi
Yardi logo Yardi Cloud Browser

14 tools Read and write

Rent, repairs, owners

What can you automate in Yardi? Use an AI agent, a workflow or a script.

  • Text past-due tenants their balance

  • Email tenants after a late fee posts

  • Turn repair texts into work orders

  • Chase work orders open past a week

  • Send owners their monthly packet

  • Follow up with new prospects

Partner and Voyager only

Does Yardi have an MCP server or an API? Yes, for partners and Voyager. Not for a Breeze login.

Not for Breeze. Yardi licenses API access to approved software vendors through its Interfaces Program, and its official Virtuoso Connector for Claude is part of Virtuoso Enterprise on Voyager (checked 27 Oct 2026). Cotlet runs 14 tools hosted for your own Breeze account, over MCP for agents and REST for scripts.

  • The Interfaces Program charges an annual license fee per interface, and its standard partner tier asks for a company at least two years old with three active Voyager clients.
  • The Virtuoso Connector launched on 16 Jun 2026 and lists five tools: create, search and complete work orders, plus two lookups. Yardi says the full Virtuoso agent suite requires Voyager 8.
  • Zapier, Make and n8n have no Yardi Breeze app. Zapier's "Breeze" is a different product.
Yardi interface partners, the Virtuoso Connector and Cotlet compared for a Breeze account
What you need Interface partnerVirtuoso ConnectorCotlet
Works on Yardi Breeze Per vendor, not published Voyager, Virtuoso Enterprise Breeze and Breeze Premier
Tenants, ledgers and charges Inside that vendor's product Lookups only Yes
Work orders Inside that vendor's product Create, search, complete Create, update, notes
Text and email tenants, owner packets Not offered No tool Yes, after your OK
Allowed by Yardi's terms Yes, licensed Yes, official Uses the web app

Checked 27 Oct 2026. Sources: Yardi: Become an Interface Partner · Yardi: Virtuoso Connector for Claude (press release, 16 Jun 2026) · Yardi Virtuoso FAQ (Breeze vs Voyager 8) · Yardi Breeze: residential features and pricing · Yardi Breeze FAQ

Set up once

How does Cotlet connect to Yardi? One account, two ways to connect.

  1. 1Sign in to Yardi

    Use your own account in its Cotlet Cloud Browser.

  2. 2Choose MCP or REST

    Connect your agent or create a Cotlet API key.

  3. 3Run your workflow

    Ask your agent or send an HTTP request.

We never keep your Breeze password, and no tenant, vendor or owner hears from you until you approve it. Who can see your session

Any MCP client

Connect Yardi to your agent or workflow

Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.

  1. 1

    Open your Breeze login link. Sign up, then open the unique Breeze link from your welcome email in the Cloud Browser and sign in. Press Enable for agents.

  2. 2

    Add the Cotlet address. Paste https://cotlet.dev/mcp/v1 into your agent as an MCP server or connector.

  3. 3

    Approve the connection. Chat apps send you to a Cotlet sign-in. Code editors, n8n and scripts take an API key from the console instead.

Yardi says a Breeze account opens only from the unique link in the welcome email, not from a search engine, so keep that link at hand for the first sign-in. The shared address https://cotlet.dev/mcp/v1 carries Yardi next to your other apps. Enable Yardi after connecting? Refresh the connector so the new tools appear.

Claude
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect

Claude Code:
claude mcp add --transport http cotlet-yardi \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
ChatGPT
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth
Cursor
// ~/.cursor/mcp.json
{
  "mcpServers": {
    "cotlet-yardi": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
    }
  }
}
Codex
# ~/.codex/config.toml
[mcp_servers.cotlet-yardi]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
n8n
MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: yardi_read
Make, Zapier
Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: yardi_write
Scripts and HTTP

How to use the Yardi REST API

Create your Cotlet API key

Sign in to Yardi in its Cotlet Cloud Browser and enable the app for agents. Use your Yardi Breeze or Breeze Premier account through its own login link; property and role restrictions apply.

Create a Cotlet API key with access to Yardi and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.

Make your first Yardi API request

cURL: list_properties

curl https://cotlet.dev/api/v1/yardi/properties \
  -H "Authorization: Bearer $COTLET_API_KEY"

Read permitted Breeze property records

A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.

Illustrative response excerpt

{
  "status": "success",
  "app": "yardi",
  "tool": "list_properties",
  "result": {
    "properties": [
      {
        "property_id": "p_104",
        "name": "Maple Court",
        "type": "Residential",
        "address": "12 Maple St, Dayton, OH",
        "units": 24
      }
    ]
  }
}

Read result.properties; this list has search but no cursor, offset or page-size input. These workflows cover Breeze and Breeze Premier rather than Voyager.

Tenant reads use a cursor and default to current tenants, ordered by balance. The min_balance filter is whole dollars, while returned balance and rent amounts are decimal strings.

Preserve those units and exact amounts in reports. Work orders default to open, oldest first, and use returned cursors; tenant ledgers default to the last 90 days.

Yardi workflows for agents and automations

Yardi workflows you configure
ToolConnect throughExample workflow
n8nHTTP RequestCombine Breeze properties, tenants and ledgers into a balance review that preserves decimal amounts.
MakeHTTP > Make a requestRead work orders and work-order details into an oldest-outstanding maintenance report without assigning vendors.
Python or Node.jsREST APIRead prospects and permitted properties into a leasing follow-up review without outreach.

Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.

Cotlet reads Yardi; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.

Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.

The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.

8 read, 6 write

Yardi API endpoints and MCP tools

Tenants and rent5

Your Breeze user's property access applies: a user limited to some properties sees only their tenants. Late fees Breeze posts on its own appear in the ledger like any charge. A posted charge has no undo tool.

  • list_properties Properties in your Breeze account, with address and unit count. read

    Returns the properties your Breeze user can see, with address, property type and number of units. A user limited to some properties sees only those. Use property_id in the other tools.

    MCP callyardi_read → list_properties

    REST endpointGET https://cotlet.dev/api/v1/yardi/properties

    Parameters

    Parameters: list_properties
    NameTypeDescription
    search string string Name or address contains.

    Example response

    {
      "properties": [
        {
          "property_id": "p_104",
          "name": "Maple Court",
          "type": "Residential",
          "address": "12 Maple St, Dayton, OH",
          "units": 24
        },
        {
          "property_id": "p_118",
          "name": "Elm Street Duplexes",
          "type": "Residential",
          "address": "8 Elm St, Dayton, OH",
          "units": 4
        }
      ]
    }
  • list_tenants Tenants with property, unit, status, contact details and current balance. read

    Returns tenants with property, unit, status, email, phone and current balance, sorted by balance, highest first. Current tenants only by default. min_balance keeps tenants who owe at least that many whole dollars. Pass next_cursor back as cursor for the next page.

    MCP callyardi_read → list_tenants

    REST endpointGET https://cotlet.dev/api/v1/yardi/tenants

    Parameters

    Parameters: list_tenants
    NameTypeDescription
    property_id string string Only tenants of this property.
    status enum enum current, past, future or all. Default: current.
    min_balance integer integer Only tenants owing at least this amount, whole dollars.
    search string string Name, unit, email or phone contains.
    cursor string string Next page cursor from the previous call.

    Example response

    {
      "tenants": [
        {
          "tenant_id": "t_20481",
          "name": "Jordan Lee",
          "property": "Maple Court",
          "unit": "4B",
          "status": "current",
          "email": "jordan.lee@example.com",
          "phone": "+1 555 010 0142",
          "balance": "1250.00"
        },
        {
          "tenant_id": "t_20517",
          "name": "Priya Shah",
          "property": "Maple Court",
          "unit": "12A",
          "status": "current",
          "email": "priya.shah@example.com",
          "phone": "+1 555 010 0177",
          "balance": "640.00"
        }
      ],
      "next_cursor": null
    }
  • get_tenant One tenant: contacts, lease dates, rent, balance and resident portal status. read

    Returns one tenant with contacts, lease start and end, monthly rent, current balance and whether the tenant has registered in the RentCafe resident portal. Breeze texts only reach tenants who registered and opted in there, so check portal_registered before send_text.

    MCP callyardi_read → get_tenant

    REST endpointGET https://cotlet.dev/api/v1/yardi/tenants/{tenant_id}

    Parameters

    Parameters: get_tenant
    NameTypeDescription
    tenant_id string required string Tenant ID from list_tenants.

    Example input

    {
      "tenant_id": "tenant_8c41d2"
    }

    Example response

    {
      "tenant_id": "t_20481",
      "name": "Jordan Lee",
      "property": "Maple Court",
      "unit": "4B",
      "status": "current",
      "lease_start": "2026-02-01",
      "lease_end": "2027-01-31",
      "monthly_rent": "1200.00",
      "balance": "1250.00",
      "portal_registered": true,
      "sms_opt_in": true
    }
  • get_tenant_ledger Charges, payments and credits on a tenant account, with running balance. read

    Returns the ledger of one tenant, oldest first, with a running balance after each line. The period defaults to the last 90 days. Late fees and recurring rent that Breeze posts on its own show up as ordinary charges.

    MCP callyardi_read → get_tenant_ledger

    REST endpointGET https://cotlet.dev/api/v1/yardi/tenants/{tenant_id}/ledger

    Parameters

    Parameters: get_tenant_ledger
    NameTypeDescription
    tenant_id string required string Tenant ID from list_tenants.
    from date date Start date. Default: 90 days ago.
    to date date End date. Default: today.

    Example input

    {
      "tenant_id": "tenant_8c41d2"
    }

    Example response

    {
      "tenant_id": "t_20481",
      "from": "2026-08-01",
      "to": "2026-10-27",
      "opening_balance": "0.00",
      "lines": [
        {
          "date": "2026-09-01",
          "type": "Rent",
          "amount": "1200.00",
          "balance": "1200.00"
        },
        {
          "date": "2026-09-03",
          "type": "Payment",
          "amount": "-1200.00",
          "balance": "0.00"
        },
        {
          "date": "2026-10-01",
          "type": "Rent",
          "amount": "1200.00",
          "balance": "1200.00"
        },
        {
          "date": "2026-10-06",
          "type": "Late Fee",
          "amount": "50.00",
          "balance": "1250.00"
        }
      ],
      "closing_balance": "1250.00"
    }
  • post_charge Post a one-off charge to a tenant account. writeasks first

    Posts one charge to one tenant and returns the balance before and after. charge_type must be a charge code set up in your Breeze account. The date defaults to today. There is no undo tool: a wrong charge is reversed in Breeze. By default you confirm each call; you can switch that off for this tool.

    MCP callyardi_write → post_charge

    REST endpointPOST https://cotlet.dev/api/v1/yardi/tenants/{tenant_id}/charges

    Parameters

    Parameters: post_charge
    NameTypeDescription
    tenant_id string required string Tenant ID from list_tenants.
    charge_type string required string Charge code as set up in your Breeze account, e.g. Late Fee.
    amount string required string Decimal amount, e.g. 75.00.
    date date date Transaction date. Default: today.
    memo string string Shown on the ledger line.

    Example input

    {
      "tenant_id": "tenant_8c41d2",
      "charge_type": "charge type",
      "amount": "amount"
    }

    Example response

    {
      "transaction_id": "tx_559102",
      "tenant_id": "t_20481",
      "unit": "4B",
      "charge_type": "Lockout Fee",
      "amount": "75.00",
      "date": "2026-10-27",
      "previous_balance": "1250.00",
      "new_balance": "1325.00"
    }

Work orders4

Assignees are the vendors and employees already in your Breeze account. Photos on a work order are listed by name, not downloaded.

  • list_work_orders Work orders with status, property, unit, assignee and age. read

    Returns work orders, oldest first, with status, property, unit, tenant, assignee (a vendor or an employee) and creation date. Open work orders only by default. Pass next_cursor back as cursor for the next page.

    MCP callyardi_read → list_work_orders

    REST endpointGET https://cotlet.dev/api/v1/yardi/work-orders

    Parameters

    Parameters: list_work_orders
    NameTypeDescription
    status enum enum open, completed or all. Default: open.
    property_id string string Only work orders at this property.
    unit string string Only work orders on this unit.
    older_than_days integer integer Only work orders created at least this many days ago.
    cursor string string Next page cursor from the previous call.

    Example response

    {
      "work_orders": [
        {
          "work_order_id": "wo_7731",
          "title": "Water heater not heating",
          "property": "Elm Street Duplexes",
          "unit": "8B",
          "status": "In progress",
          "assigned_to": "Sam Ortiz",
          "created_at": "2026-10-14T09:12:00-04:00",
          "days_open": 13
        },
        {
          "work_order_id": "wo_7790",
          "title": "Hallway light out",
          "property": "Maple Court",
          "unit": "Common area",
          "status": "Open",
          "assigned_to": null,
          "created_at": "2026-10-19T15:40:00-04:00",
          "days_open": 8
        }
      ],
      "next_cursor": null
    }
  • get_work_order One work order with its details, progress notes and attachments. read

    Returns one work order with the description, assignee, schedule, progress notes newest first and the names of attached photos and documents. Attachments are listed, not downloaded.

    MCP callyardi_read → get_work_order

    REST endpointGET https://cotlet.dev/api/v1/yardi/work-orders/{work_order_id}

    Parameters

    Parameters: get_work_order
    NameTypeDescription
    work_order_id string required string Work order ID from list_work_orders.

    Example input

    {
      "work_order_id": "work_order_8c41d2"
    }

    Example response

    {
      "work_order_id": "wo_7731",
      "title": "Water heater not heating",
      "property": "Elm Street Duplexes",
      "unit": "8B",
      "tenant": "Marcus Webb",
      "status": "In progress",
      "assigned_to": "Sam Ortiz",
      "scheduled_for": "2026-10-20",
      "notes": [
        {
          "date": "2026-10-16",
          "author": "Sam Ortiz",
          "text": "Ordered a replacement thermostat, waiting on the part."
        }
      ],
      "attachments": [
        "heater-label.jpg"
      ]
    }
  • create_work_order Open a work order for a unit, optionally assigned to a vendor or employee. writeasks first

    Opens a work order for a property and unit with the status Open. Give tenant_id to tie it to the tenant who reported it and assigned_to to give it to a vendor or an employee in Breeze, who may be notified. By default you confirm each call; you can switch that off for this tool.

    MCP callyardi_write → create_work_order

    REST endpointPOST https://cotlet.dev/api/v1/yardi/properties/{property_id}/work-orders

    Parameters

    Parameters: create_work_order
    NameTypeDescription
    property_id string required string Property ID from list_properties.
    unit string string Unit name or number.
    tenant_id string string Tenant who reported it.
    title string required string Short description, e.g. "Kitchen sink leak".
    details string string Longer description for whoever does the work.
    assigned_to string string Vendor or employee name as it appears in Breeze.

    Example input

    {
      "property_id": "p_104",
      "unit": "12A",
      "tenant_id": "t_20517",
      "title": "Kitchen sink leak",
      "details": "Tenant emailed 7:40 am: water under the kitchen sink since last night. Has a dog, home after 3 pm.",
      "assigned_to": "Dana Ruiz"
    }

    Example response

    {
      "work_order_id": "wo_7812",
      "status": "Open",
      "property": "Maple Court",
      "unit": "12A",
      "tenant_id": "t_20517",
      "title": "Kitchen sink leak",
      "assigned_to": "Dana Ruiz",
      "created_at": "2026-10-27T08:30:00-04:00"
    }
  • update_work_order Change the status or assignee of a work order, or add a progress note. writeasks first

    Changes one work order: status, assignee, or a progress note added to it. Marking it completed closes it in Breeze, and the change can reach the assignee and the tenant. By default you confirm each call; you can switch that off for this tool.

    MCP callyardi_write → update_work_order

    REST endpointPATCH https://cotlet.dev/api/v1/yardi/work-orders/{work_order_id}

    Parameters

    Parameters: update_work_order
    NameTypeDescription
    work_order_id string required string Work order ID from list_work_orders.
    status enum enum open, in_progress or completed.
    assigned_to string string Vendor or employee name as it appears in Breeze.
    note string string Progress note added to the work order.

    Example input

    {
      "work_order_id": "work_order_8c41d2"
    }

    Example response

    {
      "work_order_id": "wo_7731",
      "status": "In progress",
      "assigned_to": "Sam Ortiz",
      "note_added": true
    }

Prospects, owners and messages5

Breeze texts reach only people who registered and opted in through RentCafe; the rest get email. Every message and owner packet waits for your OK.

  • list_prospects Prospects with the property they asked about, source and status. read

    Returns prospects newest first, with name, contact details, the property they asked about, the listing source and whether they applied. since keeps prospects who first contacted you on or after that date.

    MCP callyardi_read → list_prospects

    REST endpointGET https://cotlet.dev/api/v1/yardi/prospects

    Parameters

    Parameters: list_prospects
    NameTypeDescription
    property_id string string Only prospects for this property.
    since date date Only prospects created on or after this date.
    cursor string string Next page cursor from the previous call.

    Example response

    {
      "prospects": [
        {
          "prospect_id": "pr_3304",
          "name": "Ana Lopez",
          "email": "ana.lopez@example.com",
          "property": "Elm Street Duplexes",
          "source": "RentCafe.com",
          "status": "inquiry",
          "created_at": "2026-10-24"
        },
        {
          "prospect_id": "pr_3297",
          "name": "Sam Patel",
          "email": "sam.patel@example.com",
          "property": "Elm Street Duplexes",
          "source": "Property website",
          "status": "applied",
          "created_at": "2026-10-22"
        }
      ],
      "next_cursor": null
    }
  • list_owners Owners with their properties, ownership share and email. read

    Returns the owners in your Breeze account with email, the properties they own and the share of each, so a property with two owners shows both. An owner without an email comes back with email set to null.

    MCP callyardi_read → list_owners

    REST endpointGET https://cotlet.dev/api/v1/yardi/owners

    Parameters

    No parameters.

    Example response

    {
      "owners": [
        {
          "owner_id": "o_412",
          "name": "Hill Family Trust",
          "email": "hill.trust@example.com",
          "properties": [
            {
              "property": "Maple Court",
              "share": "100%"
            }
          ]
        },
        {
          "owner_id": "o_415",
          "name": "Ken Walsh",
          "email": null,
          "properties": [
            {
              "property": "Elm Street Duplexes",
              "share": "50%"
            }
          ]
        }
      ]
    }
  • send_text Text one tenant through Breeze Text Messaging (SMS). writeasks first

    Sends one text to one tenant through Breeze's Text Messaging (SMS), under your account. Breeze texts only tenants who registered and opted in through RentCafe; anyone else comes back as not_reachable and nothing is sent. By default you confirm each call; you can switch that off for this tool.

    MCP callyardi_write → send_text

    REST endpointPOST https://cotlet.dev/api/v1/yardi/tenants/{tenant_id}/texts

    Parameters

    Parameters: send_text
    NameTypeDescription
    tenant_id string required string Tenant ID from list_tenants.
    message string required string Text message to the tenant.

    Example input

    {
      "tenant_id": "tenant_8c41d2",
      "message": "message"
    }

    Example response

    {
      "tenant_id": "t_20481",
      "to": "Jordan Lee",
      "status": "sent",
      "sent_at": "2026-10-27T09:05:00-04:00"
    }
  • send_email Email one tenant or prospect from Breeze. writeasks first

    Sends one email from Breeze to one tenant or prospect, under your account. Give tenant_id or prospect_id, not both. By default you confirm each call; you can switch that off for this tool.

    MCP callyardi_write → send_email

    REST endpointPOST https://cotlet.dev/api/v1/yardi/emails

    Parameters

    Parameters: send_email
    NameTypeDescription
    tenant_id string string Tenant ID from list_tenants.
    prospect_id string string Prospect ID from list_prospects.
    subject string required string Email subject.
    body string required string Email text.

    Example input

    {
      "subject": "subject",
      "body": "body"
    }

    Example response

    {
      "to": "Priya Shah",
      "email": "priya.shah@example.com",
      "subject": "Work order logged: kitchen sink leak",
      "status": "sent",
      "sent_at": "2026-10-27T08:32:00-04:00"
    }
  • send_owner_report Email an owner their report packet for a month. writeasks first

    Generates the owner's report packet for the month, as set up for that owner in Breeze, and emails it to the owner's address on file. An owner without an email returns no_email and nothing is sent. By default you confirm each call; you can switch that off for this tool.

    MCP callyardi_write → send_owner_report

    REST endpointPOST https://cotlet.dev/api/v1/yardi/owners/{owner_id}/report

    Parameters

    Parameters: send_owner_report
    NameTypeDescription
    owner_id string required string Owner ID from list_owners.
    month string required string Month as YYYY-MM.

    Example input

    {
      "owner_id": "owner_8c41d2",
      "month": "month"
    }

    Example response

    {
      "owner_id": "o_412",
      "owner": "Hill Family Trust",
      "month": "2026-09",
      "email": "hill.trust@example.com",
      "status": "sent"
    }
Encrypted, revocable

Who can see my Yardi Breeze session, and how do I revoke it?

  • What we store

    Your signed-in Breeze profile, AES-256-GCM encrypted, on servers in Finland. Never the password.

  • What your agent gets

    The 14 Yardi tools, not the session cookie.

  • What the session sees

    What your Breeze user sees: tenants, ledgers, work orders, prospects and owners.

  • What no tool touches

    Bank accounts, owner and vendor payments, users, security settings and your Breeze subscription.

  • If Breeze asks for a code

    Breeze sign-in can ask for a second factor. You enter it yourself; we never do.

  • How to cut access

    Disable Yardi for agents, reset the Cloud Browser, or sign the session out in Breeze.

Tenant names, balances and phone numbers pass through your agent, so treat its chat history like the Breeze screen it read from. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results); we have no SOC 2 report or third-party pentest yet.

Account risk

Is it against Yardi's terms? Account safety Yes: Yardi's policy names intelligent agents.

"Use or attempt to use [other than generally-available, standard third party web browsers (e.g., Microsoft Edge or Google Chrome)] any engine, software, tool, agent or other device or mechanism (including without limitation web crawlers, scrapers, browsers, spiders, robots, avatars or intelligent agents) to navigate, search, collect or download information from Yardi Technology"
Yardi Acceptable Use Policy, item 4, read 27 Oct 2026

The same policy forbids access "by any means other than through the Yardi-provided user interface". The Breeze Terms of Use add that the software cannot be used to scrape data other than your own into another system. Cotlet drives a standard Chrome on Breeze's own screens, but the browser exception does not cover the agent that drives it, so Yardi could treat this as a breach and suspend the account. Yardi has sued a rival over access to its software (Entrata, settled in 2019); we found no case against a customer automating their own Breeze account (checked 27 Oct 2026). Weigh that before you connect a portfolio you cannot afford to lose access to.

How we keep it close to your own use

  • Your own Breeze login, opened by you from your own link
  • One Cloud Browser with a steady IP and cookies, not a new device each call
  • Your own data only: no Yardi Matrix or listing data is copied out
  • Texts, emails, charges and owner packets wait for your OK
  • If Yardi objects, we pause the Yardi tools for everyone within 24 h

Rent reminders and late-fee notices are regulated where your tenants live. Your agent writes the text you approve; the wording stays your call.

Tested every 12 h

What happens when Yardi changes Breeze? We fix the tool; your prompts keep working.

between tests of the Yardi reads
12 h
between tests of writes that reach tenants or owners
24 h
for a call to a Yardi tool paused for repair
$0

Yardi updates Breeze in the cloud on its own schedule, with nothing for you to install. When a screen moves, our side changes and your scheduled reminders keep running. status.cotlet.dev watches the site, console and API every 3 minutes.

6 tools ask first

Approvals, undo and mistakes Tenants, vendors and owners hear nothing until you say so.

  1. 01 Matches the message list_tenants finds the unit from the email or text you pasted.
  2. 02 Checks for a duplicate list_work_orders shows anything already open on that unit.
  3. 03 Waits for your OK create_work_order appears in your Cotlet console with the assignee.
  4. 04 Tells the tenant send_email confirms the work order, again after your OK.
Which Yardi Breeze actions can be undone
ActionUndo
Create a work orderAdd a note and mark it completed with update_work_order or in Breeze
Update a work orderSet the old status or assignee back with update_work_order
Post a chargeReverse it in Breeze; there is no undo tool
Text a tenantNo, the text is sent
Email a tenant or prospectNo, the email is sent
Send an owner packetNo, the owner has it

All 6 write tools ask first, because each one can reach a tenant, a vendor, an owner or a ledger. The 8 reads run at once. For a Monday reminder run you can switch the wait off for send_text alone and keep it on for charges.

An assignee may be notified the moment a work order is created, so the approval shows who it goes to.

MCP call
{
  "name": "create_work_order",
  "arguments": {
    "property_id": "p_104",
    "unit": "12A",
    "tenant_id": "t_20517",
    "title": "Kitchen sink leak",
    "details": "Tenant emailed 7:40 am: water under the kitchen sink since last night. Has a dog, home after 3 pm.",
    "assigned_to": "Dana Ruiz"
  }
}
REST
curl -X POST https://cotlet.dev/api/v1/yardi/properties/p_104/work-orders \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"unit":"12A","tenant_id":"t_20517","title":"Kitchen sink leak","details":"Tenant emailed 7:40 am: water under the kitchen sink since last night. Has a dog, home after 3 pm.","assigned_to":"Dana Ruiz"}'
Tool output
{
  "work_order_id": "wo_7812",
  "status": "Open",
  "property": "Maple Court",
  "unit": "12A",
  "tenant_id": "t_20517",
  "title": "Kitchen sink leak",
  "assigned_to": "Dana Ruiz",
  "created_at": "2026-10-27T08:30:00-04:00"
}

A script or cron job calls the same tools over REST under /api/v1/yardi, with one key and one price. Failed calls are free. Each tool row above shows its REST path.

Pay per call

How much does the Yardi MCP server cost?

About $17 a monthfor a 100-unit Breeze portfolio, 2,920 credits. Yardi keeps billing your Breeze plan as before.

A month of Yardi Breeze jobs for 100 units and 8 owners, in credits
JobCallsCredits
Text past-due tenants12 × 4480
Email tenants after a late fee9 × 190
Log a work order from a message4 × 10400
Chase open work orders9 × 4360
Send owner report packets9 × 190
Cloud Browser, 30 days1,500
Total2,920
  • Free 7-day trial, no card
  • 10 credits per successful call, MCP or REST
  • 50 credits a day for the Cloud Browser
  • No Yardi interface license or Voyager needed, only your Breeze login

The month is our example of 142 calls. For scale, Breeze itself costs $1 per unit a month with a $100 minimum, and Breeze Premier has a $400 minimum (yardibreeze.com, 27 Oct 2026). Dollars at the $29 pack rate.

Cotlet credit packs: price, credits and calls at 10 credits each
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.

Other options

Yardi MCP server: official, GitHub or hosted On Voyager, try Yardi's connector first.

Yardi MCP and API options, checked 27 Oct 2026
OptionWhat it doesWhere it stops
Yardi Virtuoso ConnectorOfficial MCP for Claude since 16 Jun 2026, signs in through Yardi and follows your user permissions.Part of Virtuoso Enterprise on Voyager. Five tools, all about work orders.
Yardi Interfaces ProgramLicensed API access for software vendors, listed among 450+ interface partners.For vendors, not for a Breeze customer, with a yearly fee per interface.
AyushSinghSql/YARDI_MCP_SERVERThe only GitHub repo named as a Yardi MCP server, 0 stars, last push 3 Aug 2026.The README holds only its title; nothing documented to run.
Hosted Yardi connectorsPaid services that sell Yardi APIs and MCP servers to software companies.Priced and sold to companies building products, not to one landlord.
Zapier, Make, n8nNo Yardi Breeze app in any of the three.Only a generic HTTP step, with no API to call.

A Voyager portfolio on Virtuoso Enterprise should use Yardi's own connector for work orders: it is official and follows your permissions. A software company building a product needs an interface license. Cotlet is for the Breeze account that has neither and wants its agent to do the weekly follow-up.

EU company, since 2019

Who runs Cotlet A company you can look up.

Cotlet belongs to Take Group sp. z o.o., a Polish software company in the EU (VAT PL6342984273) working since 2019 and founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Yardi tools go to contact@cotlet.dev.

Yardi API and MCP: questions

Can I use the Yardi API without an AI agent?

Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.

How do I get access?

Create a free account at https://cotlet.dev, choose Yardi under Integrations in the console and sign in to Breeze in its Cloud Browser from your own login link. The trial starts with your first app and asks for no card.

Does this work with Yardi Voyager?

The tools are written for Yardi Breeze and Breeze Premier, the products Yardi sells to smaller portfolios. Voyager customers on Virtuoso Enterprise can use Yardi's own Virtuoso Connector for Claude, and Yardi says its full Virtuoso agent suite requires Voyager 8.

How does Cotlet sign in when Breeze has no public login page?

Yardi gives every Breeze and Breeze Premier client a unique login link in the welcome email and says it is the only way to sign in from a browser. You open that link once in your Cloud Browser and sign in as yourself. If the link is lost, Yardi's account representatives or live chat on yardibreeze.com send it again.

Can my agent text every tenant?

No. Breeze Text Messaging (SMS) reaches only prospects and tenants who registered and opted in through RentCafe, under Admin > Text Messaging (SMS). send_text returns not_reachable for anyone else, so the agent emails them or lists them for a call.

Does Yardi Breeze have webhooks?

We found none for Breeze customers (checked 27 Oct 2026). Breeze does import data from files, and some partners such as BILL exchange files over SFTP. Your agent runs on a schedule instead of on an event.

Do I need Breeze Premier?

No. The tools use screens both plans have: tenants, ledgers, maintenance, owner reports and Text Messaging (SMS). Premier adds two-way texting, a CRM queue and invoice approval workflows, which the tools do not cover.

Is Cotlet affiliated with Yardi?

No. Cotlet is independent and has no partnership with Yardi Systems.

Give your agent access to Yardi Breeze.

Free 7-day trial with 2,000 credits, no card needed.