DealSleek API · Leads

Preview

Ingest Captured Lead

Release reviewed capture, lead and evidence-backed consent atomically; existing identities require resolution. Does not extract, score or auto-route.

POST/api/v1/leads/dispatch

Authorization

Minimum role
Tenant administratorThe caller must hold this role or a higher one.
Action
INGEST_CAPTURED_LEAD

Headers

  • AuthorizationstringRequired

    Access token of the signed-in user, as a Bearer token. It identifies the user, their role and the workspace.

  • X-CQRS-ActionstringRequired

    Names the command to run. Must be INGEST_CAPTURED_LEAD for this endpoint.

  • Content-TypestringRequired

    Always application/json.

  • X-Idempotency-KeystringOptional

    A key you choose that is unique to this attempt. A command repeated with the same key is not applied a second time.

  • X-Correlation-IdstringOptional

    Your own identifier for the request. Returned in the x-correlation-id response header; generated when you leave it out.

Request body

  • capture_iduuidRequired

    No description yet.

  • consentobjectRequired

    Must reference capture_id; missing evidence prevents release.

    5 child fields
    • channelsarray of enumRequired

      One grant is written per channel. Empty is refused — a consent record that permits nothing is an audit trail with no subject.

      Allowed values
      • EMAIL
      • SMS
      • PHONE
      • LINKEDIN
      • PROGRAMMATIC_AD
      • AI_OUTREACH
      • POSTAL
      minimum items 1
    • evidence_refstringRequired

      Pointer 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
    • jurisdictionobjectRequired

      No description yet.

      2 child fields
      • countrystringRequired

        ISO 3166-1 alpha-2 ("US", "DE", "BD").

      • subRegionstringRequired

        Sub-region for split regimes ("US-CA", "DE-BY"). Empty = whole country.

    • lead_iduuidRequired

      No description yet.

    • expires_atdate-time or nullOptional

      None = open-ended. Jurisdictions with a fixed consent lifetime should set this so the grant self-expires rather than relying on a cleanup job.

  • raw_payloadanyRequired

    No description yet.

  • reviewed_leadobjectRequired

    No description yet.

    17 child fields
    • emailemailRequired

      No description yet.

    • first_namestringRequired

      May 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_namestringRequired

      No description yet.

      minimum length 1
    • routing_mechanismenumRequired

      No description yet.

      Allowed values
      • GEOGRAPHIC
      • COGNITIVE_LIQUIDITY
      • PSYCHOLOGICAL_AFFINITY
    • tenant_iduuidRequired

      No description yet.

    • assigned_rep_iduuid or nullOptional

      Optional representative assigned to the lead during creation.

    • company_namestring or nullOptional

      No description yet.

    • custom_fieldsanyOptional

      Tenant-defined field values, keyed by LeadCustomFieldDef.key. Rides the event AND projects to leads.custom_fields — same path as enrichment_snapshot, so a custom answer is as durable and as queryable as a platform one.

    • enrichment_snapshotanyOptional

      No description yet.

    • initial_activationobject or nullOptional

      Optional initial lifecycle activation (routing, sequence enrollment, cryosleep, or disqualification).

      6 child fields
      • pathenumRequired

        No 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 nullOptional

        No description yet.

        Allowed values
        • FUNDING_ROUND
        • EXECUTIVE_CHANGE
        • COMPETITOR_CONTRACT_EXPIRING
        • SEMANTIC_WEB_SIGNAL
        • INBOUND_ENQUIRY
      • disqualification_categoryenum or nullOptional

        No description yet.

        Allowed values
        • BUDGET
        • AUTHORITY
        • NEED
        • TIMING
        • OTHER
      • disqualification_reasonstring or nullOptional

        No description yet.

      • rep_iduuid or nullOptional

        No description yet.

      • sequence_iduuid or nullOptional

        No description yet.

    • initial_consentobject or nullOptional

      Optional initial consent grant recorded atomically with lead creation.

      4 child fields
      • channelsarray of enumRequired

        No description yet.

        Allowed values
        • EMAIL
        • SMS
        • PHONE
        • LINKEDIN
        • PROGRAMMATIC_AD
        • AI_OUTREACH
        • POSTAL
        minimum items 1
      • evidence_refstringRequired

        No description yet.

        minimum length 1
      • jurisdictionobjectRequired

        No description yet.

        2 child fields
        • countrystringRequired

          ISO 3166-1 alpha-2 ("US", "DE", "BD").

        • subRegionstringRequired

          Sub-region for split regimes ("US-CA", "DE-BY"). Empty = whole country.

      • expires_atdate-time or nullOptional

        No description yet.

    • lifecycle_stageenum or nullOptional

      Lifecycle 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 nullOptional

      No description yet.

    • scorenumber or nullOptional

      No description yet.

    • score_overrideanyOptional

      No description yet.

    • sourceenum or nullOptional

      Acquisition source (attribution). Optional — defaults to Direct for manual creation; the finder/import paths pass their own.

      Allowed values
      • Direct
      • Email Discovery
      • LinkedIn
      • Webinar
      • Referral
      • Google Ads
      • Meta Ads
      • LinkedIn Ads
      • Import
      • Web Form
      • Inbound Email
      Import
      Bulk intake (CSV / paste). Distinct from Direct on 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 nullOptional

      State 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
  • sourceenumRequired

    No 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_iduuidRequired

    No description yet.

  • source_connector_iduuid or nullOptional

    No 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.

  • successbooleanRequired

    true when the command was applied.

  • error_messagestringRequired

    Empty when the command was applied.

  • projected_stateobjectOptional

    The record as it stands after the command.

  • event_payloadobjectOptional

    The event the command recorded.

  • insightsarray of objectOptional

    Advisory notes about the result. Each has a code, a message and an impact number.

Errors

Every error carries an HTTP status. Where it also carries a code, branch on the code, not on the message.

  • 400X-CQRS-Action is missing or names a command this route does not accept. Send INGEST_CAPTURED_LEAD.
  • 400DOMAIN_ROUTINGThe body is not a valid command. Check the required fields and their types.
  • 401The access token is missing, expired or not valid.
  • 401L1_AUTHThe caller's role is below tenantadmin or the caller has no access to this record.
  • 403L1_POLICYA business rule refused the command. The message names the rule.
  • 409L1_IDEMPOTENCYA command with this idempotency key was already applied.
  • 409CONFLICTThe command would duplicate a record that must be unique.
  • 500L3_COMMITThe command was valid but could not be saved.
Generated from the API contract · revision 49d871e9cf4ff307