REST API reference

REsimpli API

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

Base URL
https://cotlet.dev/api/v1/resimpli
Connects with
Your own REsimpli account
Integration page
REsimpli
REsimpli Endpoints
Endpoint Access Description
list_leads read Leads with property address, pipeline, status, assignee and tags.
get_lead read Full lead: contacts, property, status, notes, tags, tasks and recent activity.
list_pipelines read Your pipelines and the statuses in each, with IDs, as set up in your account.
list_automations read Your lead automations, including drips, with name and whether each is on.
get_skip_trace_results read Phone numbers and emails found for a lead.
create_lead write New seller lead with contact details and property address.
update_lead_status write Move a lead to another status, or to a status in another pipeline.
add_lead_note write Add a note to the lead, visible to your team.
tag_lead write Add or remove tags on a lead.
assign_lead write Assign a lead to a team member.
create_task write Set up a task on a lead with a due time and assignee.
skip_trace_lead write Run a skip trace on the lead's property owner.
enroll_lead_in_automation write Add a lead to an automation; its steps can text, email or mail the seller.
remove_lead_from_automation write Stop a running automation for one lead. Steps not yet sent are skipped.
send_sms write Text a lead from your REsimpli campaign number. Shows in the lead's inbox.

List leads

read

POST https://cotlet.dev/api/v1/resimpli/list_leads

Lists leads from your account, newest first. Filter by search text, pipeline, status IDs or tag. Pages hold up to 100 leads; raise page for the next one. Use lead_id from each item in the other tools.

Parameters

Parameters: list_leads
NameTypeDescription
search string Name, phone, email or property address.
pipeline_id string Pipeline ID from list_pipelines.
status_ids string[] Status IDs from list_pipelines.
tag string Only leads with this tag.
page integer Page number. Default: 1.
limit integer 1 to 100. Default: 25.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/list_leads \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("resimpli", "list_leads")
Node.js
const result = await cotlet.call('resimpli', 'list_leads');
CLI
cotlet call resimpli list_leads

Example response

{
  "leads": [
    {
      "lead_id": "66f1c2a9e4b0a1d3c8f20417",
      "name": "Dana Whitfield",
      "property_address": "12 Oak St, Columbus, OH 43215",
      "pipeline": "Acquisitions",
      "status": "Contact Made",
      "assignee": "Sam Rivera",
      "tags": [
        "D4D October"
      ]
    }
  ],
  "page": 1,
  "has_more": true
}

Get lead

read

POST https://cotlet.dev/api/v1/resimpli/get_lead

Returns one lead with contacts, property, current status, notes, tags, open tasks, the automations it is in and recent activity. Use it before changing a lead so your agent sees what your team already did.

Parameters

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

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/get_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2"}'
Python
result = client.call("resimpli", "get_lead", {"lead_id":"lead_8c41d2"})
Node.js
const result = await cotlet.call('resimpli', 'get_lead', {"lead_id":"lead_8c41d2"});
CLI
cotlet call resimpli get_lead --data '{"lead_id":"lead_8c41d2"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "name": "Dana Whitfield",
  "phones": [
    "6145550142"
  ],
  "property_address": "12 Oak St, Columbus, OH 43215",
  "pipeline": "Acquisitions",
  "status": "Contact Made",
  "assignee": {
    "user_id": "u_41",
    "name": "Sam Rivera"
  },
  "tags": [
    "D4D October"
  ],
  "notes": [
    {
      "text": "Open to an offer this week.",
      "created_at": "2026-10-08T15:10:00-04:00"
    }
  ],
  "tasks": [],
  "automations": []
}

POST https://cotlet.dev/api/v1/resimpli/list_pipelines

Returns your pipelines in the order set in your account, each with its statuses in order. Names and IDs are yours, not defaults. Use the IDs in list_leads and update_lead_status.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/list_pipelines \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("resimpli", "list_pipelines")
Node.js
const result = await cotlet.call('resimpli', 'list_pipelines');
CLI
cotlet call resimpli list_pipelines

Example response

{
  "pipelines": [
    {
      "pipeline_id": "pl_acq",
      "name": "Acquisitions",
      "statuses": [
        {
          "status_id": "64a0d5b2c91e7f0012ab33a1",
          "name": "Contact Made"
        },
        {
          "status_id": "64a0d5b2c91e7f0012ab33c6",
          "name": "Under Contract"
        }
      ]
    }
  ]
}

POST https://cotlet.dev/api/v1/resimpli/list_automations

Returns the automations in your account with their name and on or off state. Pass automation_id to enroll_lead_in_automation.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/list_automations \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("resimpli", "list_automations")
Node.js
const result = await cotlet.call('resimpli', 'list_automations');
CLI
cotlet call resimpli list_automations

Example response

{
  "automations": [
    {
      "automation_id": "65b7e0a3d2c4f1009e8a1b52",
      "name": "Reactivation",
      "active": true
    }
  ]
}

POST https://cotlet.dev/api/v1/resimpli/get_skip_trace_results

Returns the phone numbers and emails the skip traces on this lead found. A lead with no skip trace returns an empty list. It does not start a skip trace; skip_trace_lead does.

Parameters

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

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/get_skip_trace_results \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2"}'
Python
result = client.call("resimpli", "get_skip_trace_results", {"lead_id":"lead_8c41d2"})
Node.js
const result = await cotlet.call('resimpli', 'get_skip_trace_results', {"lead_id":"lead_8c41d2"});
CLI
cotlet call resimpli get_skip_trace_results --data '{"lead_id":"lead_8c41d2"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "results": [
    {
      "phones": [
        "6145550142",
        "6145550177"
      ],
      "emails": [
        "dana.w@example.com"
      ]
    }
  ]
}

Create lead

write

POST https://cotlet.dev/api/v1/resimpli/create_lead

Creates a lead and returns its ID and the status it starts in. It reaches no one. It runs without asking by default, and delete the lead in REsimpli to undo it.

Parameters

Parameters: create_lead
NameTypeDescription
first_name required string Seller first name.
last_name string Seller last name.
phone required string 10-digit phone number.
email string Seller email.
property_address string Full property address.
marketing_campaign_id string Campaign the lead came from.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/create_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"first_name":"first name","phone":"phone"}'
Python
result = client.call("resimpli", "create_lead", {"first_name":"first name","phone":"phone"})
Node.js
const result = await cotlet.call('resimpli', 'create_lead', {"first_name":"first name","phone":"phone"});
CLI
cotlet call resimpli create_lead --data '{"first_name":"first name","phone":"phone"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20499",
  "name": "Dana Whitfield",
  "property_address": "12 Oak St, Columbus, OH 43215",
  "status": "New Lead",
  "created_at": "2026-10-11T09:12:00-04:00"
}

POST https://cotlet.dev/api/v1/resimpli/update_lead_status

Moves one lead to another status and returns the new and previous status. Pass pipeline_id to move it to a status in another pipeline. It reaches no one directly and runs without asking by default; one more call moves the lead back.

Parameters

Parameters: update_lead_status
NameTypeDescription
lead_id required string Lead ID from list_leads.
status_id required string Status ID from list_pipelines.
pipeline_id string Target pipeline, if it changes.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/update_lead_status \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"66f1c2a9e4b0a1d3c8f20417","status_id":"64a0d5b2c91e7f0012ab33c6"}'
Python
result = client.call("resimpli", "update_lead_status", {"lead_id":"66f1c2a9e4b0a1d3c8f20417","status_id":"64a0d5b2c91e7f0012ab33c6"})
Node.js
const result = await cotlet.call('resimpli', 'update_lead_status', {"lead_id":"66f1c2a9e4b0a1d3c8f20417","status_id":"64a0d5b2c91e7f0012ab33c6"});
CLI
cotlet call resimpli update_lead_status --data '{"lead_id":"66f1c2a9e4b0a1d3c8f20417","status_id":"64a0d5b2c91e7f0012ab33c6"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "property_address": "12 Oak St, Columbus, OH 43215",
  "pipeline": "Acquisitions",
  "status": "Under Contract",
  "previous_status": "Contact Made",
  "updated_at": "2026-10-11T14:32:05-04:00"
}

POST https://cotlet.dev/api/v1/resimpli/add_lead_note

Adds a note to the lead's history under your name. Your team sees it; the seller does not. It runs without asking by default.

Parameters

Parameters: add_lead_note
NameTypeDescription
lead_id required string Lead ID from list_leads.
text required string Note text.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/add_lead_note \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2","text":"text"}'
Python
result = client.call("resimpli", "add_lead_note", {"lead_id":"lead_8c41d2","text":"text"})
Node.js
const result = await cotlet.call('resimpli', 'add_lead_note', {"lead_id":"lead_8c41d2","text":"text"});
CLI
cotlet call resimpli add_lead_note --data '{"lead_id":"lead_8c41d2","text":"text"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "note_id": "n_9d21",
  "text": "Offer accepted at $142,000.",
  "created_at": "2026-10-11T14:33:10-04:00"
}

Tag lead

write

POST https://cotlet.dev/api/v1/resimpli/tag_lead

Adds and removes tags on one lead in a single call and returns the lead's tags after the change. It runs without asking by default and one more call reverses it.

Parameters

Parameters: tag_lead
NameTypeDescription
lead_id required string Lead ID from list_leads.
add string[] Tags to add.
remove string[] Tags to remove.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/tag_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2"}'
Python
result = client.call("resimpli", "tag_lead", {"lead_id":"lead_8c41d2"})
Node.js
const result = await cotlet.call('resimpli', 'tag_lead', {"lead_id":"lead_8c41d2"});
CLI
cotlet call resimpli tag_lead --data '{"lead_id":"lead_8c41d2"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20499",
  "tags": [
    "D4D October"
  ]
}

Assign lead

write

POST https://cotlet.dev/api/v1/resimpli/assign_lead

Assigns the lead to one team member and replaces the current assignee. The call fails if the user_id is not on your team. It runs without asking by default and one more call reassigns it.

Parameters

Parameters: assign_lead
NameTypeDescription
lead_id required string Lead ID from list_leads.
user_id required string Team member ID from get_lead.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/assign_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2","user_id":"user_8c41d2"}'
Python
result = client.call("resimpli", "assign_lead", {"lead_id":"lead_8c41d2","user_id":"user_8c41d2"})
Node.js
const result = await cotlet.call('resimpli', 'assign_lead', {"lead_id":"lead_8c41d2","user_id":"user_8c41d2"});
CLI
cotlet call resimpli assign_lead --data '{"lead_id":"lead_8c41d2","user_id":"user_8c41d2"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "assignee": {
    "user_id": "u_41",
    "name": "Sam Rivera"
  }
}

Create task

write

POST https://cotlet.dev/api/v1/resimpli/create_task

Creates a task on the lead with a title, due time and assignee, and returns its ID. The due time needs a time zone. The assignee is you unless you name someone else. It runs without asking by default.

Parameters

Parameters: create_task
NameTypeDescription
lead_id required string Lead ID from list_leads.
title required string What to do.
due_at required datetime ISO 8601 with time zone.
assignee_id string Team member. Default: you.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/create_task \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2","title":"title","due_at":"2026-10-01T09:00:00Z"}'
Python
result = client.call("resimpli", "create_task", {"lead_id":"lead_8c41d2","title":"title","due_at":"2026-10-01T09:00:00Z"})
Node.js
const result = await cotlet.call('resimpli', 'create_task', {"lead_id":"lead_8c41d2","title":"title","due_at":"2026-10-01T09:00:00Z"});
CLI
cotlet call resimpli create_task --data '{"lead_id":"lead_8c41d2","title":"title","due_at":"2026-10-01T09:00:00Z"}'

Example response

{
  "task_id": "t_5530",
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "title": "Call back about 12 Oak St",
  "due_at": "2026-10-12T10:00:00-04:00",
  "assignee": "You"
}

Skip trace lead

write Confirm

POST https://cotlet.dev/api/v1/resimpli/skip_trace_lead

Starts a skip trace for the lead in your REsimpli account and returns once it is queued; read the outcome with get_skip_trace_results. REsimpli's own skip tracing pricing applies. By default you confirm each call; you can switch that off for this tool.

Parameters

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

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/skip_trace_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2"}'
Python
result = client.call("resimpli", "skip_trace_lead", {"lead_id":"lead_8c41d2"})
Node.js
const result = await cotlet.call('resimpli', 'skip_trace_lead', {"lead_id":"lead_8c41d2"});
CLI
cotlet call resimpli skip_trace_lead --data '{"lead_id":"lead_8c41d2"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "status": "queued",
  "requested_at": "2026-10-11T09:20:00-04:00"
}

POST https://cotlet.dev/api/v1/resimpli/enroll_lead_in_automation

Adds one lead to an automation and returns its state. The automation's steps can text, email or mail the seller on the schedule you set in REsimpli. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: enroll_lead_in_automation
NameTypeDescription
lead_id required string Lead ID from list_leads.
automation_id required string Automation ID from list_automations.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/enroll_lead_in_automation \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"66f1c2a9e4b0a1d3c8f20417","automation_id":"65b7e0a3d2c4f1009e8a1b52"}'
Python
result = client.call("resimpli", "enroll_lead_in_automation", {"lead_id":"66f1c2a9e4b0a1d3c8f20417","automation_id":"65b7e0a3d2c4f1009e8a1b52"})
Node.js
const result = await cotlet.call('resimpli', 'enroll_lead_in_automation', {"lead_id":"66f1c2a9e4b0a1d3c8f20417","automation_id":"65b7e0a3d2c4f1009e8a1b52"});
CLI
cotlet call resimpli enroll_lead_in_automation --data '{"lead_id":"66f1c2a9e4b0a1d3c8f20417","automation_id":"65b7e0a3d2c4f1009e8a1b52"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "automation_id": "65b7e0a3d2c4f1009e8a1b52",
  "status": "enrolled"
}

POST https://cotlet.dev/api/v1/resimpli/remove_lead_from_automation

Stops the automation for one lead. Steps already sent stay sent; the rest are skipped. It reaches no one, so it runs without asking by default.

Parameters

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

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/remove_lead_from_automation \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2","automation_id":"automation_8c41d2"}'
Python
result = client.call("resimpli", "remove_lead_from_automation", {"lead_id":"lead_8c41d2","automation_id":"automation_8c41d2"})
Node.js
const result = await cotlet.call('resimpli', 'remove_lead_from_automation', {"lead_id":"lead_8c41d2","automation_id":"automation_8c41d2"});
CLI
cotlet call resimpli remove_lead_from_automation --data '{"lead_id":"lead_8c41d2","automation_id":"automation_8c41d2"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "automation_id": "65b7e0a3d2c4f1009e8a1b52",
  "status": "removed"
}

Send SMS

write Confirm

POST https://cotlet.dev/api/v1/resimpli/send_sms

Sends a text to one lead from your REsimpli number, and the message shows in the lead's conversation. Use to_phone to pick one of the lead's numbers. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: send_sms
NameTypeDescription
lead_id required string Lead ID from list_leads.
body required string Message text.
to_phone string Which of the lead's numbers. Default: primary.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/resimpli/send_sms \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2","body":"body"}'
Python
result = client.call("resimpli", "send_sms", {"lead_id":"lead_8c41d2","body":"body"})
Node.js
const result = await cotlet.call('resimpli', 'send_sms', {"lead_id":"lead_8c41d2","body":"body"});
CLI
cotlet call resimpli send_sms --data '{"lead_id":"lead_8c41d2","body":"body"}'

Example response

{
  "lead_id": "66f1c2a9e4b0a1d3c8f20417",
  "message_id": "sms_7712",
  "to": "6145550142",
  "status": "sent",
  "sent_at": "2026-10-11T09:25:00-04:00"
}