DealSleek API · Leads
PreviewIngest Captured Lead
Release reviewed capture, lead and evidence-backed consent atomically; existing identities require resolution. Does not extract, score or auto-route.
/api/v1/leads/dispatchHeaders
AuthorizationstringRequiredAccess token of the signed-in user, as a Bearer token. It identifies the user, their role and the workspace.
X-CQRS-ActionstringRequiredNames the command to run. Must be
INGEST_CAPTURED_LEADfor this endpoint.Content-TypestringRequiredAlways
application/json.X-Idempotency-KeystringOptionalA key you choose that is unique to this attempt. A command repeated with the same key is not applied a second time.
X-Correlation-IdstringOptionalYour own identifier for the request. Returned in the
x-correlation-idresponse header; generated when you leave it out.
Request body
capture_iduuidRequiredNo description yet.
consentobjectRequiredMust reference capture_id; missing evidence prevents release.
5 child fields
channelsarray of enumRequiredOne grant is written per channel. Empty is refused — a consent record that permits nothing is an audit trail with no subject.
- Allowed values
- SMS
- PHONE
- PROGRAMMATIC_AD
- AI_OUTREACH
- POSTAL
- minimum items 1
evidence_refstringRequiredPointer to the evidence: form submission id, list vendor + contract ref, signed agreement, recorded opt-in. Required, and deliberately not defaulted — "we have consent" without a pointer is an assertion, not a record, and it is the thing a regulator asks to see.
- minimum length 1
jurisdictionobjectRequiredNo description yet.
2 child fields
countrystringRequiredISO 3166-1 alpha-2 (
"US","DE","BD").subRegionstringRequiredSub-region for split regimes (
"US-CA","DE-BY"). Empty = whole country.
lead_iduuidRequiredNo description yet.
expires_atdate-time or nullOptionalNone= open-ended. Jurisdictions with a fixed consent lifetime should set this so the grant self-expires rather than relying on a cleanup job.
raw_payloadanyRequiredNo description yet.
reviewed_leadobjectRequiredNo description yet.
17 child fields
emailemailRequiredNo description yet.
first_namestringRequiredMay arrive blank from a form that only collected an address; the executor derives one from the email rather than refusing the lead. Still guaranteed non-blank on the way out — see
execute_create_lead.last_namestringRequiredNo description yet.
- minimum length 1
routing_mechanismenumRequiredNo description yet.
- Allowed values
- GEOGRAPHIC
- COGNITIVE_LIQUIDITY
- PSYCHOLOGICAL_AFFINITY
tenant_iduuidRequiredNo description yet.
assigned_rep_iduuid or nullOptionalOptional representative assigned to the lead during creation.
company_namestring or nullOptionalNo description yet.
custom_fieldsanyOptionalTenant-defined field values, keyed by
LeadCustomFieldDef.key. Rides the event AND projects toleads.custom_fields— same path as enrichment_snapshot, so a custom answer is as durable and as queryable as a platform one.enrichment_snapshotanyOptionalNo description yet.
initial_activationobject or nullOptionalOptional initial lifecycle activation (routing, sequence enrollment, cryosleep, or disqualification).
6 child fields
pathenumRequiredNo description yet.
- Allowed values
- enroll
- cryo
- discovery
- disqualify
- enroll
- Route + start the lifecycle (default), then enroll into a sequence.
- cryo
- Park in cryo-sleep until a wake signal fires (HIBERNATE_LEAD).
- discovery
- Keep as a finder discovery — no lead is created (RECORD_DISCOVERY).
- disqualify
- Close out with a BANT category + reason (DISQUALIFY_LEAD).
cryo_wake_triggerenum or nullOptionalNo description yet.
- Allowed values
- FUNDING_ROUND
- EXECUTIVE_CHANGE
- COMPETITOR_CONTRACT_EXPIRING
- SEMANTIC_WEB_SIGNAL
- INBOUND_ENQUIRY
disqualification_categoryenum or nullOptionalNo description yet.
- Allowed values
- BUDGET
- AUTHORITY
- NEED
- TIMING
- OTHER
disqualification_reasonstring or nullOptionalNo description yet.
rep_iduuid or nullOptionalNo description yet.
sequence_iduuid or nullOptionalNo description yet.
initial_consentobject or nullOptionalOptional initial consent grant recorded atomically with lead creation.
4 child fields
channelsarray of enumRequiredNo description yet.
- Allowed values
- SMS
- PHONE
- PROGRAMMATIC_AD
- AI_OUTREACH
- POSTAL
- minimum items 1
evidence_refstringRequiredNo description yet.
- minimum length 1
jurisdictionobjectRequiredNo description yet.
2 child fields
countrystringRequiredISO 3166-1 alpha-2 (
"US","DE","BD").subRegionstringRequiredSub-region for split regimes (
"US-CA","DE-BY"). Empty = whole country.
expires_atdate-time or nullOptionalNo description yet.
lifecycle_stageenum or nullOptionalLifecycle stage (e.g. Lead, MQL). Defaults to Lead.
- Allowed values
- SUBSCRIBER
- LEAD
- MARKETING_QUALIFIED_LEAD
- SALES_ACCEPTED_LEAD
- SALES_QUALIFIED_LEAD
- OPPORTUNITY
- CUSTOMER
- EVANGELIST
phonestring or nullOptionalNo description yet.
scorenumber or nullOptionalNo description yet.
score_overrideanyOptionalNo description yet.
sourceenum or nullOptionalAcquisition source (attribution). Optional — defaults to Direct for manual creation; the finder/import paths pass their own.
- Allowed values
- Direct
- Email Discovery
- Webinar
- Referral
- Google Ads
- Meta Ads
- LinkedIn Ads
- Import
- Web Form
- Inbound Email
- Import
- Bulk intake (CSV / paste). Distinct from
Directon purpose: an imported cohort has no first-party interaction behind it, so attribution, scoring priors and outreach eligibility should all be able to tell it apart from a lead who came to us. - Web Form
- Our own site's form, posted to
POST /intake/{sourceKey}. - Inbound Email
- Released from a reviewed capture of mail that arrived in a rep's connected mailbox (BYOE). Forced by the release executor from the capture source — never taken from the reviewer's payload.
stateenum or nullOptionalState of the lead (e.g. Discovered, Engaged). Defaults to Discovered. Create-time whitelist: only Discovered/Engaged are accepted — a lead cannot be born terminal (Converted/CryoSleep/Resurrected).
- Allowed values
- DISCOVERED
- ENGAGED
- CRYO_SLEEP
- RESURRECTED
- CONVERTED
- DISQUALIFIED
sourceenumRequiredNo description yet.
- Allowed values
- WEB_FORM
- EMAIL_REPLY
- LINKEDIN_DM
- CALL_TRANSCRIPT
- CONVERSATIONAL_VOICEBOT
- WEBHOOK_GENERIC
- MEETING_TRANSCRIPT
- BULK_IMPORT
- INBOUND_EMAIL
- WEB_FORM
- Inbound web form (still the default for most platforms).
- EMAIL_REPLY
- Lead extracted from a reply to an outbound email thread.
- LINKEDIN_DM
- LinkedIn DM, InMail, or Sales Navigator inbound.
- CALL_TRANSCRIPT
- Lead names + intent extracted from a call transcript (Gong / Chorus / native voice recorder).
- CONVERSATIONAL_VOICEBOT
- Conversational AI voicebot intake (Air, Synthflow, native).
- WEBHOOK_GENERIC
- Generic HTTP webhook with operator-defined field mapping.
- MEETING_TRANSCRIPT
- Names from a meeting transcript (Otter, Zoom AI, Read).
- BULK_IMPORT
- Imported batch (CSV upload, vendor list buy).
- INBOUND_EMAIL
- Cold inbound mail in a rep's connected mailbox (BYOE), staged by the triage workflow after the owner opted in. Distinct from
EmailReply: replies to our outreach cannot be matched today (outbound Message-IDs are not stored), so this names every staged inbound mail.
tenant_iduuidRequiredNo description yet.
source_connector_iduuid or nullOptionalNo description yet.
Response
Status 202. The command was applied. The body reports the outcome and, where the command changes a record, that record's new state.
successbooleanRequiredtruewhen the command was applied.error_messagestringRequiredEmpty when the command was applied.
projected_stateobjectOptionalThe record as it stands after the command.
event_payloadobjectOptionalThe event the command recorded.
insightsarray of objectOptionalAdvisory notes about the result. Each has a
code, amessageand animpactnumber.
Errors
Every error carries an HTTP status. Where it also carries a code, branch on the code, not on the message.
- 400
X-CQRS-Actionis missing or names a command this route does not accept. SendINGEST_CAPTURED_LEAD. - 400
DOMAIN_ROUTINGThe body is not a valid command. Check the required fields and their types. - 401The access token is missing, expired or not valid.
- 401
L1_AUTHThe caller's role is belowtenantadminor the caller has no access to this record. - 403
L1_POLICYA business rule refused the command. The message names the rule. - 409
L1_IDEMPOTENCYA command with this idempotency key was already applied. - 409
CONFLICTThe command would duplicate a record that must be unique. - 500
L3_COMMITThe command was valid but could not be saved.