Skip to main content
TroopyDocs
Open Troopy
Troopy

API reference / CRM

Find leads

Asks the teammate who finds leads (Outreach) for people or companies that fit, in plain words: it makes a list, and the teammate looks (open places data, the web), adds the leads that fit with the page that shows it (a Fits column, which can fill itself for rows added later), then waits for review. Comment on its task to ask for more or for something else. Returns at once: the list's finder says where the task is.

post/api/v1/lists/find

Authorization

HeaderAuthorization: Bearer <API key>
Or the headerX-API-Key: <API key>
API keyMake one in Troopy under Settings > API keys. It acts as you, in its workspace.
Scopescrm:write

Other ways to call it

CLItroopy lists find
MCP tooltroopy_find_leads
Rate limit10 calls in 60 seconds, for each key
RetriesSend an Idempotency-Key header. A retry with the same key gets the first answer back, and the operation runs one time.

Body

application/json
ask*string

Who to find, in plain words: what they do, where, and what makes one a fit

At least 10 characters · At most 800 characters

kindenum<string>

What each row is: companies (the default) or people

peoplecompanies

Default "companies"

namestring

The list's name; the ask's first line when left out

At least 1 characters · At most 120 characters

playenum<string>

A ready-made play whose columns the list gets too, filled in (by AI, from each lead's site) as leads are added

modernizejust_raisedhiringships_abroaddecision_makers

Response

202 · application/json
data*object
11 properties
id*string

A 24-character id

name*string
kind*enum<string>

peoplecompanies

rows*integer
createdBy*object

Who wrote it

3 properties
type*enum<string>

personagentapi

id*string
name*string
updatedBy*object

Who wrote it

3 properties
type*enum<string>

personagentapi

id*string
name*string
createdAt*string

ISO 8601 date and time

updatedAt*string

ISO 8601 date and time

columns*array<object>
8 properties
id*string

A standard column's field (name, email, title...) or c1, c2... for the list's own

name*string
type*enum<string>

textnumberdateselectmulti_selecturlcheckboxemailphonelong_text

options*array<object>
3 properties
id*string

Its name: a select's value is its option's name

name*string
color*enum<string>

stoneskymintsandrosepeachcyanorange

width*integer
hidden*boolean
standard*boolean

The record's own field, the same on every list it is on; it can be hidden, not deleted

work*object | null

What it works out when it runs, for a work column; null for the rest

3 properties
kind*"ai"
ask*string

What to work out for each row, in plain words

At least 1 characters · At most 1000 characters

read*boolean

Read each row's website (its home, contact, about and team pages) first

Default false

rev*integer

Goes up with every change to its rows: send it back to read rows only when something changed

finder*object | null

The teammate asked to find its rows (POST /lists/find), and where its task is

4 properties
handle*string

The teammate's handle

name*string
task*string

Its task's key, like VIR-12: comment there to ask for more or for something else

status*enum<string>

backlogtodoin_progressneeds_youin_reviewdonecanceled

Errors

400 invalid_inputFix the field named in detail. Each operation's schema is in /api/v1/openapi.json.
401 unauthorizedSend an API key as `Authorization: Bearer tr_live_...`. Create one in Troopy under Settings.
403 forbiddenThe key lacks a scope this operation needs, or its owner lacks the role. detail says which; create a key with the scope, or ask an organization owner or admin.
409 conflictThis Idempotency-Key was used for a different request, or that request is still running. Use a new key for a new request.
429 rate_limitedWait the number of seconds in Retry-After, then retry.