curl --request POST \
--url https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"event_type": "balance.credited"
}
'import requests
url = "https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test"
payload = { "event_type": "balance.credited" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({event_type: 'balance.credited'})
};
fetch('https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test"
payload := strings.NewReader("{\n \"event_type\": \"balance.credited\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"attempt_count": 1,
"created_at": "2027-01-15T10:30:00Z",
"delivered_at": "2027-01-15T10:30:00Z",
"event_type": "balance.credited",
"id": "1c8d3e5f-2a47-4b96-8e03-d5f7a9b1c2e4",
"last_attempt_at": "2027-01-15T10:30:00Z",
"last_response_body": "{\"received\":true}",
"last_response_status": 200,
"max_attempts": 8,
"resend_seq": 0,
"updated_at": "2027-01-15T10:30:00Z",
"webhook_endpoint_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"webhook_event_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}Send a test webhook
Send one signed test delivery of an event type’s sample payload to an endpoint, once and without retries.
curl --request POST \
--url https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"event_type": "balance.credited"
}
'import requests
url = "https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test"
payload = { "event_type": "balance.credited" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({event_type: 'balance.credited'})
};
fetch('https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.scrip.dev/v1/webhook-endpoints/{webhook_endpoint_id}/test"
payload := strings.NewReader("{\n \"event_type\": \"balance.credited\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"attempt_count": 1,
"created_at": "2027-01-15T10:30:00Z",
"delivered_at": "2027-01-15T10:30:00Z",
"event_type": "balance.credited",
"id": "1c8d3e5f-2a47-4b96-8e03-d5f7a9b1c2e4",
"last_attempt_at": "2027-01-15T10:30:00Z",
"last_response_body": "{\"received\":true}",
"last_response_status": 200,
"max_attempts": 8,
"resend_seq": 0,
"updated_at": "2027-01-15T10:30:00Z",
"webhook_endpoint_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"webhook_event_id": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}event_type you choose. The delivery is signed with the endpoint’s secret like a real one and is marked "test": true. Scrip sends it once and does not retry it.
Use this call to check that your receiver is reachable and that your signature check works before real events arrive. The call returns 202 with the new delivery. A disabled or paused endpoint returns 409 with endpoint_not_active.
Authorizations
Send your API key as Authorization: Bearer <key>.
Headers
A key you choose to make this request safe to retry: 1 to 255 printable ASCII characters. Send the same key with the same request to get the first response again, marked Idempotent-Replayed: true. Routes that return a secret once, and claim links, do not replay a response. Event ingest uses the key as the event's identity.
255Path Parameters
The webhook endpoint's id.
Body
The event type to send
Sends a sample event to a webhook endpoint. Choose the event type with event_type.
The event type whose sample payload to send, for example balance.credited. List the types with GET /v1/webhook-event-types.
1"balance.credited"
Response
Test delivery accepted
One attempt to deliver a webhook event to an endpoint, with its status and response.
Number of delivery attempts made so far
1
When the delivery record was created
"2027-01-15T10:30:00Z"
When the delivery was successfully completed
"2027-01-15T10:30:00Z"
Stable, machine-readable classification of the last failed attempt, e.g. consumer_response_timeout, consumer_4xx, consumer_5xx, rate_limited, gone (omitted when none)
"consumer_response_timeout"
The event type (e.g. balance.credited)
"balance.credited"
The id of the delivery. Use it in delivery_id paths to retry or resend it.
"1c8d3e5f-2a47-4b96-8e03-d5f7a9b1c2e4"
When the last attempt was made
"2027-01-15T10:30:00Z"
Error message from the last attempt (network errors, timeouts)
"connection timed out after 10s"
Response body from the last attempt (truncated to 4 KB)
"{\"received\":true}"
HTTP status code from the last attempt
200
Maximum attempts before marking as FAILED
8
When Scrip will try the delivery next. Omitted once the delivery is DELIVERED or FAILED.
"2027-12-31T23:59:59Z"
Manual-resend sequence: 0 = the original delivery, 1,2,... = manual resends
0
Where the delivery is in its attempt lifecycle. PENDING deliveries wait for their next attempt. A PENDING delivery stays PENDING while its endpoint is disabled or paused, and resumes when the endpoint is active again. FAILED is final: attempts ran out, the receiver answered 410 Gone, or the endpoint was archived.
PENDING, SENDING, DELIVERED, FAILED "DELIVERED"
When the delivery record was last updated
"2027-01-15T10:30:00Z"
The endpoint this delivery targets
"f47ac10b-58cc-4372-a567-0e02b2c3d479"
The webhook event that triggered this delivery
"f47ac10b-58cc-4372-a567-0e02b2c3d479"