curl --request GET \
--url https://www.closient.com/integrations/api/v1/webhooks/event-types/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/integrations/api/v1/webhooks/event-types/"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/integrations/api/v1/webhooks/event-types/', 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://www.closient.com/integrations/api/v1/webhooks/event-types/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://www.closient.com/integrations/api/v1/webhooks/event-types/"
req, _ := http.NewRequest("GET", 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.get("https://www.closient.com/integrations/api/v1/webhooks/event-types/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/integrations/api/v1/webhooks/event-types/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"current_envelope_version": "2026-07-01",
"envelope_versions": [
"v1",
"2026-07-01"
],
"events": [
{
"description": "A recall affecting one of your products was opened.",
"domain": "recall",
"event_type": "recall.opened",
"since": "2026-07-01",
"status": "live"
},
{
"description": "Superseded by the recall.* lifecycle.",
"domain": "catalog",
"event_type": "product.recalled",
"since": "v1",
"status": "deprecated",
"superseded_by": "recall.opened"
}
],
"planned": [
{
"event_type": "epcis.event_captured",
"tracking_issue": "C-4352"
}
]
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}List subscribable event types
The full event catalog: every event type you may put in an endpoint’s event_types, what each one means, which envelope version introduced it, and which envelope versions exist. Subscribing to a value not listed here returns 422 rather than being silently accepted — so a typo costs you an error, never a subscription that quietly never fires.
planned lists event types on the roadmap. They are not subscribable yet and are published only so you can see what is coming; each names the issue that will wire it.
curl --request GET \
--url https://www.closient.com/integrations/api/v1/webhooks/event-types/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/integrations/api/v1/webhooks/event-types/"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/integrations/api/v1/webhooks/event-types/', 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://www.closient.com/integrations/api/v1/webhooks/event-types/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://www.closient.com/integrations/api/v1/webhooks/event-types/"
req, _ := http.NewRequest("GET", 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.get("https://www.closient.com/integrations/api/v1/webhooks/event-types/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/integrations/api/v1/webhooks/event-types/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"current_envelope_version": "2026-07-01",
"envelope_versions": [
"v1",
"2026-07-01"
],
"events": [
{
"description": "A recall affecting one of your products was opened.",
"domain": "recall",
"event_type": "recall.opened",
"since": "2026-07-01",
"status": "live"
},
{
"description": "Superseded by the recall.* lifecycle.",
"domain": "catalog",
"event_type": "product.recalled",
"since": "v1",
"status": "deprecated",
"superseded_by": "recall.opened"
}
],
"planned": [
{
"event_type": "epcis.event_captured",
"tracking_issue": "C-4352"
}
]
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}{
"type": "https://closient.com/docs/errors/not_found",
"title": "Not Found",
"status": 404,
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"timestamp": "2026-03-31T12:00:00+00:00"
}Authorizations
Response
OK
Full catalog response for GET /webhooks/event-types/.
Every envelope version an endpoint may be pinned to via api_version.
Payload-envelope versions an endpoint can be pinned to (C-4296).
Mirrors :class:apps.integrations.webhooks.catalog.EnvelopeVersion.
v1 is the pre-catalog envelope, retained permanently because every
endpoint created before C-4296 is pinned to it. 2026-07-01 is the
current shape; versions are dated from here on.
v1, 2026-07-01 Version newly-created endpoints are pinned to. Existing endpoints are never moved to it.
v1, 2026-07-01 Every subscribable event type.
Show child attributes
Show child attributes
Roadmap event types, not yet subscribable. See :class:PlannedEventSchema.
Show child attributes
Show child attributes