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. |
| 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,
firstNamethroughcustom20andnotes— is cleared by sending"", onprospect/patch_by_idandprospect/post_bulkalike. Nevernull; full rules: call-contract.
sendingStatus values
Diagnosing a campaign that is
Runningbut 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
sendingStatusfilter on prospect/get (see its bounce recipe).
Notes
baseListIddefaults to the account's real "Unassigned" list ID when none was explicitly assigned — not a literal0(seeprospect/post/prospect/post_bulk).custom1–custom20are 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).