# Rent Manager API

> Every Rent Manager endpoint on Cotlet: inputs, JSON Schema, cURL, Python and Node.js examples and an example response for each call.

Source: https://cotlet.dev/docs/api/rent-manager

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

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: https://cotlet.dev/integrations/rent-manager-api-mcp-server

## 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. |

## List properties

`POST https://cotlet.dev/api/v1/rent-manager/list_properties`

Access: read.

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 | Required | Description |
|---|---|---|---|
| `search` | string | no | Name or address contains. |
| `limit` | integer | no | 1 to 200. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_properties \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("rent-manager", "list_properties")
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'list_properties');
```

**CLI**

```bash
cotlet call rent-manager list_properties
```

### Example response

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/list_tenants`

Access: read.

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 | Required | Description |
|---|---|---|---|
| `property_id` | string | no | Only tenants of this property. |
| `status` | enum | no | current, past, future or all. Default: current. |
| `min_balance` | integer | no | Only tenants owing at least this amount, whole dollars. |
| `search` | string | no | Name, unit or email contains. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_tenants \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("rent-manager", "list_tenants")
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'list_tenants');
```

**CLI**

```bash
cotlet call rent-manager list_tenants
```

### Example response

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/get_tenant`

Access: read.

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 | Required | Description |
|---|---|---|---|
| `tenant_id` | string | yes | Tenant ID from list_tenants. |

### Request

**cURL**

```bash
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**

```python
result = client.call("rent-manager", "get_tenant", {"tenant_id":"tenant_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'get_tenant', {"tenant_id":"tenant_8c41d2"});
```

**CLI**

```bash
cotlet call rent-manager get_tenant --data '{"tenant_id":"tenant_8c41d2"}'
```

### Example response

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/get_tenant_ledger`

Access: read.

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 | Required | Description |
|---|---|---|---|
| `tenant_id` | string | yes | Tenant ID from list_tenants. |
| `from` | date | no | Start date. Default: 90 days ago. |
| `to` | date | no | End date. Default: today. |

### Request

**cURL**

```bash
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**

```python
result = client.call("rent-manager", "get_tenant_ledger", {"tenant_id":"tenant_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'get_tenant_ledger', {"tenant_id":"tenant_8c41d2"});
```

**CLI**

```bash
cotlet call rent-manager get_tenant_ledger --data '{"tenant_id":"tenant_8c41d2"}'
```

### Example response

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/list_charge_types`

Access: read.

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**

```bash
curl -X POST https://cotlet.dev/api/v1/rent-manager/list_charge_types \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("rent-manager", "list_charge_types")
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'list_charge_types');
```

**CLI**

```bash
cotlet call rent-manager list_charge_types
```

### Example response

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

## List service issues

`POST https://cotlet.dev/api/v1/rent-manager/list_service_issues`

Access: read.

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 | Required | Description |
|---|---|---|---|
| `status` | string | no | Status name as set in your database, e.g. New, Work in Progress or Resolved. Default: all except Resolved. |
| `property_id` | string | no | Only issues at this property. |
| `older_than_days` | integer | no | Only issues created at least this many days ago. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

```bash
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**

```python
result = client.call("rent-manager", "list_service_issues", {"older_than_days":7,"property_id":"p_12"})
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'list_service_issues', {"older_than_days":7,"property_id":"p_12"});
```

**CLI**

```bash
cotlet call rent-manager list_service_issues --data '{"older_than_days":7,"property_id":"p_12"}'
```

### Example response

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/get_history`

Access: read.

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 | Required | Description |
|---|---|---|---|
| `tenant_id` | string | yes | Tenant ID from list_tenants. |
| `limit` | integer | no | 1 to 100. Default: 25. |

### Request

**cURL**

```bash
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**

```python
result = client.call("rent-manager", "get_history", {"tenant_id":"tenant_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'get_history', {"tenant_id":"tenant_8c41d2"});
```

**CLI**

```bash
cotlet call rent-manager get_history --data '{"tenant_id":"tenant_8c41d2"}'
```

### Example response

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/create_service_issue`

Access: write. Confirm: waits for the user's OK before it runs.

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 | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property ID from list_properties. |
| `unit` | string | no | Unit name or number. |
| `tenant_id` | string | no | Tenant who reported it. |
| `title` | string | yes | Short description, e.g. "Kitchen sink leak". |
| `details` | string | no | Longer description for the technician. |
| `assigned_to` | string | no | Rent Manager user name to assign. |
| `scheduled_for` | datetime | no | ISO 8601 with time zone. |

### Request

**cURL**

```bash
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**

```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**

```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**

```bash
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

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/update_service_issue`

Access: write. Confirm: waits for the user's OK before it runs.

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 | Required | Description |
|---|---|---|---|
| `issue_id` | string | yes | Service issue ID from list_service_issues. |
| `status` | string | no | Status name as set in your database, e.g. New, Work in Progress or Resolved. |
| `assigned_to` | string | no | Rent Manager user name. |
| `scheduled_for` | datetime | no | ISO 8601 with time zone. |
| `note` | string | no | Note added to the issue. |

### Request

**cURL**

```bash
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**

```python
result = client.call("rent-manager", "update_service_issue", {"issue_id":"issue_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'update_service_issue', {"issue_id":"issue_8c41d2"});
```

**CLI**

```bash
cotlet call rent-manager update_service_issue --data '{"issue_id":"issue_8c41d2"}'
```

### Example response

```json
{
  "issue_id": "si_20744",
  "status": "Resolved",
  "assigned_to": "Sam Ortiz",
  "note_added": true
}
```

## Add history note

`POST https://cotlet.dev/api/v1/rent-manager/add_history_note`

Access: write.

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 | Required | Description |
|---|---|---|---|
| `tenant_id` | string | yes | Tenant ID from list_tenants. |
| `note` | string | yes | Note text. |

### Request

**cURL**

```bash
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**

```python
result = client.call("rent-manager", "add_history_note", {"tenant_id":"tenant_8c41d2","note":"note"})
```

**Node.js**

```js
const result = await cotlet.call('rent-manager', 'add_history_note', {"tenant_id":"tenant_8c41d2","note":"note"});
```

**CLI**

```bash
cotlet call rent-manager add_history_note --data '{"tenant_id":"tenant_8c41d2","note":"note"}'
```

### Example response

```json
{
  "tenant_id": "10482",
  "status": "added",
  "date": "2026-10-12"
}
```

## Post charge

`POST https://cotlet.dev/api/v1/rent-manager/post_charge`

Access: write. Confirm: waits for the user's OK before it runs.

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 | Required | Description |
|---|---|---|---|
| `tenant_id` | string | yes | Tenant ID from list_tenants. |
| `charge_type` | string | yes | Charge type name from list_charge_types. |
| `amount` | string | yes | Decimal amount, e.g. 75.00. |
| `date` | date | no | Transaction date. Default: today. |
| `comment` | string | no | Shown on the ledger line. |

### Request

**cURL**

```bash
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**

```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**

```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**

```bash
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

```json
{
  "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

`POST https://cotlet.dev/api/v1/rent-manager/send_text`

Access: write. Confirm: waits for the user's OK before it runs.

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 | Required | Description |
|---|---|---|---|
| `tenant_id` | string | yes | Tenant ID from list_tenants. |
| `message` | string | yes | Text message to the tenant. |

### Request

**cURL**

```bash
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**

```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**

```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**

```bash
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

```json
{
  "tenant_id": "10482",
  "to": "Jordan Lee",
  "status": "sent",
  "sent_at": "2026-10-12T09:05:00-04:00"
}
```
