Skip to main content
Ping webhook
curl --request POST \
  --url https://customer-api.fortary.io/v1/webhooks/{webhookId}/ping
import requests

url = "https://customer-api.fortary.io/v1/webhooks/{webhookId}/ping"

response = requests.post(url)

print(response.text)
const options = {method: 'POST'};

fetch('https://customer-api.fortary.io/v1/webhooks/{webhookId}/ping', 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://customer-api.fortary.io/v1/webhooks/{webhookId}/ping",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);

$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://customer-api.fortary.io/v1/webhooks/{webhookId}/ping"

req, _ := http.NewRequest("POST", url, nil)

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://customer-api.fortary.io/v1/webhooks/{webhookId}/ping")
.asString();
require 'uri'
require 'net/http'

url = URI("https://customer-api.fortary.io/v1/webhooks/{webhookId}/ping")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)

response = http.request(request)
puts response.read_body
Pre-release — contact your Fortary account team for access.
Illustrative reference. These examples show the shape of the API and are provided for early evaluation while it is still being finalized. Field names and response details may change before the API is released. A complete reference, generated directly from the live API, will replace these examples once it is available.
Sends a synchronous, signed test POST to the webhook’s endpoint and returns the live outcome inline. Requires the webhook:manage scope. The ping uses the same signing and delivery rules as real deliveries, but it is not an event: nothing is recorded in the event log or delivery history. Pings work while the webhook is disabled — use one to verify a fixed endpoint before re-enabling — but not on a deleted webhook. Rate-limited to ~6 pings per minute per webhook.

Request

curl -X POST https://customer-api.fortary.io/v1/webhooks/whs_9b2f4e1a7c/ping \
  -H "Authorization: Bearer fort_..."

Response

{
  "result": "2xx",
  "httpStatus": 200,
  "latencyMs": 87,
  "bodySnippet": null,
  "retryAfterSeconds": null
}
  • result2xx, 3xx, 4xx, 5xx, timeout, conn_error, or ssrf_blocked (the URL resolved to a disallowed address).
  • httpStatus — the response status, or null when no response was received.
  • latencyMs — round-trip time of the attempt.
  • bodySnippet — up to 1 KB of your endpoint’s response body, or null.
  • retryAfterSeconds — parsed from your Retry-After header when present.
Errors follow the standard error envelope.