prospect_response

Sent to a campaign's webhooks when a prospect replies.

Victoria AI sends this event as an HTTP POST with a JSON body when a prospect replies to a campaign. It goes to every enabled webhook on that campaign at the same time. Register one with Create a webhook.

Delivery

  • Your endpoint has 75 seconds to respond. An error status or a timeout counts as a failure.
  • If every webhook on the campaign fails, the delivery is retried every 15 minutes, up to 5 attempts within 48 hours.
  • A reply is normally delivered once per lead. If a later reply from the same lead is positive after an earlier one wasn't, it's delivered again with a new idempotency_key, because the message is part of the key.
  • Retries of the same delivery carry the same idempotency_key. Record the keys you've processed and skip repeats.

Signatures

When the webhook has a signing secret, each delivery carries X-Signature-256: sha256=<hex>: an HMAC-SHA256 of the raw request body, keyed with the secret. Recompute it over the exact bytes you received, before parsing the JSON. Set or rotate the secret with Set or rotate a webhook secret.

Request headers

HeaderDescription
Content-Type

application/json

X-Signature-256

sha256= followed by the hex HMAC-SHA256 of the raw body, keyed with the webhook's secret. Only sent when the webhook has a secret.

Payload

  • eventstringRequired

    Event type

    Example "prospect_response"
  • idempotency_keystringRequired

    SHA-256 hex digest (64 characters) of the sequence lead, campaign, channel and prospect message. Identical on every redelivery of the same reply; a different reply from the same prospect gets a new key

    exactly 64 charactersExample "f3a1c9d2b8e7460a91d0a25f3e7b4c1d6f8a92e0b4c1d6f8a92e0b4c1d6f8a92"
  • sequence_lead_idstring · uuidRequired

    ID of the sequence lead this response relates to

    Example "550e8400-e29b-41d4-a716-446655440000"
  • timestampstringRequired

    When the delivery was built: ISO 8601, UTC, with a +00:00 offset and microseconds

    Example "2025-01-14T19:30:00.123456+00:00"
  • channelstringRequired

    Communication channel: 'email' or 'linkedin'

    Example "email"
  • senderobjectRequired

    The accounts assigned to send to this lead, keyed by channel. A channel is left out when no account is assigned, and the object is empty when the accounts can't be looked up.

    Show 2 child attributes
    • emailobject or null

      Present when the lead has an email account assigned

      Show 3 child attributes
      • account_idstringRequired

        ID of the connected email account that sent the outreach.

        Example "xyz789-id"
      • platform_usernamestringRequired

        Account username (typically the address)

        Example "jane@yourcompany.com"
      • emailstringRequired

        Sender email address

        Example "jane@yourcompany.com"
    • linkedinobject or null

      Present when the lead has a LinkedIn account assigned

      Show 2 child attributes
      • account_idstringRequired

        ID of the connected LinkedIn account that sent the outreach.

        Example "abc123-id"
      • platform_usernamestringRequired

        LinkedIn username/handle

        Example "jane-smith-sdr"
  • leadobjectRequired

    The lead's details. A field the lead has no value for is null.

    Show 11 child attributes
    • annual_revenueinteger or null
      Example 5000000
    • companystring or null
      Example "Example Corp"
    • custom_fieldsobject
    • emailstring or null
      Example "john.doe@example.com"
    • employee_countinteger or null
      Example 50
    • first_namestring or null
      Example "John"
    • industrystring or null
      Example "Technology"
    • last_namestring or null
      Example "Doe"
    • linkedin_profilestring or null

      The lead's LinkedIn profile URL

      Example "https://linkedin.com/in/johndoe"
    • titlestring or null
      Example "VP of Sales"
    • websitestring or null

      The lead's company website

      Example "https://example.com"
  • ai_responseobjectRequired

    The AI Appointment Setter's analysis of the reply. When the reply wasn't analyzed, every field except goal is null, and goal gives the reason.

    Show 14 child attributes
    • agent_actionstring or null

      What the agent did with the reply: 'reply', 'wait', 'nudge', 'escalate', 'close' or 'skip'

      Example "reply"
    • agent_versioninteger or null

      Present (as 2) when the Appointment Setter agent handled the reply; absent on legacy payloads. Feature-detect on this field

      Example 2
    • asset_deliveredboolean or null

      Asset-first campaigns only: whether the page went out

      Example true
    • asset_urlstring or null

      Asset-first campaigns only: the personalised page that was sent

      Example "https://pages.example.com/p/abc123"
    • completeboolean or null

      true when the conversation has ended or should end, whether or not its goal was reached. When agent_version is 2, it's true exactly when conversation_status is one of the closed_ values.

      Example false
    • conversation_statusstring or null

      The conversation's state after this reply. awaiting_prospect: waiting for the prospect. needs_human: the AI Appointment Setter handed the conversation to your team. human_owned: someone on your team has taken it over. closed_won, closed_lost, closed_no_response or closed_escalated: the conversation has ended. A lead still on the older follow-up flow can show awaiting_followup. Handle values you don't recognize without failing.

      Example "awaiting_prospect"
    • escalation_reasonstring or null

      Why the agent handed the conversation to a human, when it did

    • first_message_modestring or null

      Asset-first campaigns only: how the first message was sent

      Example "asset"
    • goalstring or null

      The campaign goal the responder is working toward, or the skip reason

      Example "Schedule a demo"
    • goal_statusstring or null

      Progress toward the meeting goal: 'not_sent', 'link_sent', 'soft_commit', 'confirmed' or 'declined'

      Example "link_sent"
    • out_of_officeboolean or null
      Example false
    • responder_messagestring or null

      The reply the responder sent, or null when nothing was sent

      Example "Thank you for your interest! I'd be happy to schedule a demo for you."
    • sdr_briefstring or null
      Example "Prospect expressed interest, recommend scheduling demo within 24 hours."
    • sentimentstring or null

      'positive', 'neutral' or 'negative'

      Example "positive"
  • campaignstring or null

    The campaign's name. The payload doesn't include the campaign's ID.

    Example "Q1 2024 Outbound Campaign"
  • conversation_ownerstring or null

    Present only when the conversation has an owner: 'victoria' when Victoria's responder is handling replies, 'lp_responder' when an external responder is. Receivers that reply to prospects themselves should stay out of conversations Victoria owns

    Example "victoria"
  • prospect_messagestring or null

    The prospect's reply, as received

    Example "Hi, I'm interested in learning more about your product."
  • variationstring or null

    A/B arm the lead is in: 'a', 'b', or null when the lead has none

    Example "a"