Hooman Labs DocsGuideReference

Post Call Actions

This endpoint is used to send call related data, such as call details, recordings, and analysis to a predefined endpoint. It’s typically used to:

  1. Push information into your CRM or internal database.

  2. Trigger downstream actions, such as sending a follow-up message, email, or call summary with next steps.

This allows seamless integration of call events into your existing workflows.

Configure

  1. Navigate: Agents → Select Agent → Edit → Post Call API.

  2. Toggle to enabled.

  3. Fill out the form and publish.

The Pre‑Call and Post‑Call APIs share UI and request settings. What differs is direction: Pre‑Call pulls data in, Post‑Call pushes data out.

Field

What it does

Tips

Method

HTTP verb used to call your endpoint.

GET, POST, or PUT.

URL

Full endpoint (e.g. https://api.example.com/hook).

Add query‑string params here: ...?id=${callInfo.callSid}.

Timeout

Max wait in ms before we give up (default 15000 = 15 s).

Increase for slow servers; decrease to fail fast.

Headers (optional)

JSON object of HTTP headers.

Must include "content-type": "application/json". Add auth tokens etc.

Body (POST / PUT only)

Raw JSON payload your endpoint expects.

Use variable placeholders (${variable}) anywhere inside.

Body is optional and if not defined, we will send the entire default post-call object (see Available Information) as the request body.

We do not retry failed API calls so handle idempotency/replay your side if needed.

Available information

Every call finishes with the object below. Any property can be referenced in URL, headers, or body.
• Wrap variable names with ${ }. Use dot . notation for nested values.
• We stringify values by default. Omit quotes for numbers/booleans.

"duration": ${duration}

Variable

Description

${analysis.results.keyName}

Call summary, structured data, transfer department and reason, input params of tool calls

${callInfo.keyName}

Call details: from and to number, type (inbound or outbound), recording, callSid, campaignId, taskId, attempt, endReason.

${context.keyName}

All the context variables passed in task or per-call API and system defaults

${stats.keyName}

Performance stats of the call: latency, interruption, turns, etc.

${outcome}

Final outcome of the call (combined output of system defined and LLM defined)

${agent}

Agent Id

${duration}

Agent talk time in secs

${beginTimestamp}

Call start timestamp is milliseconds

${transcript}

Transcript of the conversation

{
  "analysis": {
    "results": {
      "summary": "...",
      "...": "custom structured data"
    }
  },
  "callInfo": {
    "from": "+15551234567",
    "to": "+15557654321",
    "type": "inbound",
    "recording": "https://...",
    "callSid": "CA123...",
    "endReason": "...",
    "task": "...",          // outbound only
    "campaign": "...",      // outbound only
    "attempt": 1,           // outbound only
    "provider": "twilio"
  },
  "outcome": "qualified_lead",
  "agent": "agent_id",
  "duration": 42,            // seconds
  "price": 0.25,             // INR
  "beginTimestamp": 1722576050000,
  "context": {
    "...": "all keys you passed in task or pre call API when starting the call"
  },
  "stats": {
    "cache": {},
    "interruptions": {},
    "latency": {},
    "turns": 20
  },
  "transcript":[
  {
    "role": "user",
    "content": "message from user",
    "timestamp": 1722576050000
  }...
  ]
}

Example body

{
  "caller": "${callInfo.from}",
  "callee": "${callInfo.to}",
  "callType": "${callInfo.type}",
  "summary": "${analysis.results.summary}",
  "duration": ${duration},
  "price": ${price},
  "recordingUrl": "${callInfo.recording}",
  "leadId": "${context.leadId}"
  "disposition": "${outcome}"
}