Video view webhook
Video watch progress webhooks are separate from render / template finished webhooks you may configure elsewhere on your account. Only the URL you save with the endpoints below receives view-milestone events.
Requirements
On each request you need to provide your Bearer authentication token. See the Authentication section for more details.
| Authorization | Bearer Token |
|---|---|
| Token | <token> |
POST /createVideoViewWebhookSubscription
https://api.repliq.co/v2/createVideoViewWebhookSubscriptionMandatory parameters
This endpoint requires the following parameters:
| Parameters | Type | Description |
|---|---|---|
| hookUrl | string | A valid https URL. Only one video-view URL is stored per account; a new value replaces the previous one. |
Response parameters
If the response status code is 200, the body includes:
| Parameters | Type | Description |
|---|---|---|
| message | string | Status message |
| hookUrl | string | The saved URL |
| id | string | Automation id when the host is Zapier, Make, or Pabbly; otherwise null |
DELETE /deleteVideoViewWebhookSubscription
https://api.repliq.co/v2/deleteVideoViewWebhookSubscriptionSend DELETE to the URL in the code block above with the same Authorization header. No request body is required; the saved video-view webhook URL is cleared.
Response parameters
If the response status code is 200, the body includes:
| Parameters | Type | Description |
|---|---|---|
| message | string | Confirmation that the video view webhook was removed |
HTTP errors (subscription endpoints)
| Status | Meaning |
|---|---|
| 400 | Invalid input (e.g. validation) or token issue |
| 403 | Not allowed on the free tier (paid plans only, same idea as API access) |
| 404 | User account not found |
| 500 | Server error |
When your webhook URL is called
When a lead watches a personalized video page, RepliQ sends HTTPS POST requests to your saved hookUrl with Content-Type: application/json. Each request is sent once per milestone per viewer session (same browser session), when that milestone is crossed for the first time.
| videoWatchPercentage | When it fires |
|---|---|
| started | First time watch progress goes from 0 to greater than 0 (playback started). |
| 25 | First time the viewer reaches at least 25% of the video. |
| 50 | First time the viewer reaches at least 50% of the video. |
| 75 | First time the viewer reaches at least 75% of the video. |
| 100 | First time the viewer reaches at least 100% of the video (completed). |
So you can receive up to five POSTs for the same viewing session—one for started, then one each when 25%, 50%, 75%, and 100% are crossed for the first time.
Reliability and idempotency
- A down, slow, or error-returning receiver does not affect other RepliQ services; each delivery is isolated.
- A milestone is only treated as delivered after your endpoint returns 2xx. Non-2xx responses and network failures mean the same milestone may be attempted again on a later update.
- In rare cases the same milestone could be delivered more than once. Treat your handler as idempotent (safe to run twice for the same
videoWatchPercentage+ session), for example by deduplicating on(lead.videoUrl, videoWatchPercentage, occurredAt)or your own idempotency key.
Webhook body (JSON)
Example payload your endpoint receives:
{
"videoWatchPercentage": "25",
"occurredAt": "2026-03-22T06:08:03.673Z",
"campaignName": "Spring outreach",
"lead": {
"videoUrl": "https://watch.example.com/videos/abc123",
"leadWebsiteUrl": "https://prospect.example.com",
"leadEmail": "jane.doe@example.com",
"leadFirstName": "Jane",
"leadLastName": "Doe",
"jobTitle": "Marketing Director",
"companyName": "Example Corp",
"videoType": "website",
"previewImgOrGifUrl": "https://cdn.example.com/previews/abc123_preview.gif"
}
}Automation tools (e.g. n8n, Zapier): The HTTP body is the JSON object above. Some UIs nest it under a property such as body—map fields from that object in your workflow.
| Parameters | Type | Description |
|---|---|---|
| videoWatchPercentage | string | Milestone: started, 25, 50, 75, or 100. |
| occurredAt | string | ISO-8601 timestamp when the event was recorded. |
| campaignName | string | Name of the campaign (scrapping) this video page belongs to. |
| lead | object | Lead and page context (see below). |
Inside the lead object you will receive:
| Parameters | Type | Description |
|---|---|---|
| videoUrl | string | Link to the personalized watch page. |
| leadWebsiteUrl | string | Prospect website URL used for the video. |
| leadEmail | string | Email when available; may be empty or a placeholder such as NoEmail. |
| leadFirstName | string | |
| leadLastName | string | |
| jobTitle | string | |
| companyName | string | |
| videoType | string | Type of video (e.g. website). |
| previewImgOrGifUrl | string | Preview image or GIF URL for the video. |