Real estate
Idealista
Your listings and leads on Idealista, managed by an agent.
14 endpoints
Connect Buildium property, lease and task records to your reporting workflow. Use an AI agent through MCP or REST from automation tools and scripts.
13 tools Read and write
Buildium has an official REST API, the Open API, on the Premium plan only, and no official MCP server (checked 27 Oct 2026). The API covers leases, ledgers, tasks and announcements but not two-way texts or reports. Cotlet runs 13 tools hosted on any plan, over MCP for agents and REST for scripts.
| What you need | Open API | GitHub server | Cotlet |
|---|---|---|---|
| Works on Essential and Growth | Premium only | Needs the Open API | Yes, any plan |
| Leases, ledgers, payments, work orders | Yes, on Premium | Yes, on Premium | Yes |
| Two-way texts with residents | No endpoint | No endpoint | Yes, after your OK |
| Delinquent tenants report | No report endpoints | No report endpoints | Yes |
| Allowed by Buildium | Yes, official | Yes, official API | Uses the web app |
Checked 27 Oct 2026. Sources: Buildium Open API developer guide and reference · Buildium pricing (Open API on Premium) · Buildium Help: How do I add tenant payments? · Buildium Help: Delinquent tenants report
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your Buildium password, and no payment, text or work order goes out until you approve it. Who can see your session
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.
Enable Buildium for agents. Sign up, sign in to Buildium in its Cloud Browser with your staff login, then press Enable for agents.
Add the Cotlet address. Put https://cotlet.dev/mcp/v1 in your agent as an MCP server or connector.
Allow the connection. Chat apps send you to a Cotlet sign-in. Code editors, n8n and scripts take an API key from the console.
The shared address https://cotlet.dev/mcp/v1 carries Buildium next to your other apps. Your agent can do what your Buildium user role allows, so a staff login without accounting rights cannot record payments here either. If you enable Buildium after connecting, refresh the connector to load the new tools.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-buildium \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-buildium": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-buildium]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: buildium_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: buildium_write Sign in to Buildium in its Cotlet Cloud Browser and enable the app for agents. Your staff role determines accessible properties and records; complete two-step verification yourself.
Create a Cotlet API key with access to Buildium and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
curl https://cotlet.dev/api/v1/buildium/properties \
-H "Authorization: Bearer $COTLET_API_KEY" A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.
{
"status": "success",
"app": "buildium",
"tool": "list_properties",
"result": {
"properties": [
{
"property_id": "48213",
"name": "Maple Court",
"address": "120 Maple St, Springfield",
"units": 12
}
],
"next_cursor": null
}
} Read result.properties and pass result.next_cursor unchanged as cursor until null. Keep the search unchanged; property lists expose no page-size input.
Use returned property IDs for lease reads. Active leases and open tasks are the defaults; follow their returned cursors with filters fixed.
Rent, balance and ledger amounts are decimal strings, not cents. Preserve their precision and account currency context; ledger reads default to the last 90 days without a cursor.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Read properties and leases into a rent-roll report with lease dates and decimal-string balances. |
| Make | HTTP > Make a request | Combine outstanding balances and lease ledgers into an arrears review without payments or reminders. |
| Python or Node.js | REST API | Read open tasks and unanswered resident texts into a maintenance review queue without sending messages. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads Buildium; 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.
Payments and charges change what a tenant owes, so both wait for your OK. Buildium pays the largest open charge first unless the lease has its own allocation.
Returns the rental properties in your Buildium account with address and number of units. Search matches the property name or address. Use the property_id of each item in the other tools.
MCP callbuildium_read → list_properties
REST endpointGET https://cotlet.dev/api/v1/buildium/properties
| Name | Type | Description |
|---|---|---|
| search string | string | Match on property name or address. |
| cursor string | string | Next page cursor from the previous call. |
{
"properties": [
{
"property_id": "48213",
"name": "Maple Court",
"address": "120 Maple St, Springfield",
"units": 12
}
],
"next_cursor": null
} Returns leases as Buildium's Rentals > Rent roll shows them: unit, tenants, monthly rent, start and end dates and the current balance. Search matches unit or tenant name. Use lease_id from here in the ledger and payment tools.
MCP callbuildium_read → list_leases
REST endpointGET https://cotlet.dev/api/v1/buildium/leases
| Name | Type | Description |
|---|---|---|
| search string | string | Match on unit or tenant name. |
| status enum | enum | active, future or past. Default: active. |
| property_id string | string | Only this property. Property ID from list_properties. |
| cursor string | string | Next page cursor from the previous call. |
{
"leases": [
{
"lease_id": "90517",
"property": "Maple Court",
"unit": "2B",
"tenants": [
"Marcus Hale"
],
"rent": "1450.00",
"start_date": "2026-01-01",
"end_date": "2026-12-31",
"status": "active",
"balance": "1450.00"
}
],
"next_cursor": null
} Returns what Buildium's Rentals > Outstanding balances page shows: each lease with a balance today, the tenants and the amount. Sorted by balance, largest first. Filter by property or by a minimum amount.
MCP callbuildium_read → list_outstanding_balances
REST endpointGET https://cotlet.dev/api/v1/buildium/outstanding-balances
| Name | Type | Description |
|---|---|---|
| property_id string | string | Only this property. Property ID from list_properties. |
| min_balance string | string | Only balances at or above this decimal amount. |
| cursor string | string | Next page cursor from the previous call. |
{
"balances": [
{
"lease_id": "90517",
"property": "Maple Court",
"unit": "2B",
"tenants": [
"Marcus Hale"
],
"balance": "1450.00"
},
{
"lease_id": "90522",
"property": "Maple Court",
"unit": "7",
"tenants": [
"Rosa Lin"
],
"balance": "320.00"
}
],
"total": "1770.00",
"next_cursor": null
} Returns the ledger from the lease's Financials tab, oldest first: charges, payments and credits, each with the running balance. Use it before recording a payment to catch one a colleague already entered.
MCP callbuildium_read → get_lease_ledger
REST endpointGET https://cotlet.dev/api/v1/buildium/leases/{lease_id}/ledger
| Name | Type | Description |
|---|---|---|
| lease_id string required | string | Lease ID from list_leases or list_outstanding_balances. |
| from date | date | Start date. Default: 90 days ago. |
| to date | date | End date. Default: today. |
{
"lease_id": "lease_8c41d2"
} {
"lease_id": "90517",
"transactions": [
{
"type": "charge",
"date": "2026-10-01",
"memo": "Rent October 2026",
"amount": "1450.00",
"balance": "1450.00"
}
],
"balance": "1450.00"
} Runs the Delinquent tenants report from the Reports menu and returns its rows: tenant, unit, balance and last payment date as of the date you give. Resident status picks current, future or former tenants. Balance detail by GL account only comes back for a single property, as in Buildium.
MCP callbuildium_read → get_delinquent_tenants_report
REST endpointGET https://cotlet.dev/api/v1/buildium/delinquent-tenants-report
| Name | Type | Description |
|---|---|---|
| as_of date | date | Balances as of this date. Default: today. |
| resident_status enum | enum | current, future or former. Default: current. |
| property_id string | string | Only this property. Property ID from list_properties. |
{
"as_of": "2026-10-27",
"rows": [
{
"tenant": "Marcus Hale",
"property": "Maple Court",
"unit": "2B",
"balance": "1450.00",
"last_payment": "2026-09-03"
}
],
"total": "1450.00"
} Records a payment the same way as Receive payment on the lease ledger. Use the date the money was in hand, because Buildium charges late fees from the ledger dates. Buildium applies the money to the charge with the largest balance first unless the lease has its own allocation. The response lists the charges paid and the balance after. By default you confirm each call; you can switch that off for this tool.
MCP callbuildium_write → record_lease_payment
REST endpointPOST https://cotlet.dev/api/v1/buildium/leases/{lease_id}/payment
| Name | Type | Description |
|---|---|---|
| lease_id string required | string | Lease ID from list_leases or list_outstanding_balances. |
| amount string required | string | Decimal amount received, e.g. "1450.00". |
| date date required | date | Date the payment was received. |
| method enum required | enum | check, cash, money_order or cashiers_check. |
| reference string | string | Check number or other reference. |
| memo string | string | Shown on the ledger. |
{
"lease_id": "90517",
"amount": "1450.00",
"date": "2026-10-27",
"method": "check",
"reference": "1042"
} {
"payment_id": "7781204",
"lease_id": "90517",
"amount": "1450.00",
"date": "2026-10-27",
"method": "check",
"reference": "1042",
"applied_to": [
{
"charge": "Rent October 2026",
"amount": "1450.00"
}
],
"balance": "0.00"
} Adds one charge to a lease ledger against a GL account from your chart of accounts. It raises the tenant's balance and shows in the Resident Center. It does not change your late fee rules. By default you confirm each call; you can switch that off for this tool.
MCP callbuildium_write → post_lease_charge
REST endpointPOST https://cotlet.dev/api/v1/buildium/leases/{lease_id}/charge
| Name | Type | Description |
|---|---|---|
| lease_id string required | string | Lease ID from list_leases or list_outstanding_balances. |
| amount string required | string | Decimal amount, e.g. "45.00". |
| date date required | date | Charge date. |
| gl_account string required | string | Income GL account as named in your Buildium chart of accounts. |
| memo string | string | Shown on the ledger. |
{
"lease_id": "lease_8c41d2",
"amount": "45.00",
"date": "2026-10-01",
"gl_account": "gl account"
} {
"charge_id": "7781230",
"lease_id": "90517",
"amount": "45.00",
"date": "2026-10-27",
"gl_account": "Utility income",
"balance": "45.00",
"status": "posted"
} Texts go only to residents who opted in, at most 10 per message. An announcement over 140 characters goes out without a text, and announcement texts reach US numbers only.
Returns text threads with residents, newest message first, with the resident, their unit and the last messages. unanswered_only keeps threads where the resident wrote last. Only residents who opted in to texts appear here.
MCP callbuildium_read → list_text_messages
REST endpointGET https://cotlet.dev/api/v1/buildium/text-messages
| Name | Type | Description |
|---|---|---|
| unanswered_only boolean | boolean | Only threads where the resident wrote last. Default: false. |
| cursor string | string | Next page cursor from the previous call. |
{
"threads": [
{
"thread_id": "tx_5521",
"resident": "Rosa Lin",
"unit": "Maple Court 7",
"last_from": "resident",
"last_at": "2026-10-27T08:14:00Z",
"last_message": "Is the plumber still coming today?"
}
],
"next_cursor": null
} Sends a text from Communication > Messages to one or more residents, at most 10 per call. Buildium sends each message separately, so residents do not see each other. Residents who have not opted in are skipped and listed in the response. By default you confirm each call; you can switch that off for this tool.
MCP callbuildium_write → send_text_message
REST endpointPOST https://cotlet.dev/api/v1/buildium/text-messages
| Name | Type | Description |
|---|---|---|
| residents string[] required | string[] | Resident names or IDs, at most 10. |
| message string required | string | Message text. |
{
"residents": [
"residents"
],
"message": "message"
} {
"sent": [
{
"resident": "Marcus Hale",
"unit": "Maple Court 2B"
}
],
"skipped_not_opted_in": [],
"status": "sent"
} Publishes an announcement to the residents of the properties you choose. The subject shows in email and in the Resident Center and is capped at 100 characters. Buildium sends no text when the body is over 140 characters, and announcement texts reach US numbers only. By default you confirm each call; you can switch that off for this tool.
MCP callbuildium_write → send_announcement
REST endpointPOST https://cotlet.dev/api/v1/buildium/announcements
| Name | Type | Description |
|---|---|---|
| subject string required | string | Up to 100 characters. |
| body string required | string | Message. Over 140 characters goes out without the text version. |
| property_ids string[] required | string[] | Property IDs from list_properties. |
| expires date | date | Date the announcement leaves the Resident Center. |
{
"subject": "subject",
"body": "body",
"property_ids": [
"property ids"
]
} {
"announcement_id": "8814",
"subject": "Water off Thursday",
"properties": [
"Maple Court"
],
"sms": true,
"expires": "2026-10-31",
"status": "published"
} A task reaches nobody and runs at once. A work order assigns an outside vendor, so it asks first.
Returns tasks, newest first: resident requests, owner requests, contact requests and to-dos, each with its subject, property, unit, status and who it is assigned to. Use it to check whether a request is already logged before creating a task.
MCP callbuildium_read → list_tasks
REST endpointGET https://cotlet.dev/api/v1/buildium/tasks
| Name | Type | Description |
|---|---|---|
| status enum | enum | new, in_progress, completed or deferred. Default: all open. |
| property_id string | string | Only this property. Property ID from list_properties. |
| cursor string | string | Next page cursor from the previous call. |
{
"tasks": [
{
"task_id": "311045",
"type": "Resident request",
"subject": "Kitchen sink leaking",
"property": "Maple Court",
"unit": "7",
"status": "New",
"assigned_to": "Sam Ortiz",
"created": "2026-10-26"
}
],
"next_cursor": null
} Creates a task with a subject, type, property, optional unit, priority and assignee from your staff. A to-do stays inside your team. It runs without asking first, because the task can be deleted in Buildium in one step.
MCP callbuildium_write → create_task
REST endpointPOST https://cotlet.dev/api/v1/buildium/properties/{property_id}/tasks
| Name | Type | Description |
|---|---|---|
| subject string required | string | Short title. |
| type enum required | enum | to_do or resident_request. |
| property_id string required | string | Property ID from list_properties. |
| unit string | string | Unit the task concerns. |
| description string | string | Details for whoever does the work. |
| priority enum | enum | low, normal or high. Default: normal. |
| assigned_to string | string | Staff member, as named in Buildium. |
{
"subject": "subject",
"type": "to_do",
"property_id": "property_8c41d2"
} {
"task_id": "311046",
"type": "Resident request",
"subject": "Kitchen sink leaking",
"property": "Maple Court",
"unit": "7",
"priority": "high",
"status": "New"
} Adds a work order on the task's Work Order tab, the same as Add work order in Buildium. The task's request type, contact information and subject carry over. It assigns work to an outside vendor. By default you confirm each call; you can switch that off for this tool.
MCP callbuildium_write → add_work_order
REST endpointPOST https://cotlet.dev/api/v1/buildium/tasks/{task_id}/work-orders
| Name | Type | Description |
|---|---|---|
| task_id string required | string | Task ID from list_tasks or create_task. |
| vendor string required | string | Vendor name as listed in Buildium. |
| work_details string | string | What the vendor should do. |
| entry_allowed boolean | boolean | Whether the vendor may enter the unit. |
{
"task_id": "task_8c41d2",
"vendor": "vendor"
} {
"work_order_id": "52890",
"task_id": "311046",
"vendor": "Ortiz Plumbing",
"subject": "Kitchen sink leaking",
"entry_allowed": true,
"status": "created"
} Your signed-in Buildium browser profile, AES-256-GCM encrypted, in Finland. Never the password.
The 13 Buildium tools, not the session cookie.
What your staff role sees: properties, leases, ledgers, tasks and resident messages.
Bank accounts, ePay settings, owner payouts, user roles and deleting records.
A code for a new device goes to you. You type it, we never do.
Disable for agents, reset the browser, or sign out in Buildium.
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.
"Use any robot, spider, crawler, deep-links, data-mining, data-gathering, extraction tool, or other automatic device..."
That clause is from the terms of buildium.com. Section 19 says the software itself runs under separate customer Terms of Use, which win where the two differ, and those sit behind a Buildium login. Read them in your account before you start. On Premium, the Open API is the route Buildium offers. We found no public case of a Buildium account closed for automation (checked 27 Oct 2026). Buildium is part of RealPage.
Tenants' ledgers are money. Read the draft amounts before you approve a batch of payments, and keep the check numbers in the reference field so the deposit matches.
Buildium reworked its reports in 2025 with new filters and columns. When a screen or a report moves like that, we fix the tool and your prompts keep working. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Record a payment | Reverse it on the lease ledger in Buildium |
| Post a charge | Edit or delete the charge on the ledger |
| Create a task | Delete the task in Tasks |
| Add a work order | Edit or close it; a vendor who saw it already knows |
| Send a text | No, the resident has it |
| Send an announcement | Expire it from the Resident Center; emails and texts are out |
5 of 13 tools ask first: record_lease_payment, post_lease_charge, add_work_order, send_text_message and send_announcement, the ones that move money or reach a tenant or a vendor. Reads and create_task run at once. Switch the wait off per tool for a scheduled run.
Buildium charges late fees from the ledger dates, so the payment date is the day the check was in hand, not the day it was entered.
{
"name": "record_lease_payment",
"arguments": {
"lease_id": "90517",
"amount": "1450.00",
"date": "2026-10-27",
"method": "check",
"reference": "1042"
}
} curl -X POST https://cotlet.dev/api/v1/buildium/leases/90517/payment \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount":"1450.00","date":"2026-10-27","method":"check","reference":"1042"}' {
"payment_id": "7781204",
"lease_id": "90517",
"amount": "1450.00",
"date": "2026-10-27",
"method": "check",
"reference": "1042",
"applied_to": [
{
"charge": "Rent October 2026",
"amount": "1450.00"
}
],
"balance": "0.00"
} A script or a cron job calls the same tools over REST at /api/v1/buildium, with the same key and price. A failed call is free. Each tool in the table above lists its REST path.
About $24 a monthfor a manager with about 120 units, 4,090 credits. Buildium still bills your plan as before.
| Job | Calls | Credits |
|---|---|---|
| Record a check or cash payment | 3 × 25 | 750 |
| Text tenants with a balance | 7 × 4 | 280 |
| Answer resident texts | 4 × 22 | 880 |
| Log a request and work order | 3 × 20 | 600 |
| Announce a building notice | 2 × 2 | 40 |
| Delinquent tenants report | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 4,090 |
The month is our example: 25 checks, texts on every workday and 20 work orders. Buildium's own plans start at $62, $192 or $400 a month, and only Premium includes the Open API. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Buildium Open API | Official REST API with webhooks and a sandbox: leases, ledgers, tasks, work orders, announcements, template emails. | Premium plan only, set up by an administrator. No texts, no reports, no MCP server. |
| luthersystems/mcp-server-buildium | Community server, 7 stars, last push 23 Oct 2026, 81 tools in 12 categories. | Runs on the Open API with your client ID and secret, so Premium only. |
| blackwaxxx/Buildium-MCP | Community server on PyPI, last push 23 Sep 2026, all API operations through 19 tools, sandbox by default. | Same API, same plan and the same gaps. |
| sirakinb/Buildium-MCP-Server-CLI | Community server, 455 tools in 24 categories. | Last push 11 Jun 2026. |
| Hosted browser agents and API connectors | Paid services that sign in for you or call the Open API. | Some store your Buildium password; Cotlet keeps only the session. |
If you are on Premium and need leases, ledgers or work orders, a community server on the Open API is free and sanctioned, and you keep it running. Cotlet is for Essential and Growth accounts, and for texts and reports on any plan.
Take Group sp. z o.o. runs Cotlet, a software company registered in Poland, 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 Buildium tools go to contact@cotlet.dev.
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.
Create a free account at https://cotlet.dev, open Buildium under Integrations in the console and sign in to Buildium in its Cloud Browser. The trial starts with your first app, no card asked.
No. Buildium only lets you text residents who opted in, and send_text_message skips the rest and names them. Buildium suggests asking for consent in the lease or inviting tenants by email from Buildium.
Buildium sends no text version of an announcement over 140 characters, and announcement texts reach US numbers only. Email and the Resident Center still get the full message.
Yes, on the Open API: Buildium posts event notifications to your HTTPS endpoint. Use them for events if you are on Premium; Cotlet runs the jobs your agent asks for.
Yes. On Premium, keep the Open API for bulk data sync and connect Cotlet to the same agent for resident texts and reports.
Only the door differs. Both carry the same 13 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Buildium or RealPage.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy