Webhooks
Receive real-time notifications when recordings are processed
Pocket sends webhook notifications to your endpoint when recording events occur. Use webhooks to trigger automations in tools like n8n, Zapier, and Make, or in your own backend.
Supported Events
Processing Events
| Event | Fired When |
|---|---|
transcription.completed | Transcript generation is complete |
summary.completed | Full post-processing is complete (summary, actions, tags, and related outputs) |
summary.regenerated | Full summary package is regenerated |
summary.updated | Summary text is regenerated |
mind_map.completed | Mind map generation is complete |
action_items.regenerated | Action items are regenerated |
tags.generated | AI tags are generated and saved |
speakers.labeled | Speaker labels are resolved in the transcript |
User Actions
| Event | Fired When |
|---|---|
transcript.edited | A user edits transcript text or speaker labels |
action_items.updated | A user edits or completes an action item |
recording.created | A recording is created or uploaded |
recording.deleted | A recording is deleted |
recording.merged | Two or more recordings are merged |
translation.completed | Transcript translation is complete |
Setup
Configure webhook destinations in the Pocket app integrations UI.
Delivery
| Setting | Value |
|---|---|
| HTTP method | POST |
| Content-Type | application/json |
| User-Agent | HeyPocket-Webhook/1.0 |
| Timeout | 30 seconds |
| Retries | 3 attempts (exponential backoff 1sā30s) |
| Delivery guarantee | At-least-once |
Payload Structure
{
"event": "summary.completed",
"timestamp": "2026-02-18T12:00:00.000Z",
"recording": {
"id": "rec_abc123",
"title": "Team Standup",
"description": "Weekly sync",
"duration": 1800,
"language": "English",
"createdAt": "2026-02-18T11:30:00.000Z"
},
"summarizations": {
"sum_456": {
"id": "row_789",
"summarizationId": "sum_456",
"processingStatus": "completed",
"v2": {
"summary": {
"title": "Team Standup",
"emoji": "š",
"markdown": "## Key Decisions\n\n...",
"bulletPoints": ["Ship v2 by Friday", "Review design docs"]
},
"actionItems": {
"version": "3",
"actionItems": [
{
"id": "subtask_1",
"parentTaskId": "task_1",
"title": "Ship v2 by Friday",
"dueDate": "2026-02-20",
"status": "TODO",
"globalActionItemId": "gai_001",
"isCompleted": false,
"is_completed": false
}
]
},
"mindMap": { "nodes": [], "edges": [] },
"speakerMindMap": null,
"clusterMindMap": null,
"contextMindMap": null,
"flowMindMap": null
},
"settings": {
"modelId": "gpt5",
"themeId": "auto_detect",
"language": "English"
},
"autoInitiated": true,
"createdAt": "2026-02-18T12:00:00.000Z",
"updatedAt": "2026-02-18T12:00:05.000Z"
}
},
"transcript": [
{
"speaker": "Alice",
"text": "Let's go over this week's priorities.",
"start": 0.0,
"end": 3.5
}
]
}Signature Verification
If you configure a webhook secret, each delivery includes HMAC-SHA256 signature headers:
| Header | Description |
|---|---|
X-HeyPocket-Signature | HMAC-SHA256 of {timestamp}.{payload} using your secret |
X-HeyPocket-Timestamp | Unix timestamp (ms) of the delivery |
Verify each request by computing HMAC-SHA256(secret, "{timestamp}.{body}") and comparing it to X-HeyPocket-Signature.
const crypto = require('crypto');
function verifySignature(secret, timestamp, body, signature) {
const expected = crypto
.createHmac('sha256', secret)
.update(`${timestamp}.${body}`)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}When Webhooks Fire
Webhooks fire for processing completion events and user-driven updates (recordings, transcripts, action items, and translations).
