Webhook
Documentation for the webhook integration mechanism with supported platforms.
Currently supported:
- Zapier
- Make
Authentication
All incoming webhook requests must include the x-screenreply-token header with your backend token.
To obtain your token, navigate to the ScreenReply dashboard, find the specific integration card (e.g. Zapier), and click the Setup button.
x-screenreply-token: YOUR_BACKEND_TOKENEndpoint
All actions are sent via a single POST endpoint. The endpoint URL always remains the same; however, the JSON payload structure changes depending on the specific operation being executed (determined by the action field).
https://api.screenreply.com/public/webhooks/{provider}Path Parameters
| Parameter | Type | Description |
|---|---|---|
| provider* | String | Replace {provider} with the uppercase name of the supported integration (e.g., ZAPIER). |
Common Error Responses
The following errors can occur with any action. Each error returns a JSON body with a message field describing the issue.
| Status | Condition | Response Body |
|---|---|---|
| 400 | Provider not found in the URL path (e.g. ZAPIER vs ZAPIER2). | {"message": "Bad request"} |
| 400 | Request body is malformed or missing the action field. | {"message": "Bad request"} |
| 403 | The x-screenreply-token value does not match the stored backend token. | {"message": "Forbidden"} |
| 424 | No active integration found. The token is missing, expired, or the integration was disconnected. | {"message": "Integration error"} |
1. Ping (Check Auth)
Verify that your integration is properly configured and authenticated.
Request Body (application/json)
| Field | Type | Description |
|---|---|---|
| action* | String | Must be "PING". |
Example Request
curl -X POST https://api.screenreply.com/public/webhooks/ZAPIER -H "x-screenreply-token: YOUR_BACKEND_TOKEN" -H "Content-Type: application/json" -d '{
"action": "PING"
}'Response 200 OK
| Field | Type | Description |
|---|---|---|
| status | String | Returns "success" if the credentials and workspace are valid. |
| workspace | String | Returns the name of the workspace. |
{
"status": "success",
"workspace": "KinetiSend Inc"
}Error Responses
| Status | Condition | Response Body |
|---|---|---|
| 400 | The integration was disconnected or no longer exists. | {"message": "Bad request"} |
2. Create Recording Action
Request a new screen recording. The response contains a shareable link to send to the recording participant.
Request Body (application/json)
| Field | Type | Description |
|---|---|---|
| action* | String | Must be "RECORDING". |
| recording* | Object | A wrapper object containing recording parameters. |
| recording.tags | Array of Strings | Optional. A list of string labels to attach to the video (e.g. ["bug", "ui"]). |
| recording.externalReference* | String | Required. The unique identifier from your system (e.g., an executionId, taskId, or ticketId) to associate with this recording. |
Example Request
curl -X POST https://api.screenreply.com/public/webhooks/ZAPIER -H "x-screenreply-token: YOUR_BACKEND_TOKEN" -H "Content-Type: application/json" -d '{
"action": "RECORDING",
"recording": {
"tags": ["bug", "ui"],
"externalReference": "ext-123"
}
}'Response 200 OK
| Field | Type | Description |
|---|---|---|
| url | String | The fully qualified URL of the created recording page. |
{
"url": "https://rec.screenreply.com/r/3fa85f64-5717-4562-b3fc-2c963f66afa6"
}Error Responses
These errors return 200 OK with an error field in the body.
| Status | Condition | Response Body |
|---|---|---|
| 200 | Workspace subscription is expired or canceled. | {"error": "No active subscription."} |
| 200 | Integration token is invalid or the integration was disconnected. | {"error": "Integration not connected."} |
| 200 | Unexpected server error. | {"error": "Internal Server Error"} |
3. Subscribe to Video Ready Events (REST Hook)
Register a callback URL to receive a POST request when a recording is ready. ScreenReply will send the video link to the exact URL you provide.
Request Body (application/json)
| Field | Type | Description |
|---|---|---|
| action* | String | Must be "CALLBACK_SUBSCRIBE". |
| callback* | String | The fully qualified HTTPS URL of your application's endpoint that will receive the video links. |
Example Request
curl -X POST https://api.screenreply.com/public/webhooks/ZAPIER -H "x-screenreply-token: YOUR_BACKEND_TOKEN" -H "Content-Type: application/json" -d '{
"action": "CALLBACK_SUBSCRIBE",
"callback": "https://your-app.com/webhook"
}'Response 200 OK
| Field | Type | Description |
|---|---|---|
| subscriptionId | String (UUID) | A UUID generated by ScreenReply that uniquely identifies this webhook subscription. Save this ID to unsubscribe later. |
{
"subscriptionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}Error Responses
These errors return 200 OK with an error field in the body.
| Status | Condition | Response Body |
|---|---|---|
| 200 | Workspace subscription is expired or canceled. | {"error": "No active subscription."} |
| 200 | Unexpected server error (e.g., integration was disconnected). | {"error": "Internal Server Error"} |
4. Unsubscribe from Events
Remove a previously registered callback subscription using its ID.
Request Body (application/json)
| Field | Type | Description |
|---|---|---|
| action* | String | Must be "CALLBACK_UNSUBSCRIBE". |
| subscriptionId* | String (UUID) | The UUID of the subscription you wish to remove. |
Example Request
curl -X POST https://api.screenreply.com/public/webhooks/ZAPIER -H "x-screenreply-token: YOUR_BACKEND_TOKEN" -H "Content-Type: application/json" -d '{
"action": "CALLBACK_UNSUBSCRIBE",
"subscriptionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}'Response 200 OK
| Field | Type | Description |
|---|---|---|
| status | String | Returns "success" when the subscription is deleted. |
{
"status": "success"
}Error Responses
These errors return 200 OK with an error field in the body.
| Status | Condition | Response Body |
|---|---|---|
| 200 | Invalid subscriptionId or unexpected server error. | {"error": "Internal Server Error"} |
Outgoing Notification (ScreenReply → Your App)
When a recording is finished, ScreenReply will send a POST request containing the video link to the exact callback URL that was registered during the CALLBACK_SUBSCRIBE step.
Payload Schema
| Field | Type | Description |
|---|---|---|
| result | String | The raw, fully qualified HTTPS link to the video. |
{
"result": "https://app.screenreply.com/r/3fa85f64-5717-4562-b3fc-2c963f66afa6"
}