Create, update, list, and manage prospects
List Prospects
Returns prospects that match every filter you send (filters combine with AND). With no filters, or with
only createdAfter/createdBefore, results are ordered newest first. With other filters the order is
not guaranteed; it stays stable across pages.
Results are paginated with limit and pageToken. When another page is available,
pagination.nextPageToken is set and pagination.hasMore is true. An unrecognized pageToken is
ignored and the first page is returned. When nothing matches, the response is 200 with an empty
items array.
pagination.totalCount is the total number of matches when the request uses at most one of title,
company, stageId, or label (optionally with date filters). When email, phone, name, ownerId,
officeId, sourceId, pipelineId, or starred is used, or several filters are combined, it is the
number of items in this page. Use GET /prospects/count for a total in that case.
fields accepts these names: id, message, firstName, lastName, email, emailLower, phone,
currentStage, currentStageId, pipelineId, labels, title, company, createdAt, updatedAt,
ownerId, address, summary, licenseStatus, carrierEnrichment, phoneUndeliverable, lastNote, createdBy,
updatedBy, createdByApi, createdByApiKeyId, createdByApiKeyName, stageId, officeId, sourceId,
starred, ooa, unsubscribed, jobId, applyAt, applicationQuestions, licenseStatusAtApply,
latitude, longitude.
query Parameters
emailstringFilter by email (case-insensitive). A value containing
@or.must match the whole address; otherwise it matches addresses that start with the value.Example: avery.coleman@example.comphonestringFilter by phone number prefix. The value is normalized like a stored phone (10 digits get a leading
1), so send at least 10 digits. A value that is not a valid US/Canada number matches nothing.Example: 5552345678namestringFilter by name prefix (case-insensitive). One word matches prospects whose first or last name starts with it. Two or more words match prospects whose first name starts with the first word and last name starts with the last word.
Example: Avery ColemantitlestringFilter by exact title (case-sensitive).
Example: Sales ManagercompanystringFilter by exact company name (case-sensitive).
Example: Northwind HealthstageIdstringFilter by stage ID. Same identifier used on create/update and returned on prospect responses as
stageId.Example: 9a3d7c1e4b2f48d6a5c0e1f9b7d2a346labelstring[] · maxItems: 10 · style: form · explode: trueFilter by label(s). Supports repeated query params (
?label=Hot&label=Inbound) or a comma-separated value (?label=Hot,Inbound). Matches prospects that have any of the labels (exact, case-sensitive). Up to 10 labels are used; extra labels are ignored.Example: ["Hot","Inbound"]ownerIdstringFilter by owner (a user ID from
GET /account/users).officeIdstringFilter by office ID (from
GET /account/offices).sourceIdstringFilter by source ID (from
GET /account/sources).pipelineIdstringFilter by pipeline ID (from
GET /account/pipelines).starredbooleantruefor starred prospects only,falsefor prospects that are not starred. Any other value returns400.createdAfterOnly prospects created at or after this time. Unix epoch milliseconds or seconds, or an ISO 8601 date string.
Example: 1717000000000createdBeforeOnly prospects created at or before this time. Unix epoch milliseconds or seconds, or an ISO 8601 date string. Must not be earlier than
createdAfter.Example: 2024-06-30T23:59:59Zlimitinteger · min: 1 · max: 1000Page size. Values above 1000 are reduced to 1000.
Example: 25Default: 25pageTokenstringOpaque pagination token returned as
pagination.nextPageTokenby a previousGET /prospectsrequest with the same filters.Example: eyJpZCI6ImMxYTdlOWQzNGI4ZjRjMmFhNmQxNWUwZjdiM2M5ZDQyIn0=fieldsstringOptional comma-separated list of top-level field names to include in each list item. Use this to reduce response payload size for large list requests.
idis always included when present. Nested paths are not supported, and the accepted names depend on the endpoint. Unknown field names or invalid syntax (for example nested selectors) return HTTP 400 withinvalidFieldsand/orinvalidSyntaxin the error body.Example: id,prospectId,hireDate
Responses
OK
successboolean · requireditemsobject[] · requiredpaginationobject · requiredPagination metadata. Fields are included only when that resource supports them; some list endpoints return an empty object.
Example: {"nextPageToken":"opaque-page-token-example","hasMore":true,"totalCount":125}
Create or Update Prospect
Creates a prospect, or finds an existing prospect in the account with the same email address (case-insensitive) or, if none, the same phone number. Only a valid email or phone is used for matching.
Keys from connecting an AI tool (MCP OAuth keys, scoped to the person who connected):
- A match is never updated unless the request sends
update: true; it returns409withcode: duplicate_contactandmatches: [{ id, matchType, firstName, lastName }], and nothing changes. - A create that would start a Settings automation or an automatic sequence that texts or emails the
prospect returns
409withcode: confirmation_required,automations, andsequences, and creates nothing. Send the same request withconfirm: trueonce the person approves. Other API keys are not asked to confirm.
New prospect (201): the prospect is created with the fields you send.
- Stage:
stageId, otherwise the default stage ofpipelineId, otherwise the default stage of the account's default pipeline. - Owner:
ownerId, otherwiseuserId, otherwise the account's default owner: a user with the account owner role, or, when there is none, an admin. If none can be found, the request returns400(No owner ID provided and no default owner found). - Without
userId, the prospect is credited to the API key (createdByApi: true,createdByApiKeyId,createdByApiKeyName). - Office: when
officeIdis omitted andpostalCodeis sent, the nearest active office is assigned. If the account limits office distance and the prospect is too far away, no office is assigned andooaistrue. - City, state, latitude, and longitude are filled in from the address or postal code when possible.
notesis saved as the prospect's first note.- An invalid phone or email is not saved. The request still succeeds,
item.messageexplains which value was dropped, and a note recording the submitted value is added to the prospect.
Existing prospect, update: true (default) (200): the matched prospect is updated and the
response body is the updated prospect object itself, not wrapped in { success, item }.
firstNameandlastNameare always replaced. Other fields change only when you send them; sendnullto clearemail,phone,title,company,licenseStatus,officeId, or an address field.labelsare added to the existing labels.stageIdorpipelineIdmoves the prospect and records a stage change.sourceIdchanges only when the existing prospect was created more than 30 days ago; a note records the change.newSourceNamecreates the source but does not change a matched prospect's source.notesis not saved for a matched prospect.- If the submitted phone or email belongs to a different prospect, the request returns
409withcode: duplicate_contact.
Existing prospect, update: false (200): the existing prospect is returned in { success, item }
with item.message Success: prospect already exists. and no changes, except as described below.
Repeat submissions: when the matched prospect was created more than 24 hours ago, a task is
assigned to its owner ("Duplicate prospect attempt: ... already exists.") and a note lists the submitted
values that differ. With update: false, fields with new non-empty values are also copied onto the
prospect and new labels are added. Send skipDuplicateProspectHandling: true to skip this.
Headers
X-Idempotency-KeystringOptional. Client-generated key that makes retries of this request safe. The first response for the key is stored for 24 hours and replayed for retries with the same method, path, query, and body. Reuse a key only when retrying the exact same request.
Example: idem_prospect_create_01HV6W0J7Y7A5Q3T4J6N8M2P
Request Body
firstNamestring · requiredProspect first name.
lastNamestring · requiredProspect last name.
confirmbooleanKeys from connecting an AI tool only:
trueonce the person approved a create that starts an automation or sequence that texts or emails the prospect.updatebooleanWhen
true(JSON boolean) and a matching prospect exists, that prospect is updated with the submitted fields. Any other value returns the existing prospect without applying the submitted fields.Default: trueemailstring | null · emailProspect email address. On a matched prospect,
nullor an empty string clears it.phonestring | nullUS/Canada phone number (10 digits, or 11 starting with
1; formatting is ignored). On a matched prospect,nullor an empty string clears it.stageIdstringStage ID from
GET /account/stages. Takes precedence overpipelineId. An unknown ID returns400.pipelineIdstringPipeline ID from
GET /account/pipelines, used only whenstageIdis omitted. The prospect is placed in that pipeline's default stage.ownerIdstringOwner user ID from
GET /account/users. Defaults touserId, then to the account's default owner (an account owner, or an admin when there is none). Used for new prospects only.userIdstringUser ID from
GET /account/usersto record as the user who created or updated the prospect. Also used as the owner of a new prospect whenownerIdis omitted.createdByUserIdstringUser ID to record as the creator instead of
userId.licenseStatusstring | null · enumLicense status. On a matched prospect,
nullclears it.Enum values:not_startedin_progresslicensedlabelsLabels to attach. Accepts a comma-separated string or an array of strings.
notesstringFirst note for a new prospect. HTML is sanitized. Not saved for a matched prospect.
titlestring | nullJob title. On a matched prospect,
nullclears it.companystring | nullCompany name. On a matched prospect,
nullclears it.streetAddressstring | nullStreet address. On a matched prospect, only the address fields you send change;
nullclears one.citystring | nullstatestring | nullState or province.
postalCodestring | nullZIP or postal code. Also used to assign the nearest office when
officeIdis omitted.officeIdstring | nullOffice ID from
GET /account/offices. An unknown ID returns400. On a matched prospect,nullclears it.sourceIdstring | nullSource ID from
GET /account/sources. An unknown ID returns400. On a matched prospect the source changes only when the prospect was created more than 30 days ago.newSourceNamestringCreates a new source with this name and uses it for a new prospect instead of
sourceId.resumeobjectResume file to attach to the prospect. Saving the file also adds a note with a link to it. The whole request body must fit within the 1 MB limit, so the base64 data must be under about 750 KB of file.
muteWebhookbooleanNew prospects only. When
true, noprospect.createdwebhook is sent for this prospect. The setting stays on the prospect, so laterprospect.updatedwebhooks, the account's prospect automations, and new-prospect notifications are also skipped for it.Default: falsejobIdstringJob ID to link the prospect to. Sets
applyAtto the request time.applicationQuestionsobject[]Job application answers (up to 50). Items without a
labelare dropped. Array answers keep up to 50 values.skipDuplicateProspectHandlingbooleanWhen
true, a repeat submission does not create the duplicate-attempt task and note.Default: false
Responses
Existing prospect matched. With update: true the body is the updated prospect object (unwrapped); with update: false it is { success, item }.
Decision Table
| Variant | Matching Criteria |
|---|---|
| type = object · requires: success, item | |
| type = object |
successboolean · requireditemobject · requiredA prospect record. Responses return the fields below when they are set on the record. Other fields may appear; ignore fields you do not use.
Example: {"id":"c1a7e9d34b8f4c2aa6d15e0f7b3c9d42","firstName":"Avery","lastName":"Coleman","email":"avery.coleman@example.com","emailLower":"avery.coleman@example.com","phone":"15552345678","stageId":"9a3d7c1e4b2f48d6a5c0e1f9b7d2a346","currentStageId":"9a3d7c1e4b2f48d6a5c0e1f9b7d2a346","currentStage":"New Lead","pipelineId":"3d9a1c7e4b2f46d8a5c0e1f9b7d2a348","ownerId":"b2e7a1d94c3f4a8eb6d05c1f9a7e2d45","officeId":"7c1e4a9d2b3f46d8a5c0e1f9b7d2a350","sourceId":"2e9a7c1d4b3f46d8a5c0e1f9b2d7a351","labels":["Hot","Inbound"],"title":"Sales Manager","company":"Northwind Health","licenseStatus":"in_progress","address":{"streetAddress":"123 Main St","city":"New York","state":"NY","postalCode":"10001"},"createdAt":1717000000000,"updatedAt":1717003600000}
Update Prospect (ID in Body)
Same as POST /prospects/{prospectId}, with the prospect ID sent as prospectId in the body.
Changes the fields sent in updates and leaves everything else as it is. Each change is recorded in
the prospect's change history, and the prospect's owner is notified of changes made by someone else
(an ownership change on its own does not notify).
A key from connecting an AI tool (MCP OAuth) must send confirm: true when the change would start a
Settings automation or an automatic sequence that texts or emails the prospect; otherwise the request
returns 409 with code: confirmation_required, automations, and sequences, and nothing changes.
Headers
X-Idempotency-KeystringOptional. Client-generated key that makes retries of this request safe. The first response for the key is stored for 24 hours and replayed for retries with the same method, path, query, and body. Reuse a key only when retrying the exact same request.
Example: idem_prospect_create_01HV6W0J7Y7A5Q3T4J6N8M2P
Request Body
prospectIdstring · requiredID of the prospect to update.
updatesobject · requiredFields to change on the prospect. Omitted fields are left as they are. Send
nullto clear a field that allows it; empty strings are ignored fortitle,company, andlicenseStatus.
confirmbooleanKeys from connecting an AI tool only:
trueonce the person approved a change that starts an automation or sequence that texts or emails the prospect.userIdstringUser ID from
GET /account/usersto record as the user who made the change. When sent withupdates.ownerId, this user must be allowed to change the owner.resumeobjectResume file to attach to the prospect. Saving the file also adds a note with a link to it. The whole request body must fit within the 1 MB limit, so the base64 data must be under about 750 KB of file.
Responses
Updated. The body is the prospect object itself (not wrapped in { success, item }). changes lists only the change entries added by this request.
idstringmessagestringOnly on
POST /prospectscreate and lookup responses:Success: prospect created.orSuccess: prospect already exists., followed by a warning when the submitted phone or email was invalid and was not saved.updatebooleanOnly on
POST /prospectscreate and lookup responses. Alwaysfalse.firstNamestringlastNamestringemailstring | nullEmail address. An empty string or
nullmeans none.emailLowerstringLowercased email address, used for matching.
phonestring | null11-digit US/Canada phone number without
+, for example15552345678.stageIdstring | nullStage ID for the prospect. Use the same value on create/update and on list/count filters.
currentStageIdstring | nullSame value as
stageId(older name).currentStagestring | nullDisplay name of the prospect's stage. Read-only; set and filter stage with
stageId.pipelineIdstring | nullPipeline of the current stage.
ownerIdstring | nullUser ID of the prospect owner.
officeIdstring | nullsourceIdstring | nulllabelsstring[]titlestring | nullcompanystring | nulllicenseStatusstring | null · enumEnum values:not_startedin_progresslicensedaddressobjectlatitudenumber | nullLatitude looked up from the address or postal code.
longitudenumber | nullLongitude looked up from the address or postal code.
ooabooleanOut of area. True when the account limits office distance and the prospect is farther than that from the nearest active office.
starredbooleanjobIdstring | nullJob the prospect applied to.
applyAtinteger | null · int64Unix timestamp in milliseconds of the latest job application.
applicationQuestionsobject[]unsubscribedobjectOpt-outs by channel.
truemeans the prospect does not want to be contacted that way.carrierEnrichmentobjectPhone line details looked up when the phone number is saved.
phoneUndeliverableobject · readOnlyPresent when Twilio rejected the prospect's phone for texting and no line type was found for it. Texts to that number are refused until the phone changes. It applies only while
phonestill equalsphoneUndeliverable.phone.lastNoteobjectMost recent note on the prospect.
muteWebhookbooleanTrue when the prospect was created with
muteWebhook, which suppresses its outbound webhooks.createdBystring | nullUser recorded as the creator.
createdByApibooleanTrue when the prospect was created through the API.
createdByApiKeyIdstring | nullcreatedByApiKeyNamestring | nullupdatedBystring | nullUser recorded on the latest update.
changesobject[]Field change history. Update responses return only the entries added by that update.
createdAtinteger | null · int64Unix timestamp in milliseconds
updatedAtinteger | null · int64Unix timestamp in milliseconds
summaryobject | nullAI summary of the prospect, returned by
GET /prospects/{prospectId}.timestampis when the summary was written (Unix milliseconds). A summary newer than 12 hours is returned as stored withrefreshing: false. A missing or older summary is regenerated first, and the request waits up to 5 seconds; if it is not ready by then, the previous summary (ornullcontent) is returned withrefreshing: true.resumeobjectStored resume details when a resume was uploaded.
resumeUploadedobjectOnly on
POST /prospectscreate responses that includedresume.resumeUploadErrorstringOnly on
POST /prospectscreate responses whose resume could not be saved. The prospect is still created.
Count Prospects
Returns the number of prospects matching the same filters as GET /prospects, without returning prospect records. limit, pageToken, and fields are ignored. When email, phone, or name is used, or several of title, company, stageId, label, ownerId, officeId, sourceId, pipelineId, and starred are combined (or starred=false is used), at most 1000 candidate prospects are examined, so counts above 1000 can be undercounted.
query Parameters
emailstringFilter by email (case-insensitive). A value containing
@or.must match the whole address; otherwise it matches addresses that start with the value.Example: avery.coleman@example.comphonestringFilter by phone number prefix. The value is normalized like a stored phone (10 digits get a leading
1), so send at least 10 digits. A value that is not a valid US/Canada number matches nothing.Example: 5552345678namestringFilter by name prefix (case-insensitive). One word matches prospects whose first or last name starts with it. Two or more words match prospects whose first name starts with the first word and last name starts with the last word.
Example: Avery ColemantitlestringFilter by exact title (case-sensitive).
Example: Sales ManagercompanystringFilter by exact company name (case-sensitive).
Example: Northwind HealthstageIdstringFilter by stage ID. Same identifier used on create/update and returned on prospect responses as
stageId.Example: 9a3d7c1e4b2f48d6a5c0e1f9b7d2a346labelstring[] · maxItems: 10 · style: form · explode: trueFilter by label(s). Supports repeated query params (
?label=Hot&label=Inbound) or a comma-separated value (?label=Hot,Inbound). Matches prospects that have any of the labels (exact, case-sensitive). Up to 10 labels are used; extra labels are ignored.Example: ["Hot","Inbound"]ownerIdstringFilter by owner (a user ID from
GET /account/users).officeIdstringFilter by office ID (from
GET /account/offices).sourceIdstringFilter by source ID (from
GET /account/sources).pipelineIdstringFilter by pipeline ID (from
GET /account/pipelines).starredbooleantruefor starred prospects only,falsefor prospects that are not starred. Any other value returns400.createdAfterOnly prospects created at or after this time. Unix epoch milliseconds or seconds, or an ISO 8601 date string.
Example: 1717000000000createdBeforeOnly prospects created at or before this time. Unix epoch milliseconds or seconds, or an ISO 8601 date string. Must not be earlier than
createdAfter.Example: 2024-06-30T23:59:59Z
Responses
OK
successboolean · requiredcountinteger · required
Find Duplicate Prospects
Returns the prospects in this account that already have this email address or phone number, matched the same way POST /prospects matches (case-insensitive email, then normalized phone). Read-only: nothing is created or changed, so check here before creating someone. Send email, phone, or both. Results are ordered as POST /prospects would pick a match: both, then email, then phone (at most 10 each). A key scoped to a manager or user gets { "hidden": true, "matchType": "email" } for a match their role cannot see, with no details.
query Parameters
emailstringExample: avery.coleman@example.comphonestringUS or Canada number in any format.
Example: 5552345678
Responses
OK
successbooleanExample: trueitemsobject[]paginationobjectPagination metadata. Fields are included only when that resource supports them; some list endpoints return an empty object.
Example: {"nextPageToken":"opaque-page-token-example","hasMore":true,"totalCount":125}
Get Prospect by ID
Returns the prospect in item, including item.summary, an AI summary object (content, timestamp, refreshing). A summary newer than 12 hours is returned as stored. A missing or older summary is regenerated first, so this request can take up to 5 seconds longer; if the new summary is not ready by then, the previous one is returned with refreshing: true.
path Parameters
prospectIdstring · requiredExample: c1a7e9d34b8f4c2aa6d15e0f7b3c9d42
Responses
OK
successboolean · requireditemobject · requiredA prospect record. Responses return the fields below when they are set on the record. Other fields may appear; ignore fields you do not use.
Example: {"id":"c1a7e9d34b8f4c2aa6d15e0f7b3c9d42","firstName":"Avery","lastName":"Coleman","email":"avery.coleman@example.com","emailLower":"avery.coleman@example.com","phone":"15552345678","stageId":"9a3d7c1e4b2f48d6a5c0e1f9b7d2a346","currentStageId":"9a3d7c1e4b2f48d6a5c0e1f9b7d2a346","currentStage":"New Lead","pipelineId":"3d9a1c7e4b2f46d8a5c0e1f9b7d2a348","ownerId":"b2e7a1d94c3f4a8eb6d05c1f9a7e2d45","officeId":"7c1e4a9d2b3f46d8a5c0e1f9b7d2a350","sourceId":"2e9a7c1d4b3f46d8a5c0e1f9b2d7a351","labels":["Hot","Inbound"],"title":"Sales Manager","company":"Northwind Health","licenseStatus":"in_progress","address":{"streetAddress":"123 Main St","city":"New York","state":"NY","postalCode":"10001"},"createdAt":1717000000000,"updatedAt":1717003600000}
Update Prospect
Changes the fields sent in updates and leaves everything else as it is. Each change is recorded in
the prospect's change history, and the prospect's owner is notified of changes made by someone else
(an ownership change on its own does not notify).
A key from connecting an AI tool (MCP OAuth) must send confirm: true when the change would start a
Settings automation or an automatic sequence that texts or emails the prospect; otherwise the request
returns 409 with code: confirmation_required, automations, and sequences, and nothing changes.
path Parameters
prospectIdstring · requiredExample: c1a7e9d34b8f4c2aa6d15e0f7b3c9d42
Headers
X-Idempotency-KeystringOptional. Client-generated key that makes retries of this request safe. The first response for the key is stored for 24 hours and replayed for retries with the same method, path, query, and body. Reuse a key only when retrying the exact same request.
Example: idem_prospect_create_01HV6W0J7Y7A5Q3T4J6N8M2P
Request Body
updatesobject · requiredFields to change on the prospect. Omitted fields are left as they are. Send
nullto clear a field that allows it; empty strings are ignored fortitle,company, andlicenseStatus.
userIdstringUser ID from
GET /account/usersto record as the user who made the change. When sent withupdates.ownerId, this user must be allowed to change the owner.resumeobjectResume file to attach to the prospect. Saving the file also adds a note with a link to it. The whole request body must fit within the 1 MB limit, so the base64 data must be under about 750 KB of file.
confirmbooleanKeys from connecting an AI tool only:
trueonce the person approved a change that starts an automation or sequence that texts or emails the prospect.
Responses
Updated. The body is the prospect object itself (not wrapped in { success, item }). changes lists only the change entries added by this request.
idstringmessagestringOnly on
POST /prospectscreate and lookup responses:Success: prospect created.orSuccess: prospect already exists., followed by a warning when the submitted phone or email was invalid and was not saved.updatebooleanOnly on
POST /prospectscreate and lookup responses. Alwaysfalse.firstNamestringlastNamestringemailstring | nullEmail address. An empty string or
nullmeans none.emailLowerstringLowercased email address, used for matching.
phonestring | null11-digit US/Canada phone number without
+, for example15552345678.stageIdstring | nullStage ID for the prospect. Use the same value on create/update and on list/count filters.
currentStageIdstring | nullSame value as
stageId(older name).currentStagestring | nullDisplay name of the prospect's stage. Read-only; set and filter stage with
stageId.pipelineIdstring | nullPipeline of the current stage.
ownerIdstring | nullUser ID of the prospect owner.
officeIdstring | nullsourceIdstring | nulllabelsstring[]titlestring | nullcompanystring | nulllicenseStatusstring | null · enumEnum values:not_startedin_progresslicensedaddressobjectlatitudenumber | nullLatitude looked up from the address or postal code.
longitudenumber | nullLongitude looked up from the address or postal code.
ooabooleanOut of area. True when the account limits office distance and the prospect is farther than that from the nearest active office.
starredbooleanjobIdstring | nullJob the prospect applied to.
applyAtinteger | null · int64Unix timestamp in milliseconds of the latest job application.
applicationQuestionsobject[]unsubscribedobjectOpt-outs by channel.
truemeans the prospect does not want to be contacted that way.carrierEnrichmentobjectPhone line details looked up when the phone number is saved.
phoneUndeliverableobject · readOnlyPresent when Twilio rejected the prospect's phone for texting and no line type was found for it. Texts to that number are refused until the phone changes. It applies only while
phonestill equalsphoneUndeliverable.phone.lastNoteobjectMost recent note on the prospect.
muteWebhookbooleanTrue when the prospect was created with
muteWebhook, which suppresses its outbound webhooks.createdBystring | nullUser recorded as the creator.
createdByApibooleanTrue when the prospect was created through the API.
createdByApiKeyIdstring | nullcreatedByApiKeyNamestring | nullupdatedBystring | nullUser recorded on the latest update.
changesobject[]Field change history. Update responses return only the entries added by that update.
createdAtinteger | null · int64Unix timestamp in milliseconds
updatedAtinteger | null · int64Unix timestamp in milliseconds
summaryobject | nullAI summary of the prospect, returned by
GET /prospects/{prospectId}.timestampis when the summary was written (Unix milliseconds). A summary newer than 12 hours is returned as stored withrefreshing: false. A missing or older summary is regenerated first, and the request waits up to 5 seconds; if it is not ready by then, the previous summary (ornullcontent) is returned withrefreshing: true.resumeobjectStored resume details when a resume was uploaded.
resumeUploadedobjectOnly on
POST /prospectscreate responses that includedresume.resumeUploadErrorstringOnly on
POST /prospectscreate responses whose resume could not be saved. The prospect is still created.
Delete Prospect
Deletes the prospect together with its notes, tasks, meetings, hires, and stage history. Its scheduled texts and emails, and text and email history that involves only this prospect, are deleted; history shared with other prospects is kept without this prospect.
path Parameters
prospectIdstring · requiredExample: c1a7e9d34b8f4c2aa6d15e0f7b3c9d42
Headers
X-Idempotency-KeystringOptional. Client-generated key that makes retries of this request safe. The first response for the key is stored for 24 hours and replayed for retries with the same method, path, query, and body. Reuse a key only when retrying the exact same request.
Example: idem_prospect_create_01HV6W0J7Y7A5Q3T4J6N8M2P
Responses
Deleted
successboolean · requiredmessagestring · required
deletionBatchIdstringIdentifier for this deletion.
Get Prospect Context
Everything needed to catch up on one prospect in one call: details (prospect), recent notes (plain text), tasks.open and tasks.recentlyCompleted, meetings.upcoming and meetings.recent, stageHistory, recent texts, emails, and calls by thread (conversations, newest thread first, each with its latest messages oldest first), drafts waiting to be sent and scheduled messages (pending.queuedDrafts, pending.scheduledMessages), and campaigns: the sequences the prospect is in (active ones with their next step, then up to 5 that ended) and scheduled one-time sends that will reach them. Times are epoch milliseconds; timeZone is the account's.
detail=summary (default) returns 5 notes, 3 threads with 5 messages each, and short excerpts. detail=full returns 15 notes, 8 threads with 20 messages each, and longer text. A key scoped to a manager or user gets 404 for a prospect their role cannot see, and does not see teammates' personal (device handoff) threads.
path Parameters
prospectIdstring · requiredExample: c1a7e9d34b8f4c2aa6d15e0f7b3c9d42
query Parameters
detailstring · enumEnum values:summaryfullDefault: summary
Responses
OK
successbooleanExample: trueitemobject
Queue a Draft for Review
Queues a text or email draft in one of the prospect's conversations. Nothing is sent. The draft shows in that thread and on the Today queue for every member of the conversation, and any of them can review, edit, send, or cancel it in HiringCenter. HiringCenter AI never cancels it.
Where it goes: conversationId when sent (it must include the prospect; you must be a member unless you are an admin or owner); otherwise identityId's 1:1 thread with the prospect (created when missing; you need access to that identity); otherwise, as the app's New Conversation picker does, the identity you last sent from, else your first identity that can send this channel, else (texts only) your personal device handoff thread, which you send from your phone by editing the draft. An account-wide key has no user, so it must send conversationId or identityId.
Refused with 422 when the prospect cannot get the channel (code: prospect_opted_out, prospect_no_phone, prospect_no_email, prospect_phone_undeliverable, prospect_email_blocked, identity_cannot_send, no_identity), and 409 pending_draft when that conversation already has a draft waiting.
path Parameters
prospectIdstring · requiredExample: c1a7e9d34b8f4c2aa6d15e0f7b3c9d42
Headers
X-Idempotency-KeystringOptional. Client-generated key that makes retries of this request safe. The first response for the key is stored for 24 hours and replayed for retries with the same method, path, query, and body. Reuse a key only when retrying the exact same request.
Example: idem_prospect_create_01HV6W0J7Y7A5Q3T4J6N8M2P
Request Body
bodystring · maxLength: 8000 · requiredPlain text. At most 1600 characters for a text. Blank lines become paragraphs in an email.
channelstring · enumEnum values:textemailDefault: textsubjectstring · maxLength: 200Required for an email; not allowed for a text.
conversationIdstringidentityIdstring
Responses
Queued
successbooleanExample: trueitemobject

