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
Rent Manager Endpoints
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.

POST 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

Parameters: list_properties
NameTypeDescription
search string Name or address contains.
limit integer 1 to 200. Default: 50.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_properties \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("rent-manager", "list_properties")
Node.js
const result = await cotlet.call('rent-manager', 'list_properties');
CLI
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
}

POST 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

Parameters: list_tenants
NameTypeDescription
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
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_tenants \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("rent-manager", "list_tenants")
Node.js
const result = await cotlet.call('rent-manager', 'list_tenants');
CLI
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

read

POST 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

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

Request

cURL
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"}'
Python
result = client.call("rent-manager", "get_tenant", {"tenant_id":"tenant_8c41d2"})
Node.js
const result = await cotlet.call('rent-manager', 'get_tenant', {"tenant_id":"tenant_8c41d2"});
CLI
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"
}

POST 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

Parameters: get_tenant_ledger
NameTypeDescription
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
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"}'
Python
result = client.call("rent-manager", "get_tenant_ledger", {"tenant_id":"tenant_8c41d2"})
Node.js
const result = await cotlet.call('rent-manager', 'get_tenant_ledger', {"tenant_id":"tenant_8c41d2"});
CLI
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"
}

POST 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
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_charge_types \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("rent-manager", "list_charge_types")
Node.js
const result = await cotlet.call('rent-manager', 'list_charge_types');
CLI
cotlet call rent-manager list_charge_types

Example response

{
  "charge_types": [
    {
      "name": "Rent"
    },
    {
      "name": "Late Fee"
    },
    {
      "name": "Lockout Fee"
    }
  ]
}

POST 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

Parameters: list_service_issues
NameTypeDescription
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
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"}'
Python
result = client.call("rent-manager", "list_service_issues", {"older_than_days":7,"property_id":"p_12"})
Node.js
const result = await cotlet.call('rent-manager', 'list_service_issues', {"older_than_days":7,"property_id":"p_12"});
CLI
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
}

POST 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

Parameters: get_history
NameTypeDescription
tenant_id required string Tenant ID from list_tenants.
limit integer 1 to 100. Default: 25.

Request

cURL
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"}'
Python
result = client.call("rent-manager", "get_history", {"tenant_id":"tenant_8c41d2"})
Node.js
const result = await cotlet.call('rent-manager', 'get_history', {"tenant_id":"tenant_8c41d2"});
CLI
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."
    }
  ]
}

Create service issue

write Confirm

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

Parameters: create_service_issue
NameTypeDescription
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
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"}'
Python
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"})
Node.js
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"});
CLI
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"
}

Update service issue

write Confirm

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

Parameters: update_service_issue
NameTypeDescription
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
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"}'
Python
result = client.call("rent-manager", "update_service_issue", {"issue_id":"issue_8c41d2"})
Node.js
const result = await cotlet.call('rent-manager', 'update_service_issue', {"issue_id":"issue_8c41d2"});
CLI
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
}

POST 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

Parameters: add_history_note
NameTypeDescription
tenant_id required string Tenant ID from list_tenants.
note required string Note text.

Request

cURL
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"}'
Python
result = client.call("rent-manager", "add_history_note", {"tenant_id":"tenant_8c41d2","note":"note"})
Node.js
const result = await cotlet.call('rent-manager', 'add_history_note', {"tenant_id":"tenant_8c41d2","note":"note"});
CLI
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 charge

write Confirm

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

Parameters: post_charge
NameTypeDescription
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
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"}'
Python
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"})
Node.js
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"});
CLI
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"
}

Send text

write Confirm

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

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

Request

cURL
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."}'
Python
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."})
Node.js
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."});
CLI
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"
}