> For the complete documentation index, see [llms.txt](https://docs.praiz.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.praiz.io/integrations/webhooks.md).

# Webhooks

Receive transcripts and agent outputs automatically in your own tool through webhooks.

A webhook sends a call's data to the address of your choice as soon as it is ready. Use it to feed a tool Praiz does not integrate with, or an automation (Make, Zapier, n8n).

## Before you start

* Be a Praiz admin.
* A URL that can receive HTTP requests: a Make or Zapier scenario, an n8n workflow, your own server.

Praiz does not expose a public API. Webhooks and the [MCP server](/query-and-analyze/mcp-server.md) are the two ways to access the data.

## Create a webhook

1. Open "Settings", "Webhooks" tab.
2. In "Webhook URL", paste the address that will receive the data.
3. Choose the "Webhook type": "Agent" or "Transcript".
4. Click "Add webhook".

What to expect: the webhook appears in the list with its type and a token. Click "Show" to display the full token. Click "Delete" to remove the webhook.

![Webhooks tab in Settings](https://3785996597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtOw7B6Sc94pXU8vLJs0a%2Fuploads%2FgS7e4ftrMDPH7JTJhbBJ%2Fen-06-settings-webhooks.png?alt=media)

## The two webhook types

| Type         | What is sent                                                           | When                             |
| ------------ | ---------------------------------------------------------------------- | -------------------------------- |
| "Agent"      | The fields your agents extracted on the call, with the call's metadata | When the agents have finished    |
| "Transcript" | The raw transcript and the call's metadata                             | When the transcript is available |

To send structured data to another tool, choose the "Agent" type. This type requires configured agents. An "Agent" webhook can be limited to certain agents: only the outputs of those agents then trigger the request.

## Check where requests come from

Every request Praiz sends carries the HTTP header `Authorization: Bearer <token>`. The token is generated once, when the webhook is created, and shown in the list ("Show"). To check that a request really comes from Praiz, compare the token received in the header with the one shown in the interface. The request body is not signed.

{% hint style="info" %}
Special case: if your URL already contains a `sig=` parameter (Power Automate, Logic Apps), Praiz does not send the `Authorization` header, to avoid an authentication conflict.
{% endhint %}

## What Praiz sends

Every request contains a request identifier (`request_id`, different for each request), the date, and a `video` object: id, title, duration, user email, source, transcript link, call link, creation date, and the list of participants with their CRM identifiers if any. The "Agent" type adds a `template` object with the extracted fields.

Example of an "Agent" request:

```json
{
  "request_id": "3f2a9e6b-1c4d-4a8e-9b2f-7d5c6a1e4f90",
  "datetime": "2026-09-14 10:32:05",
  "company_id": 481,
  "video": {
    "id": 128934,
    "title": "Discovery call - Acme Corp",
    "duration": 1823,
    "user_email": "rep@example-customer.com",
    "source": "upload",
    "transcript_url": "https://cdn.praiz.example/.../128934/clean_transcript.txt",
    "url": "https://app.praiz.io/watch/128934",
    "created_date": "2026-09-14 10:05:12",
    "participants": [
      {
        "first_name": "Jean",
        "last_name": "Dupont",
        "email": "jean.dupont@acme-corp.com",
        "phone_number": "33612345678",
        "crm": "hubspot",
        "crm_contact_id": "51234567890",
        "crm_company_id": "98765432100",
        "crm_company": "Acme Corp",
        "crm_opportunity_id": "22334455",
        "crm_opportunity": "Acme Corp - 2026 renewal",
        "crm_lead_id": ""
      }
    ]
  },
  "template": {
    "name": "Discovery qualification",
    "fields": [
      { "name": "Estimated budget", "description": "Annual budget mentioned", "type": "text", "extracted_value": "50,000 - 80,000 €" },
      { "name": "Decision maker identified", "description": "Is the prospect the decision maker?", "type": "boolean", "extracted_value": true },
      { "name": "Needs expressed", "description": "Needs mentioned during the call", "type": "bullet_points", "extracted_value": ["Automate reporting", "Reduce CRM data entry"] }
    ]
  }
}
```

Good to know about this format:

* `extracted_value` is a string, a list (multi-option or bullet-point fields) or a boolean, depending on the field's format.
* A field with no extracted value does not appear in the request.
* A participant's `crm_*` fields are empty when the participant is not found in the CRM.
* A "Transcript" request contains the same `video` object, without the `template` object.

The request arrives a few seconds to a few minutes after the end of the call.

## Test a webhook

Create a webhook to a test address (for example webhook.site). Record a short call, then read the request received.

## Troubleshooting

* No request arrives: check the URL in the webhook list and test it with a test address.
* The "Agent" webhook sends nothing: no agent applied to the call, or the webhook is limited to agents that did not apply. Check your agents' [automation rules](/ai-agents/using-an-agent.md).
* The request arrives without the expected fields: the webhook type is "Transcript". Create an "Agent" webhook.

## Related pages

* [MCP server](/query-and-analyze/mcp-server.md) to query your data from an AI tool instead of receiving it
* [Connect your CRM](/integrations/connect-your-crm.md)
* [Using an agent](/ai-agents/using-an-agent.md)
