Replay a webhook delivery
curl --request POST \
--url https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"delivery": {
"id": 981,
"event_id": "evt_4471_booking.completed",
"event_type": "booking.completed",
"booking_ref": "JNK-8F3D21",
"status": "exhausted",
"attempt_count": 8,
"last_http_status": 503,
"last_error": "non-2xx response: 503",
"created_at": "2026-10-08T10:02:11Z",
"updated_at": "2026-10-08T11:20:40Z",
"delivered_at": null,
"exhausted_at": "2026-10-08T11:20:40Z",
"replay_count": 0,
"payload": {
"event": "booking.completed",
"event_id": "evt_4471_booking.completed",
"booking_ref": "JNK-8F3D21",
"status": "confirmed",
"occurred_at": "2026-10-08T10:02:11Z",
"livemode": true
}
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "Malformed JSON in request body.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "CONFLICT",
"message": "<string>",
"doc_url": "<string>"
},
"code": "delivery_in_progress"
}{
"error": {
"code": "GONE",
"message": "The resource no longer exists.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "A required field is missing or invalid.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The upstream service rejected the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The upstream service is temporarily unavailable. Please retry later.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The upstream service did not respond in time.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}Webhooks
webhooks replay
Replay a webhook delivery
POST
/
v1
/
webhooks
/
{id}
/
deliveries
/
{delivery_id}
/
replay
Replay a webhook delivery
curl --request POST \
--url https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gojinko.com/v1/webhooks/{id}/deliveries/{delivery_id}/replay")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"delivery": {
"id": 981,
"event_id": "evt_4471_booking.completed",
"event_type": "booking.completed",
"booking_ref": "JNK-8F3D21",
"status": "exhausted",
"attempt_count": 8,
"last_http_status": 503,
"last_error": "non-2xx response: 503",
"created_at": "2026-10-08T10:02:11Z",
"updated_at": "2026-10-08T11:20:40Z",
"delivered_at": null,
"exhausted_at": "2026-10-08T11:20:40Z",
"replay_count": 0,
"payload": {
"event": "booking.completed",
"event_id": "evt_4471_booking.completed",
"booking_ref": "JNK-8F3D21",
"status": "confirmed",
"occurred_at": "2026-10-08T10:02:11Z",
"livemode": true
}
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "Malformed JSON in request body.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "AUTH_REQUIRED",
"message": "Invalid or expired API key.",
"doc_url": "https://docs.gojinko.com/authentication/api-keys"
}
}{
"error": {
"code": "PAYMENT_REQUIRED",
"message": "Insufficient balance — this call costs $0.0150 and your organization has $0.0000 available. Top up at https://dashboard.gojinko.com/developers/billing/topup",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Resource not found.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "CONFLICT",
"message": "<string>",
"doc_url": "<string>"
},
"code": "delivery_in_progress"
}{
"error": {
"code": "GONE",
"message": "The resource no longer exists.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "BAD_REQUEST",
"message": "A required field is missing or invalid.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit or quota exceeded.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_REJECTED",
"message": "The upstream service rejected the request.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "The upstream service is temporarily unavailable. Please retry later.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}{
"error": {
"code": "UPSTREAM_TIMEOUT",
"message": "The upstream service did not respond in time.",
"doc_url": "https://docs.gojinko.com/concepts/errors"
}
}Replays a delivered or exhausted event delivery for a subscription you own. Sets its status to pending, resets attempt_count to 0, increments replay_count, and enqueues a fresh delivery of the same payload with a new signature timestamp. The replay keeps the same event_id, so your idempotency key still applies. Pending or failed deliveries are still being delivered or retried and cannot be replayed. Payloads are purged 30 days after the delivery’s last attempt or replay; a delivery whose payload was purged can no longer be replayed.
Authorizations
ApiKeyAuthBearerAuth
Response
Webhook delivery replay enqueued
One event delivery to a webhook subscription, including its attempts and replay count. payload is the exact envelope sent, or null after it is purged 30 days after the delivery's last attempt or replay.
Show child attributes
Show child attributes
Example:
{ "id": 981, "event_id": "evt_4471_booking.completed", "event_type": "booking.completed", "booking_ref": "JNK-8F3D21", "status": "exhausted", "attempt_count": 8, "last_http_status": 503, "last_error": "non-2xx response: 503", "created_at": "2026-10-08T10:02:11Z", "updated_at": "2026-10-08T11:20:40Z", "delivered_at": null, "exhausted_at": "2026-10-08T11:20:40Z", "replay_count": 0, "payload": { "event": "booking.completed", "event_id": "evt_4471_booking.completed", "booking_ref": "JNK-8F3D21", "status": "confirmed", "occurred_at": "2026-10-08T10:02:11Z", "livemode": true } }
