REST API reference
Rently API
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
- Rently
| 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
readPOST https://cotlet.dev/api/v1/rently/list_properties
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 | Description |
|---|---|---|
| market | enum | on_market, off_market or all. Default: all. |
| search | string | Part of an address or a CRM tag. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/rently/list_properties \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("rently", "list_properties") const result = await cotlet.call('rently', 'list_properties'); cotlet call rently list_properties Example response
{
"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
} POST https://cotlet.dev/api/v1/rently/get_property_activity
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 | Description |
|---|---|---|
| property_id required | string | Property or unit ID from list_properties. |
| from | date | Start of the date range for leasing activities. |
| to | date | End of the date range. Default: today. |
Request
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"}' result = client.call("rently", "get_property_activity", {"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"}) const result = await cotlet.call('rently', 'get_property_activity', {"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"}); cotlet call rently get_property_activity --data '{"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"}' Example response
{
"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
readPOST https://cotlet.dev/api/v1/rently/list_leads
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 | Description |
|---|---|---|
| view | enum | all, iqual_plus or safe_mode. Default: all. |
| period | enum | last_1_month, last_3_months, last_6_months or all. Default: last_1_month. |
| agent | string | Only leads assigned to this agent email; "none" for unassigned. |
| cursor | string | Next page cursor from the previous call. |
Request
curl -X POST https://cotlet.dev/api/v1/rently/list_leads \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("rently", "list_leads") const result = await cotlet.call('rently', 'list_leads'); cotlet call rently list_leads Example response
{
"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
readPOST https://cotlet.dev/api/v1/rently/get_lead
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 | Description |
|---|---|---|
| lead_id required | string | Lead ID from list_leads. |
Request
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"}' result = client.call("rently", "get_lead", {"lead_id":"lead_8c41d2"}) const result = await cotlet.call('rently', 'get_lead', {"lead_id":"lead_8c41d2"}); cotlet call rently get_lead --data '{"lead_id":"lead_8c41d2"}' Example response
{
"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": []
} POST https://cotlet.dev/api/v1/rently/list_safe_mode_requests
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 -X POST https://cotlet.dev/api/v1/rently/list_safe_mode_requests \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("rently", "list_safe_mode_requests") const result = await cotlet.call('rently', 'list_safe_mode_requests'); cotlet call rently list_safe_mode_requests Example response
{
"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
readPOST https://cotlet.dev/api/v1/rently/get_dashboard
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 | Description |
|---|---|---|
| period | enum | last_week, last_month, last_quarter or custom. Default: last_week. |
| from | date | Start date, for custom only. |
| to | date | End date, for custom only. |
Request
curl -X POST https://cotlet.dev/api/v1/rently/get_dashboard \
-H "Authorization: Bearer $COTLET_API_KEY" result = client.call("rently", "get_dashboard") const result = await cotlet.call('rently', 'get_dashboard'); cotlet call rently get_dashboard Example response
{
"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
readPOST https://cotlet.dev/api/v1/rently/export_report
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 | Description |
|---|---|---|
| data_category required | enum | lockboxes, lead_activities or survey_feedback. |
| from | date | Start date. Not used for lockboxes. |
| to | date | End date. Not used for lockboxes. |
Request
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"}' result = client.call("rently", "export_report", {"data_category":"lockboxes"}) const result = await cotlet.call('rently', 'export_report', {"data_category":"lockboxes"}); cotlet call rently export_report --data '{"data_category":"lockboxes"}' Example response
{
"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
writePOST https://cotlet.dev/api/v1/rently/assign_lead
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 | Description |
|---|---|---|
| lead_id required | string | Lead ID from list_leads. |
| agent_email required | string | Email of the agent in your account. |
Request
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"}' result = client.call("rently", "assign_lead", {"lead_id":"4417203","agent_email":"anna@example.com"}) const result = await cotlet.call('rently', 'assign_lead', {"lead_id":"4417203","agent_email":"anna@example.com"}); cotlet call rently assign_lead --data '{"lead_id":"4417203","agent_email":"anna@example.com"}' Example response
{
"lead_id": "4417203",
"agent": "anna@example.com",
"status": "assigned"
} Set self-touring
writePOST https://cotlet.dev/api/v1/rently/set_self_touring
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 | Description |
|---|---|---|
| property_id required | string | Property or unit ID from list_properties. |
| enabled required | boolean | true to allow self-guided tours, false to stop them. |
Request
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}' result = client.call("rently", "set_self_touring", {"property_id":"1658301","enabled":False}) const result = await cotlet.call('rently', 'set_self_touring', {"property_id":"1658301","enabled":false}); cotlet call rently set_self_touring --data '{"property_id":"1658301","enabled":false}' Example response
{
"property_id": "1658301",
"address": "412 Oak St, Charlotte, NC",
"self_touring": false,
"status": "updated"
} POST https://cotlet.dev/api/v1/rently/grant_safe_mode_access
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 | Description |
|---|---|---|
| request_id required | string | Request ID from list_safe_mode_requests. |
Request
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"}' result = client.call("rently", "grant_safe_mode_access", {"request_id":"sm_90412"}) const result = await cotlet.call('rently', 'grant_safe_mode_access', {"request_id":"sm_90412"}); cotlet call rently grant_safe_mode_access --data '{"request_id":"sm_90412"}' Example response
{
"request_id": "sm_90412",
"lead_id": "4417203",
"property_id": "1658203",
"status": "approved"
} POST https://cotlet.dev/api/v1/rently/dismiss_safe_mode_request
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 | Description |
|---|---|---|
| request_id required | string | Request ID from list_safe_mode_requests. |
Request
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"}' result = client.call("rently", "dismiss_safe_mode_request", {"request_id":"request_8c41d2"}) const result = await cotlet.call('rently', 'dismiss_safe_mode_request', {"request_id":"request_8c41d2"}); cotlet call rently dismiss_safe_mode_request --data '{"request_id":"request_8c41d2"}' Example response
{
"request_id": "sm_90415",
"lead_id": "4417390",
"status": "dismissed"
} POST https://cotlet.dev/api/v1/rently/create_visitor_access_code
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 | Description |
|---|---|---|
| property_id required | string | Property or unit ID from list_properties. |
| visitor_name required | string | Full name of the visitor. |
| visitor_phone required | string | Visitor phone number. |
| visitor_email required | string | The code and instructions go to this email. |
| showing_date required | date | Day the code works. |
| description | string | Reason for the visit, e.g. "Plumbing repair". |
Request
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"}' 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"}) 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"}); 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
{
"property_id": "1658203",
"address": "88 Elm Ave, Charlotte, NC",
"showing_date": "2026-10-12",
"code_sent_to": "vendor@example.com",
"status": "sent"
} POST https://cotlet.dev/api/v1/rently/send_self_tour_invite
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 | Description |
|---|---|---|
| property_id required | string | Property or unit ID from list_properties. |
| name required | string | Prospect full name. |
| email required | string | Prospect email. |
| phone required | string | Prospect phone number. |
| tour_at required | datetime | Self-tour date and time, ISO 8601 with time zone. |
Request
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"}' 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"}) 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"}); 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
{
"property_id": "1658410",
"prospect": "maya@example.com",
"tour_at": "2026-10-13T14:00:00-04:00",
"link_valid_minutes": 15,
"status": "sent"
} POST https://cotlet.dev/api/v1/rently/ban_prospect
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 | Description |
|---|---|---|
| lead_id required | string | Lead ID from list_leads. |
| reason required | string | Why the prospect is banned. |
Request
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"}' result = client.call("rently", "ban_prospect", {"lead_id":"lead_8c41d2","reason":"reason"}) const result = await cotlet.call('rently', 'ban_prospect', {"lead_id":"lead_8c41d2","reason":"reason"}); cotlet call rently ban_prospect --data '{"lead_id":"lead_8c41d2","reason":"reason"}' Example response
{
"lead_id": "4417390",
"status": "banned",
"reason": "Left a door unlocked during a tour"
}