# Rently API

> Every Rently 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/rently

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)

14 endpoints for Rently. Each one is a POST with a JSON body, called with your API key.

- Base URL: `https://cotlet.dev/api/v1/rently`
- Connects with: Your Rently Tour Manager agent account (Admin or Super Admin for data exports)
- Integration page: https://cotlet.dev/integrations/rently-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `list_properties` | read | Properties or units in your account with address, rent, showing status and assigned lockbox. |
| `get_property_activity` | read | Activity Log of a property: status dates, lead traffic sources, showings with type and feedback, inquiries, waitlist and vendor entries. |
| `list_leads` | read | Leads from the Leads page with status, source, assigned agent and creation date. |
| `get_lead` | read | One lead: name, phone, email, status, assigned agent, comments, source and properties toured. |
| `list_safe_mode_requests` | read | Pending SafeMode Requests: prospects who scheduled a viewing that waits for your approval. |
| `get_dashboard` | read | Total self-showings, total leads, devices, on-market and off-market properties, and leads by source. |
| `export_report` | read | Data Export as a CSV download link. Admins and Super Admins only. |
| `assign_lead` | write | Assign a lead to one of your agents. |
| `set_self_touring` | write | Turn self-touring on or off for a property or unit, e.g. once it is leased. |
| `grant_safe_mode_access` | write | Approve a Safe Mode viewing; the prospect gets access to tour the property. |
| `dismiss_safe_mode_request` | write | Decline a Safe Mode viewing request. |
| `create_visitor_access_code` | write | Visitor Access Code for one showing date, sent to the visitor by email. |
| `send_self_tour_invite` | write | Invite a prospect to self-tour a unit at a set time (multifamily). The invite link is valid for 15 minutes. |
| `ban_prospect` | write | Ban a lead from touring your properties, with a reason. |

## List properties

`POST https://cotlet.dev/api/v1/rently/list_properties`

Access: read.

Lists the properties and units in your Rently account, with address, rent, showing status and the assigned lockbox. Filter by market to see only on-market or off-market homes, or search by part of an address or a CRM tag. Pages hold up to 100 properties; pass next_cursor back as cursor for the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `market` | enum | no | on_market, off_market or all. Default: all. |
| `search` | string | no | Part of an address or a CRM tag. |
| `limit` | integer | no | 1 to 100. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

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

**Python**

```python
result = client.call("rently", "list_properties")
```

**Node.js**

```js
const result = await cotlet.call('rently', 'list_properties');
```

**CLI**

```bash
cotlet call rently list_properties
```

### Example response

```json
{
  "properties": [
    {
      "property_id": "1658203",
      "address": "88 Elm Ave, Charlotte, NC",
      "rent": 1850,
      "market": "on_market",
      "showing_status": "self-touring on",
      "lockbox": "LB-20418"
    },
    {
      "property_id": "1658301",
      "address": "412 Oak St, Charlotte, NC",
      "rent": 1495,
      "market": "on_market",
      "showing_status": "self-touring on",
      "lockbox": "LB-20533"
    }
  ],
  "next_cursor": null
}
```

## Get property activity

`POST https://cotlet.dev/api/v1/rently/get_property_activity`

Access: read.

Returns the Activity Log of one property for a date range. It holds status dates, lead traffic sources, showings with their type and feedback, inquiries, waitlist entries and vendor entries. Without from and to, it covers up to today.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property or unit ID from list_properties. |
| `from` | date | no | Start of the date range for leasing activities. |
| `to` | date | no | End of the date range. Default: today. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/get_property_activity \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"}'
```

**Python**

```python
result = client.call("rently", "get_property_activity", {"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'get_property_activity', {"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"});
```

**CLI**

```bash
cotlet call rently get_property_activity --data '{"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"}'
```

### Example response

```json
{
  "property_id": "1658203",
  "address": "88 Elm Ave, Charlotte, NC",
  "from": "2026-09-27",
  "to": "2026-10-11",
  "showings": [
    {
      "type": "self_registered_viewing",
      "at": "2026-10-04T15:20:00-04:00",
      "feedback": "Liked the kitchen"
    }
  ],
  "inquiries": 3,
  "waitlist": 1
}
```

## List leads

`POST https://cotlet.dev/api/v1/rently/list_leads`

Access: read.

Lists the leads on the Leads page with status, source, assigned agent and the date the lead was created. Set view to iqual_plus or safe_mode to see one group, and agent to "none" to see only unassigned leads. The default period is the last month. Pass next_cursor back as cursor for the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `view` | enum | no | all, iqual_plus or safe_mode. Default: all. |
| `period` | enum | no | last_1_month, last_3_months, last_6_months or all. Default: last_1_month. |
| `agent` | string | no | Only leads assigned to this agent email; "none" for unassigned. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

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

**Python**

```python
result = client.call("rently", "list_leads")
```

**Node.js**

```js
const result = await cotlet.call('rently', 'list_leads');
```

**CLI**

```bash
cotlet call rently list_leads
```

### Example response

```json
{
  "leads": [
    {
      "lead_id": "4417203",
      "name": "Maya Brooks",
      "status": "New",
      "source": "Zillow",
      "agent": null,
      "created_at": "2026-10-08T10:12:00-04:00"
    },
    {
      "lead_id": "4417390",
      "name": "Dan Rivera",
      "status": "Toured",
      "source": "Website",
      "agent": "mark@example.com",
      "created_at": "2026-10-09T16:40:00-04:00"
    }
  ],
  "next_cursor": null
}
```

## Get lead

`POST https://cotlet.dev/api/v1/rently/get_lead`

Access: read.

Returns one lead from its detail page: name, phone, email, status, assigned agent, comments, source and the properties the lead toured. Use it to check a prospect before you approve a Safe Mode visit.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `lead_id` | string | yes | Lead ID from list_leads. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/get_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2"}'
```

**Python**

```python
result = client.call("rently", "get_lead", {"lead_id":"lead_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'get_lead', {"lead_id":"lead_8c41d2"});
```

**CLI**

```bash
cotlet call rently get_lead --data '{"lead_id":"lead_8c41d2"}'
```

### Example response

```json
{
  "lead_id": "4417203",
  "name": "Maya Brooks",
  "phone": "+15555550177",
  "email": "maya@example.com",
  "status": "New",
  "agent": null,
  "source": "Zillow",
  "comments": "Asked about pet policy.",
  "properties_toured": []
}
```

## List Safe Mode requests

`POST https://cotlet.dev/api/v1/rently/list_safe_mode_requests`

Access: read.

Lists the pending Safe Mode requests: prospects who scheduled a viewing that waits for your approval. Each item has the lead and the property. Pass request_id to grant_safe_mode_access or dismiss_safe_mode_request, and lead_id to get_lead.

### Parameters

No parameters.

### Request

**cURL**

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

**Python**

```python
result = client.call("rently", "list_safe_mode_requests")
```

**Node.js**

```js
const result = await cotlet.call('rently', 'list_safe_mode_requests');
```

**CLI**

```bash
cotlet call rently list_safe_mode_requests
```

### Example response

```json
{
  "requests": [
    {
      "request_id": "sm_90412",
      "lead_id": "4417203",
      "name": "Maya Brooks",
      "property_id": "1658203",
      "address": "88 Elm Ave, Charlotte, NC",
      "scheduled_for": "2026-10-12T17:00:00-04:00"
    }
  ]
}
```

## Get Data Dashboard

`POST https://cotlet.dev/api/v1/rently/get_dashboard`

Access: read.

Returns the figures from the Data Dashboard for one period: total self-showings, total leads, devices, on-market and off-market properties, and leads by source. The default period is last week; use custom with from and to for any other range.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `period` | enum | no | last_week, last_month, last_quarter or custom. Default: last_week. |
| `from` | date | no | Start date, for custom only. |
| `to` | date | no | End date, for custom only. |

### Request

**cURL**

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

**Python**

```python
result = client.call("rently", "get_dashboard")
```

**Node.js**

```js
const result = await cotlet.call('rently', 'get_dashboard');
```

**CLI**

```bash
cotlet call rently get_dashboard
```

### Example response

```json
{
  "period": "last_week",
  "self_showings": 38,
  "leads": 64,
  "devices": 21,
  "on_market": 14,
  "off_market": 7,
  "leads_by_source": {
    "Zillow": 31,
    "Website": 18,
    "Apartments_com": 15
  }
}
```

## Export report

`POST https://cotlet.dev/api/v1/rently/export_report`

Access: read.

Creates a Data Export for one category and returns a CSV download link. Categories are lockboxes, lead_activities and survey_feedback. Only Admins and Super Admins can export. The date range does not apply to lockboxes.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `data_category` | enum | yes | lockboxes, lead_activities or survey_feedback. |
| `from` | date | no | Start date. Not used for lockboxes. |
| `to` | date | no | End date. Not used for lockboxes. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/export_report \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data_category":"lockboxes"}'
```

**Python**

```python
result = client.call("rently", "export_report", {"data_category":"lockboxes"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'export_report', {"data_category":"lockboxes"});
```

**CLI**

```bash
cotlet call rently export_report --data '{"data_category":"lockboxes"}'
```

### Example response

```json
{
  "data_category": "lead_activities",
  "from": "2026-09-01",
  "to": "2026-09-30",
  "rows": 212,
  "download_url": "https://files.example.com/exports/lead_activities_2026-09.csv"
}
```

## Assign lead

`POST https://cotlet.dev/api/v1/rently/assign_lead`

Access: write.

Assigns one lead to an agent in your account, identified by email. The agent must already exist in Rently. It reaches no renter and one more call assigns the lead to someone else, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `lead_id` | string | yes | Lead ID from list_leads. |
| `agent_email` | string | yes | Email of the agent in your account. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/assign_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"4417203","agent_email":"anna@example.com"}'
```

**Python**

```python
result = client.call("rently", "assign_lead", {"lead_id":"4417203","agent_email":"anna@example.com"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'assign_lead', {"lead_id":"4417203","agent_email":"anna@example.com"});
```

**CLI**

```bash
cotlet call rently assign_lead --data '{"lead_id":"4417203","agent_email":"anna@example.com"}'
```

### Example response

```json
{
  "lead_id": "4417203",
  "agent": "anna@example.com",
  "status": "assigned"
}
```

## Set self-touring

`POST https://cotlet.dev/api/v1/rently/set_self_touring`

Access: write.

Turns self-guided tours on or off for one property or unit. Set enabled to false when a home is leased and true to open it again. It changes no data of renters and one call undoes it, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property or unit ID from list_properties. |
| `enabled` | boolean | yes | true to allow self-guided tours, false to stop them. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/set_self_touring \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"1658301","enabled":false}'
```

**Python**

```python
result = client.call("rently", "set_self_touring", {"property_id":"1658301","enabled":False})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'set_self_touring', {"property_id":"1658301","enabled":false});
```

**CLI**

```bash
cotlet call rently set_self_touring --data '{"property_id":"1658301","enabled":false}'
```

### Example response

```json
{
  "property_id": "1658301",
  "address": "412 Oak St, Charlotte, NC",
  "self_touring": false,
  "status": "updated"
}
```

## Grant Safe Mode access

`POST https://cotlet.dev/api/v1/rently/grant_safe_mode_access`

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

Approves one pending Safe Mode request, so the prospect gets access to tour the property at the scheduled time. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `request_id` | string | yes | Request ID from list_safe_mode_requests. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/grant_safe_mode_access \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"request_id":"sm_90412"}'
```

**Python**

```python
result = client.call("rently", "grant_safe_mode_access", {"request_id":"sm_90412"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'grant_safe_mode_access', {"request_id":"sm_90412"});
```

**CLI**

```bash
cotlet call rently grant_safe_mode_access --data '{"request_id":"sm_90412"}'
```

### Example response

```json
{
  "request_id": "sm_90412",
  "lead_id": "4417203",
  "property_id": "1658203",
  "status": "approved"
}
```

## Dismiss Safe Mode request

`POST https://cotlet.dev/api/v1/rently/dismiss_safe_mode_request`

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

Declines one pending Safe Mode request, so the prospect gets no access to the property. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `request_id` | string | yes | Request ID from list_safe_mode_requests. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/dismiss_safe_mode_request \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"request_id":"request_8c41d2"}'
```

**Python**

```python
result = client.call("rently", "dismiss_safe_mode_request", {"request_id":"request_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'dismiss_safe_mode_request', {"request_id":"request_8c41d2"});
```

**CLI**

```bash
cotlet call rently dismiss_safe_mode_request --data '{"request_id":"request_8c41d2"}'
```

### Example response

```json
{
  "request_id": "sm_90415",
  "lead_id": "4417390",
  "status": "dismissed"
}
```

## Create visitor access code

`POST https://cotlet.dev/api/v1/rently/create_visitor_access_code`

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

Creates a Visitor Access Code for one person and one day at a property, and emails the code and instructions to the visitor. Use it for vendors, inspectors or agents who need to enter once. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property or unit ID from list_properties. |
| `visitor_name` | string | yes | Full name of the visitor. |
| `visitor_phone` | string | yes | Visitor phone number. |
| `visitor_email` | string | yes | The code and instructions go to this email. |
| `showing_date` | date | yes | Day the code works. |
| `description` | string | no | Reason for the visit, e.g. "Plumbing repair". |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/create_visitor_access_code \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"1658203","visitor_name":"Your Plumber","visitor_phone":"+15555550142","visitor_email":"vendor@example.com","showing_date":"2026-10-12","description":"Kitchen sink repair"}'
```

**Python**

```python
result = client.call("rently", "create_visitor_access_code", {"property_id":"1658203","visitor_name":"Your Plumber","visitor_phone":"+15555550142","visitor_email":"vendor@example.com","showing_date":"2026-10-12","description":"Kitchen sink repair"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'create_visitor_access_code', {"property_id":"1658203","visitor_name":"Your Plumber","visitor_phone":"+15555550142","visitor_email":"vendor@example.com","showing_date":"2026-10-12","description":"Kitchen sink repair"});
```

**CLI**

```bash
cotlet call rently create_visitor_access_code --data '{"property_id":"1658203","visitor_name":"Your Plumber","visitor_phone":"+15555550142","visitor_email":"vendor@example.com","showing_date":"2026-10-12","description":"Kitchen sink repair"}'
```

### Example response

```json
{
  "property_id": "1658203",
  "address": "88 Elm Ave, Charlotte, NC",
  "showing_date": "2026-10-12",
  "code_sent_to": "vendor@example.com",
  "status": "sent"
}
```

## Send self-tour invite

`POST https://cotlet.dev/api/v1/rently/send_self_tour_invite`

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

Sends a prospect an invite to self-tour a unit at a set date and time, for multifamily properties. The invite link is valid for 15 minutes. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `property_id` | string | yes | Property or unit ID from list_properties. |
| `name` | string | yes | Prospect full name. |
| `email` | string | yes | Prospect email. |
| `phone` | string | yes | Prospect phone number. |
| `tour_at` | datetime | yes | Self-tour date and time, ISO 8601 with time zone. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/send_self_tour_invite \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"property_id":"property_8c41d2","name":"Jane Doe","email":"jane@example.com","phone":"phone","tour_at":"2026-10-01T09:00:00Z"}'
```

**Python**

```python
result = client.call("rently", "send_self_tour_invite", {"property_id":"property_8c41d2","name":"Jane Doe","email":"jane@example.com","phone":"phone","tour_at":"2026-10-01T09:00:00Z"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'send_self_tour_invite', {"property_id":"property_8c41d2","name":"Jane Doe","email":"jane@example.com","phone":"phone","tour_at":"2026-10-01T09:00:00Z"});
```

**CLI**

```bash
cotlet call rently send_self_tour_invite --data '{"property_id":"property_8c41d2","name":"Jane Doe","email":"jane@example.com","phone":"phone","tour_at":"2026-10-01T09:00:00Z"}'
```

### Example response

```json
{
  "property_id": "1658410",
  "prospect": "maya@example.com",
  "tour_at": "2026-10-13T14:00:00-04:00",
  "link_valid_minutes": 15,
  "status": "sent"
}
```

## Ban prospect

`POST https://cotlet.dev/api/v1/rently/ban_prospect`

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

Bans one lead from touring your properties and stores the reason. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `lead_id` | string | yes | Lead ID from list_leads. |
| `reason` | string | yes | Why the prospect is banned. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/rently/ban_prospect \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2","reason":"reason"}'
```

**Python**

```python
result = client.call("rently", "ban_prospect", {"lead_id":"lead_8c41d2","reason":"reason"})
```

**Node.js**

```js
const result = await cotlet.call('rently', 'ban_prospect', {"lead_id":"lead_8c41d2","reason":"reason"});
```

**CLI**

```bash
cotlet call rently ban_prospect --data '{"lead_id":"lead_8c41d2","reason":"reason"}'
```

### Example response

```json
{
  "lead_id": "4417390",
  "status": "banned",
  "reason": "Left a door unlocked during a tour"
}
```
