List webhook examples

GET/v1/webhooks/examples
Scope: campaigns:read

Three example prospect_response deliveries: an email reply, a LinkedIn reply, and a reply on a campaign with both senders connected. Use them to build and test a receiver before pointing a live campaign at it.

Headers

  • AuthorizationstringRequired

    Bearer followed by a space and your API key, for example Bearer vk_….

Response

200

  • examplesarray of objectsRequired

    Array of example webhook payloads

    Show 12 child attributes
    • 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"
  • successboolean
    Default true

Errors

Errors share one JSON body: success, error, message, optional details, and request_id.

StatusCodeMeaning
401UNAUTHORIZED

The Authorization header is missing or malformed, or the API key is unknown or has been deactivated.

401API_KEY_EXPIRED

The API key is past its expiry date. Create a new key in the Victoria AI app.

403INSUFFICIENT_SCOPE

The API key doesn't have the scope this endpoint requires, such as leads:write.

403ORGANIZATION_DEACTIVATED

The organization that owns this API key has been deactivated.

429RATE_LIMITED

Too many requests for this API key: more than 100 a minute to one endpoint, or 600 a minute in total. Retry after the number of seconds in the Retry-After header. See Rate limits.

500INTERNAL_ERROR

Something failed on our side. The response never includes internal details; quote its request_id when you contact support.

503UPSTREAM_TIMEOUT

A service the API depends on timed out. The request is safe to retry.

503AUTH_UNAVAILABLE

The API key couldn't be checked because the authentication service was unavailable. The request is safe to retry.

Response headers

HeaderDescription
X-Request-ID

Correlation ID for the request, also returned as request_id in error bodies. Send your own X-Request-ID, up to 128 letters, digits, ., _, : or -, and it's used instead.

RateLimit-Limit

Requests allowed to this endpoint per minute.

RateLimit-Remaining

Requests you can still send to this endpoint right now.

RateLimit-Reset

Seconds until the endpoint's full limit is available again.

Retry-After

On a 429: seconds to wait before retrying.