MCP

schemas/prospect

The Prospect object returned by prospect/get, prospect/get_by_id, and mutation responses.

field type constraints description
prospectId integer int64 Unique identifier.
createdAt string date-time When the prospect was created.
email string email, max 256 Prospect email address.
baseListId integer List this prospect belongs to; when none was explicitly assigned (e.g. at creation) this holds the account's real "Unassigned" list ID — not a literal 0 (see prospect/post/prospect/post_bulk).
sendingStatus string see table below Current campaign participation state.
sendingActive boolean Whether the prospect is currently eligible for sending — not whether it is enrolled in any campaign; an unenrolled prospect can read sendingActive: true. To check campaign membership, filter prospect/get with includeCampaignIds.campaignIds.
firstName string max 512 First name.
lastName string max 512 Last name.
company string max 512 Company name.
jobPosition string max 512 Job title/position.
industry string max 512 Industry sector.
city string max 512 City.
state string max 128 State or province.
country string max 512 Country.
location string max 512 Geographic location or address.
phone string max 512 Contact phone.
website string max 512 Company website URL.
domain string max 180 Company domain (extracted from email or website).
companySocial string max 512 Company social media profile URL.
companySize string max 32 Employee count range or size description.
personalSocial string max 512 Personal social profile URL (LinkedIn, Twitter, etc.).
customImageUrl string max 256 Custom image URL.
screenshotUrl string max 256 Website/profile screenshot URL.
logoUrl string max 256 Company logo URL.
icebreaker string max 4000 Personalized conversation starter.
custom1 string max 2000 Free-text custom field 1. In email copy this field is {{CUSTOM_1}}not {{CUSTOM1}}; see the note below.
custom2 string max 2000 Free-text custom field 2.
custom3 string max 2000 Free-text custom field 3.
custom4 string max 2000 Free-text custom field 4.
custom5 string max 2000 Free-text custom field 5.
custom6 string max 2000 Free-text custom field 6.
custom7 string max 2000 Free-text custom field 7.
custom8 string max 2000 Free-text custom field 8.
custom9 string max 2000 Free-text custom field 9.
custom10 string max 2000 Free-text custom field 10.
custom11 string max 2000 Free-text custom field 11.
custom12 string max 2000 Free-text custom field 12.
custom13 string max 2000 Free-text custom field 13.
custom14 string max 2000 Free-text custom field 14.
custom15 string max 2000 Free-text custom field 15.
custom16 string max 2000 Free-text custom field 16.
custom17 string max 2000 Free-text custom field 17.
custom18 string max 2000 Free-text custom field 18.
custom19 string max 2000 Free-text custom field 19.
custom20 string max 2000 Free-text custom field 20.
notes string Internal notes about this prospect.
validatedAt string date-time When the prospect's email was last validated.
validationStatus string one of: Unvalidated, Valid, Invalid, CatchAll, Disposable, Unknown Email validation verdict.
tags array Embedded tag refs; see schemas/tag-ref. Empty when none.

Clearing a value on a write: every string field above — all of them, firstName through custom20 and notes — is cleared by sending "", on prospect/patch_by_id and prospect/post_bulk alike. Never null; full rules: call-contract.

sendingStatus values

Diagnosing a campaign that is Running but not sending? These values are the fastest route to the cause — why-isnt-it-sending walks them in order.

value meaning
NotSet The normal resting value. A prospect that has never had a send outcome recorded reads NotSet — including one freshly enrolled into a Running campaign whose first email has not gone out yet. It is not a blocker and not an error; a campaign sending normally shows NotSet right up until the send lands.
Unknown Status not determined.
EspMatchNotFound No sender matched the prospect's email provider.
EspNotAllowed Prospect's email provider is excluded by ESP limits.
NoWarmup No warmed-up sender available.
NotReceiving Sender not accepting inbound.
WarmupLimits Warmup daily limit reached.
SendingLimits Campaign or sender daily limit reached.
NoSender No sender assigned to campaign.
Stuck Prospect stuck (sending blocked).
MailboxInexistent Mailbox does not exist.
EmptySubject Campaign subject is empty.
EmptyBody Campaign body is empty.
MissingPlaceholder A personalization variable the campaign uses has no value on this prospect, and the campaign deactivates rather than mails such prospects (the web app labels this state "Missing Tag"). Fill the field, or give the variable a default: fallback — personalization-variables.
Invalid Prospect email invalid.
Blacklisted Email or domain on blacklist.
Stopped Sending manually stopped.
Unsub Prospect unsubscribed.
BounceHard Hard bounce recorded (see note below).
BounceSoft Soft bounce recorded (see note below).
AutoNolonger Auto-reply indicating no longer at company.
AutoOoo Auto-reply out-of-office.
AutoReply Other auto-reply received.
CollegueReplied A colleague replied on behalf of this prospect.
SenderDisconnected Assigned sender is disconnected.
Paused Campaign is paused.
InsufficientCredit Account lacks credits to send.
ScheduleInactive Outside the campaign's send schedule.
NotInterested Prospect marked Not Interested.
NotSet Outcome not yet set.
Neutral Neutral outcome.
MaybeLater Prospect requested follow-up later.
Interested Prospect marked Interested.
MeetingBooked Meeting booked with prospect.
MeetingCompleted Meeting completed.
Won Deal won.
Subbed Prospect subscribed.

BounceHard / BounceSoft caveat: BounceHard/BounceSoft are real prospect states — to list prospects in these states, use the sendingStatus filter on prospect/get (see its bounce recipe).

Notes

  • baseListId defaults to the account's real "Unassigned" list ID when none was explicitly assigned — not a literal 0 (see prospect/post/prospect/post_bulk).
  • custom1custom20 are free-text fields; use them for any additional prospect data. In a subject or body they are addressed as {{CUSTOM_1}}{{CUSTOM_20}} — the variable carries an underscore the field does not, and the vocabulary is a closed list rather than a rule applied to field names, so {{CUSTOM1}} is rejected at start. These slots can be renamed in the web app, and the numbered form keeps working regardless — a renamed slot additionally accepts its new name, which no operation here can read, so prefer the number. Full vocabulary and how to recover from the 422: personalization-variables.
  • Null-valued fields are omitted from every response (server-wide).