REST API reference
Rent Manager API
12 endpoints for Rent Manager. Each one is a POST with a JSON body, called with your API key.
- Base URL
- https://cotlet.dev/api/v1/rent-manager
- Connects with
- Your own Rent Manager Express login in the browser (corporate ID, username and password); it can do what your user can do
- Integration page
- Rent Manager
| Endpoint | Access | Description |
|---|---|---|
| list_properties | read | Properties in your Rent Manager database, with address and unit count. |
| list_tenants | read | Tenants with property, unit, status, contact details and current balance. |
| get_tenant | read | One tenant: contacts, lease dates, rent and balance. |
| get_tenant_ledger | read | Charges, payments and credits on a tenant account, with running balance. |
| list_charge_types | read | Charge types set up in your database, such as rent or late fee. |
| list_service_issues | read | Service issues with status, property, unit, assignee and dates. |
| get_history | read | History/Notes of a tenant, newest first. |
| create_service_issue | write | Open a service issue for a unit, optionally assigned and scheduled. |
| update_service_issue | write | Change the status, assignee or schedule of a service issue, or add a note. |
| add_history_note | write | Add a note to the History/Notes of a tenant. Internal, nothing is sent. |
| post_charge | write | Post a one-off charge to a tenant account. |
| send_text | write | Text a tenant through Rent Manager texting. |
List properties
readPOST https://cotlet.dev/api/v1/rent-manager/list_properties
Returns the properties your user can see, with address and number of units. Use the property_id of each item in list_tenants, list_service_issues and create_service_issue. Pass next_cursor back as cursor for the next page.
Parameters
| Name | Type | Description |
|---|---|---|
| search | string | Name or address contains. |
| limit | integer | 1 to 200. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_properties \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("rent-manager", "list_properties") const result = await cotlet.call('rent-manager', 'list_properties'); cotlet call rent-manager list_properties Example response
{
"properties": [
{
"property_id": "p_12",
"name": "Maple Court",
"address": "12 Maple St, Dayton, OH",
"units": 24
},
{
"property_id": "p_15",
"name": "Elm Street Duplexes",
"address": "8 Elm St, Dayton, OH",
"units": 2
}
],
"next_cursor": null
} List tenants
readPOST https://cotlet.dev/api/v1/rent-manager/list_tenants
Returns tenants with property, unit, status, email, phone and current balance. Current tenants only by default; set status to widen it. min_balance keeps only tenants who owe at least that many whole dollars. Pass next_cursor back as cursor for the next page.
Parameters
| Name | Type | Description |
|---|---|---|
| property_id | string | Only tenants of this property. |
| status | enum | current, past, future or all. Default: current. |
| min_balance | integer | Only tenants owing at least this amount, whole dollars. |
| search | string | Name, unit or email contains. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_tenants \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("rent-manager", "list_tenants") const result = await cotlet.call('rent-manager', 'list_tenants'); cotlet call rent-manager list_tenants Example response
{
"tenants": [
{
"tenant_id": "10482",
"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": "10517",
"name": "Priya Shah",
"property": "Maple Court",
"unit": "12A",
"status": "current",
"email": "priya.shah@example.com",
"phone": "+1 555 010 0177",
"balance": "0.00"
}
],
"next_cursor": null
} Get tenant
readPOST https://cotlet.dev/api/v1/rent-manager/get_tenant
Returns one tenant with contacts, lease start and end, monthly rent and current balance. Use it before a call or a text to see the whole picture for one unit.
Parameters
| Name | Type | Description |
|---|---|---|
| tenant_id required | string | Tenant ID from list_tenants. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/get_tenant \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tenant_id":"tenant_8c41d2"}' result = client.call("rent-manager", "get_tenant", {"tenant_id":"tenant_8c41d2"}) const result = await cotlet.call('rent-manager', 'get_tenant', {"tenant_id":"tenant_8c41d2"}); cotlet call rent-manager get_tenant --data '{"tenant_id":"tenant_8c41d2"}' Example response
{
"tenant_id": "10482",
"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"
} Get tenant ledger
readPOST https://cotlet.dev/api/v1/rent-manager/get_tenant_ledger
Returns the ledger of one tenant account, oldest first, with a running balance after each line. Opening balance is the balance before the first line of the period. The period defaults to the last 90 days.
Parameters
| Name | Type | Description |
|---|---|---|
| tenant_id required | string | Tenant ID from list_tenants. |
| from | date | Start date. Default: 90 days ago. |
| to | date | End date. Default: today. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/get_tenant_ledger \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tenant_id":"tenant_8c41d2"}' result = client.call("rent-manager", "get_tenant_ledger", {"tenant_id":"tenant_8c41d2"}) const result = await cotlet.call('rent-manager', 'get_tenant_ledger', {"tenant_id":"tenant_8c41d2"}); cotlet call rent-manager get_tenant_ledger --data '{"tenant_id":"tenant_8c41d2"}' Example response
{
"tenant_id": "10482",
"from": "2026-08-01",
"to": "2026-10-11",
"opening_balance": "0.00",
"lines": [
{
"date": "2026-08-01",
"type": "Rent",
"amount": "1200.00",
"balance": "1200.00"
},
{
"date": "2026-08-03",
"type": "Payment",
"amount": "-1200.00",
"balance": "0.00"
},
{
"date": "2026-09-01",
"type": "Rent",
"amount": "1200.00",
"balance": "1200.00"
},
{
"date": "2026-09-04",
"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"
} List charge types
readPOST https://cotlet.dev/api/v1/rent-manager/list_charge_types
Returns the charge types defined in your Rent Manager database. The names are yours, so read this list before post_charge and use one of its names in charge_type.
Parameters
No parameters.
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_charge_types \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("rent-manager", "list_charge_types") const result = await cotlet.call('rent-manager', 'list_charge_types'); cotlet call rent-manager list_charge_types Example response
{
"charge_types": [
{
"name": "Rent"
},
{
"name": "Late Fee"
},
{
"name": "Lockout Fee"
}
]
} List service issues
readPOST https://cotlet.dev/api/v1/rent-manager/list_service_issues
Returns service issues, oldest first, with status, property, unit, assignee and creation date. Every status except Resolved by default, so a plain call is the open list. Status names are the ones set in your database. Pass next_cursor back as cursor for the next page.
Parameters
| Name | Type | Description |
|---|---|---|
| status | string | Status name as set in your database, e.g. New, Work in Progress or Resolved. Default: all except Resolved. |
| property_id | string | Only issues at this property. |
| older_than_days | integer | Only issues created at least this many days ago. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_service_issues \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"older_than_days":7,"property_id":"p_12"}' result = client.call("rent-manager", "list_service_issues", {"older_than_days":7,"property_id":"p_12"}) const result = await cotlet.call('rent-manager', 'list_service_issues', {"older_than_days":7,"property_id":"p_12"}); cotlet call rent-manager list_service_issues --data '{"older_than_days":7,"property_id":"p_12"}' Example response
{
"issues": [
{
"issue_id": "si_20744",
"title": "Water heater not heating",
"property": "Elm Street Duplexes",
"unit": "8 Elm St",
"status": "Work in Progress",
"assigned_to": "Sam Ortiz",
"created_at": "2026-09-28T09:12:00-04:00"
},
{
"issue_id": "si_20801",
"title": "Hallway light out",
"property": "Maple Court",
"unit": "Common area",
"status": "New",
"assigned_to": null,
"created_at": "2026-10-02T15:40:00-04:00"
}
],
"next_cursor": null
} Get history
readPOST https://cotlet.dev/api/v1/rent-manager/get_history
Returns the History/Notes entries of one tenant, newest first, each with date, author and text. Use it to read what was agreed before you write to the tenant.
Parameters
| Name | Type | Description |
|---|---|---|
| tenant_id required | string | Tenant ID from list_tenants. |
| limit | integer | 1 to 100. Default: 25. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/get_history \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tenant_id":"tenant_8c41d2"}' result = client.call("rent-manager", "get_history", {"tenant_id":"tenant_8c41d2"}) const result = await cotlet.call('rent-manager', 'get_history', {"tenant_id":"tenant_8c41d2"}); cotlet call rent-manager get_history --data '{"tenant_id":"tenant_8c41d2"}' Example response
{
"tenant_id": "10482",
"entries": [
{
"date": "2026-10-08",
"author": "Dana Ruiz",
"note": "Called about the late October rent. Tenant will pay on Friday."
},
{
"date": "2026-09-12",
"author": "Dana Ruiz",
"note": "Renewed lease through January 2027."
}
]
} POST https://cotlet.dev/api/v1/rent-manager/create_service_issue
Opens a service issue for a property and unit, with the status New. Give tenant_id to tie it to the tenant who reported it and assigned_to to give it to a Rent Manager user. Rent Manager can notify the assignee and the tenant by its own rules, which is why this reaches other people. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| property_id required | string | Property ID from list_properties. |
| unit | string | Unit name or number. |
| tenant_id | string | Tenant who reported it. |
| title required | string | Short description, e.g. "Kitchen sink leak". |
| details | string | Longer description for the technician. |
| assigned_to | string | Rent Manager user name to assign. |
| scheduled_for | datetime | ISO 8601 with time zone. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/create_service_issue \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"property_id":"p_12","unit":"12A","tenant_id":"10517","title":"Kitchen sink leak, cabinet floor wet","details":"Tenant texted 7:40 am: water under the kitchen sink since last night. Has a dog, home after 3 pm.","assigned_to":"Dana Ruiz"}' result = client.call("rent-manager", "create_service_issue", {"property_id":"p_12","unit":"12A","tenant_id":"10517","title":"Kitchen sink leak, cabinet floor wet","details":"Tenant texted 7:40 am: water under the kitchen sink since last night. Has a dog, home after 3 pm.","assigned_to":"Dana Ruiz"}) const result = await cotlet.call('rent-manager', 'create_service_issue', {"property_id":"p_12","unit":"12A","tenant_id":"10517","title":"Kitchen sink leak, cabinet floor wet","details":"Tenant texted 7:40 am: water under the kitchen sink since last night. Has a dog, home after 3 pm.","assigned_to":"Dana Ruiz"}); cotlet call rent-manager create_service_issue --data '{"property_id":"p_12","unit":"12A","tenant_id":"10517","title":"Kitchen sink leak, cabinet floor wet","details":"Tenant texted 7:40 am: water under the kitchen sink since last night. Has a dog, home after 3 pm.","assigned_to":"Dana Ruiz"}' Example response
{
"issue_id": "si_20931",
"status": "New",
"property": "Maple Court",
"unit": "12A",
"tenant_id": "10517",
"title": "Kitchen sink leak",
"assigned_to": "Dana Ruiz",
"created_at": "2026-10-12T08:30:00-04:00"
} POST https://cotlet.dev/api/v1/rent-manager/update_service_issue
Changes one service issue: status, assignee, schedule, or a note added to it. Use a status name from your database. A change can trigger the notifications your Rent Manager rules define, which is why this reaches other people. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| issue_id required | string | Service issue ID from list_service_issues. |
| status | string | Status name as set in your database, e.g. New, Work in Progress or Resolved. |
| assigned_to | string | Rent Manager user name. |
| scheduled_for | datetime | ISO 8601 with time zone. |
| note | string | Note added to the issue. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/update_service_issue \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"issue_id":"issue_8c41d2"}' result = client.call("rent-manager", "update_service_issue", {"issue_id":"issue_8c41d2"}) const result = await cotlet.call('rent-manager', 'update_service_issue', {"issue_id":"issue_8c41d2"}); cotlet call rent-manager update_service_issue --data '{"issue_id":"issue_8c41d2"}' Example response
{
"issue_id": "si_20744",
"status": "Resolved",
"assigned_to": "Sam Ortiz",
"note_added": true
} Add history note
writePOST https://cotlet.dev/api/v1/rent-manager/add_history_note
Adds one note to the History/Notes of a tenant, under your user. Nothing is sent to the tenant or anyone else, and one more note corrects a mistake, so add_history_note runs without asking first.
Parameters
| Name | Type | Description |
|---|---|---|
| tenant_id required | string | Tenant ID from list_tenants. |
| note required | string | Note text. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/add_history_note \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tenant_id":"tenant_8c41d2","note":"note"}' result = client.call("rent-manager", "add_history_note", {"tenant_id":"tenant_8c41d2","note":"note"}) const result = await cotlet.call('rent-manager', 'add_history_note', {"tenant_id":"tenant_8c41d2","note":"note"}); cotlet call rent-manager add_history_note --data '{"tenant_id":"tenant_8c41d2","note":"note"}' Example response
{
"tenant_id": "10482",
"status": "added",
"date": "2026-10-12"
} POST https://cotlet.dev/api/v1/rent-manager/post_charge
Posts one charge to one tenant account and returns the balance before and after. charge_type must be a name from list_charge_types. The date defaults to today. There is no undo tool: a wrong charge is corrected in Rent Manager. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| tenant_id required | string | Tenant ID from list_tenants. |
| charge_type required | string | Charge type name from list_charge_types. |
| amount required | string | Decimal amount, e.g. 75.00. |
| date | date | Transaction date. Default: today. |
| comment | string | Shown on the ledger line. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/post_charge \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tenant_id":"10482","charge_type":"Late Fee","amount":"50.00","date":"2026-10-06","comment":"October rent paid after the 5th"}' result = client.call("rent-manager", "post_charge", {"tenant_id":"10482","charge_type":"Late Fee","amount":"50.00","date":"2026-10-06","comment":"October rent paid after the 5th"}) const result = await cotlet.call('rent-manager', 'post_charge', {"tenant_id":"10482","charge_type":"Late Fee","amount":"50.00","date":"2026-10-06","comment":"October rent paid after the 5th"}); cotlet call rent-manager post_charge --data '{"tenant_id":"10482","charge_type":"Late Fee","amount":"50.00","date":"2026-10-06","comment":"October rent paid after the 5th"}' Example response
{
"transaction_id": "884213",
"tenant_id": "10482",
"unit": "4B",
"charge_type": "Late Fee",
"amount": "50.00",
"date": "2026-10-06",
"previous_balance": "1200.00",
"new_balance": "1250.00"
} POST https://cotlet.dev/api/v1/rent-manager/send_text
Sends one text message to one tenant through Rent Manager texting. The tenant needs a contact set up with SMS enabled. The text goes out under your Rent Manager account. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| tenant_id required | string | Tenant ID from list_tenants. |
| message required | string | Text message to the tenant. |
Request
curl -X POST https://cotlet.dev/api/v1/rent-manager/send_text \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tenant_id":"10482","message":"Hi Jordan, your balance is $1,250: October rent plus the $50 late fee. Reply here if you want to set up a payment date."}' result = client.call("rent-manager", "send_text", {"tenant_id":"10482","message":"Hi Jordan, your balance is $1,250: October rent plus the $50 late fee. Reply here if you want to set up a payment date."}) const result = await cotlet.call('rent-manager', 'send_text', {"tenant_id":"10482","message":"Hi Jordan, your balance is $1,250: October rent plus the $50 late fee. Reply here if you want to set up a payment date."}); cotlet call rent-manager send_text --data '{"tenant_id":"10482","message":"Hi Jordan, your balance is $1,250: October rent plus the $50 late fee. Reply here if you want to set up a payment date."}' Example response
{
"tenant_id": "10482",
"to": "Jordan Lee",
"status": "sent",
"sent_at": "2026-10-12T09:05:00-04:00"
}