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

POST 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

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

Parameters: get_property_activity
NameTypeDescription
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
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
result = client.call("rently", "get_property_activity", {"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"})
Node.js
const result = await cotlet.call('rently', 'get_property_activity', {"property_id":"1658203","from":"2026-09-28","to":"2026-10-11"});
CLI
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

read

POST 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

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

read

POST 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

Parameters: get_lead
NameTypeDescription
lead_id required string Lead ID from list_leads.

Request

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

POST 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

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

POST 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

Parameters: export_report
NameTypeDescription
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
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
result = client.call("rently", "export_report", {"data_category":"lockboxes"})
Node.js
const result = await cotlet.call('rently', 'export_report', {"data_category":"lockboxes"});
CLI
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

write

POST 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

Parameters: assign_lead
NameTypeDescription
lead_id required string Lead ID from list_leads.
agent_email required string Email of the agent in your account.

Request

cURL
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
result = client.call("rently", "assign_lead", {"lead_id":"4417203","agent_email":"anna@example.com"})
Node.js
const result = await cotlet.call('rently', 'assign_lead', {"lead_id":"4417203","agent_email":"anna@example.com"});
CLI
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"
}

POST 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

Parameters: set_self_touring
NameTypeDescription
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
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
result = client.call("rently", "set_self_touring", {"property_id":"1658301","enabled":False})
Node.js
const result = await cotlet.call('rently', 'set_self_touring', {"property_id":"1658301","enabled":false});
CLI
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"
}

Grant Safe Mode access

write Confirm

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

Parameters: grant_safe_mode_access
NameTypeDescription
request_id required string Request ID from list_safe_mode_requests.

Request

cURL
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
result = client.call("rently", "grant_safe_mode_access", {"request_id":"sm_90412"})
Node.js
const result = await cotlet.call('rently', 'grant_safe_mode_access', {"request_id":"sm_90412"});
CLI
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

Parameters: dismiss_safe_mode_request
NameTypeDescription
request_id required string Request ID from list_safe_mode_requests.

Request

cURL
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
result = client.call("rently", "dismiss_safe_mode_request", {"request_id":"request_8c41d2"})
Node.js
const result = await cotlet.call('rently', 'dismiss_safe_mode_request', {"request_id":"request_8c41d2"});
CLI
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

Parameters: create_visitor_access_code
NameTypeDescription
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
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
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
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
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"
}

Send self-tour invite

write Confirm

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

Parameters: send_self_tour_invite
NameTypeDescription
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
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
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
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
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"
}

Ban prospect

write Confirm

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

Parameters: ban_prospect
NameTypeDescription
lead_id required string Lead ID from list_leads.
reason required string Why the prospect is banned.

Request

cURL
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
result = client.call("rently", "ban_prospect", {"lead_id":"lead_8c41d2","reason":"reason"})
Node.js
const result = await cotlet.call('rently', 'ban_prospect', {"lead_id":"lead_8c41d2","reason":"reason"});
CLI
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"
}