#does eleven labs retry post-conversation webhooks if the response fails?

1 messages · Page 1 of 1 (latest)

weak basinBOT
#
AI-generated Answer for flenshhh0524

No. Post-conversation (post-call) webhooks are delivered once and must return HTTP 200 to be considered successful; for HIPAA compliance, failed deliveries are not retried. Repeated failures can cause the webhook to be auto‑disabled after 10 consecutive failures if the last success was more than 7 days ago or never succeeded. (elevenlabs.io)

The general webhook documentation also notes that each webhook event is dispatched only once; if you miss an event, use the API to poll for product-specific data. (elevenlabs.io)

Sources:
Post-call webhooks | ElevenLabs Documentation
Webhooks | ElevenLabs Documentation

stone rampart
#

how can i get the key to verify incoming webhooks with HMAC in my backend?

weak basinBOT
#
AI-generated Answer for flenshhh0524

Short answer: you get it when you create the webhook.

Two ways:

  • Dashboard: Go to Administration -> Workspaces -> Webhooks, create a webhook with auth type HMAC, and copy the shared secret that’s generated at creation. Store it securely; you’ll use it to verify the ElevenLabs-Signature on incoming requests. (elevenlabs.io)
  • API: Create a workspace webhook via POST /v1/workspace/webhooks with auth_type=hmac. The response returns { "webhook_id": "...", "webhook_secret": "..." }. Persist webhook_secret on your side for HMAC verification. (elevenlabs.io)

Reference for using the secret to verify requests (or via the SDK’s construct_event helper) is in the Webhooks docs under Authentication. (elevenlabs.io)

Sources:
Webhooks | ElevenLabs Documentation
Create Workspace Webhook | ElevenLabs Documentation
Webhooks | ElevenLabs Documentation

stone rampart
#

what am i doing wrong when trying to verify the incoming webhook signature? Im getting this error: ElevenLabs signature verification failed: WebhooksClient.construct_event() got an unexpected keyword argument 'payload'

I think im following the docs though, this is my code:
async def verify_elevenlabs_signature(request: Request) -> dict:
"""Verify ElevenLabs post-call webhook HMAC signature and return parsed event data."""
body = await request.body()
signature = request.headers.get("elevenlabs-signature", "")

try:
    event = _elevenlabs_client.webhooks.construct_event(
        payload=body.decode("utf-8"),
        signature=signature,
        secret=settings.ELEVENLABS_WEBHOOK_SECRET,
    )
except Exception as e:
    logging.getLogger(__name__).error("ElevenLabs signature verification failed: %s", e)
    raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid webhook signature")

return event.data
weak basinBOT
#
AI-generated Answer for flenshhh0524

Your error means the Python SDK you have installed doesn’t accept keyword arguments for webhooks.construct_event. The current docs show a signature that accepts payload, signature, and secret; if your local SDK is older, passing them by keyword will raise “unexpected keyword argument 'payload'.”

Two ways to fix it:

  • Call with positional arguments (same three values, in order):
    event = _elevenlabs_client.webhooks.construct_event(body.decode("utf-8"), signature, settings.ELEVENLABS_WEBHOOK_SECRET)
  • Or update to a Python SDK version that matches the docs, which allow the keyword form shown below:
    event = elevenlabs.webhooks.construct_event(payload=payload.decode("utf-8"), signature=signature, secret=WEBHOOK_SECRET)

Reference implementation and required header/secret are in the official docs, which also note construct_event performs signature verification, timestamp validation, and payload parsing. Ensure you’re passing the raw request body decoded as UTF‑8 and the ElevenLabs-Signature header value, using the webhook’s shared secret from your settings. (elevenlabs.io)

Sources:
Webhooks | ElevenLabs Documentation

stone rampart
#

where can i find descriptions of what each field in the post-call webhook means?

weak basinBOT
#
AI-generated Answer for flenshhh0524
stone rampart
#

that only includes descriptions of top-level items. not nested fields

weak basinBOT
#
AI-generated Answer for flenshhh0524

You’re right—the Post‑call Webhooks page only documents the top‑level fields. For the nested fields, use these canonical docs:

  • post_call_transcription payload: Its data object uses the same schema as the GET Conversation response. Open “Response” and expand transcript (list of objects), metadata (object), analysis (object), and conversation_initiation_client_data (object) to see all nested fields. (elevenlabs.io)

  • Confirmation that post_call_transcription maps to the Conversation model: See “Conversation data using the ConversationHistoryCommonModel” and the note about aligning the webhook to the GET Conversation response. (elevenlabs.io)

  • conversation_initiation_client_data structure (field‑by‑field examples for overrides, dynamic_variables, custom_llm_extra_body, etc.): See Personalization (Conversation Initiation Client Data Structure). (elevenlabs.io)

  • call_initiation_failure nested metadata (provider‑specific SIP/Twilio fields): See the “Metadata object structure” section with SIP and Twilio subsections. (elevenlabs.io)

Optional: There’s also an example webhook payload showing many nested fields (deletion_settings, feedback, charging, conversation_turn_metrics), useful for orientation alongside the formal schema above. (elevenlabs.io)

Sources:
Get conversation details | ElevenLabs Documentation
Post-call webhooks | ElevenLabs Documentation
Personalization | ElevenLabs Documentation
Post-call webhooks | ElevenLabs Documentation
Webhooks | ElevenLabs Documentation

stone rampart
#

there's a file_input field in the transcript array. are file uploads supported for text conversations like whatsapp/text message?