API reference
Endpoints
Every Endpoints endpoint in the Catchook API.
Generated from Catchook API 0.1.0 · OpenAPI 3.1.0 ·openapi.json
get/projects/{projectId}/endpoints
List a project’s endpoints
Path parameters
projectIdrequiredstringmin length 1
Query parameters
pageoptionalintegerdefault 1 · min 1
limitoptionalintegerdefault 50 · min 1 · max 100
Request
curl -X GET https://api.catchook.com/projects/{projectId}/endpoints \
-H "Authorization: Bearer $CATCHOOK_API_KEY"200List of endpoints
datarequiredobject[]data[].idrequiredstringdata[].project_idrequiredstringdata[].org_idrequiredstringdata[].namerequiredstringdata[].providerrequired"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"data[].verification_methodrequired"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"data[].statusrequired"active" | "paused" | "disabled"data[].urlrequiredstringdata[].created_atrequiredstringdata[].updated_atrequiredstringdata[].deleted_atrequiredstringnullable
paginationrequiredobjectpagination.pagerequirednumberpagination.limitrequirednumberpagination.totalrequirednumberpagination.total_pagesrequirednumberpagination.has_nextrequiredbooleanpagination.has_prevrequiredbooleantimestamprequiredstring404Project not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringpost/projects/{projectId}/endpoints
Create an endpoint
Path parameters
projectIdrequiredstringmin length 1
Request body
namerequiredstringmin length 1
providerrequired"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"secretoptionalstringRequired for a known provider (stripe, github, shopify, twilio, linear)
min length 1
verification_methodoptional"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"Leave unset for a known provider (stripe, github, shopify, twilio, linear) to get its scheme and header automatically. Required for "custom" — including "none" if the endpoint should accept unsigned requests.
verification_configoptionalobjectRequest
curl -X POST https://api.catchook.com/projects/{projectId}/endpoints \
-H "Authorization: Bearer $CATCHOOK_API_KEY" \
-H "Content-Type: application/json" \ \
-d '{ … }'201The created endpoint
datarequiredobjectdata.idrequiredstringdata.project_idrequiredstringdata.org_idrequiredstringdata.namerequiredstringdata.providerrequired"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"data.verification_methodrequired"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"data.statusrequired"active" | "paused" | "disabled"data.urlrequiredstringdata.created_atrequiredstringdata.updated_atrequiredstringdata.deleted_atrequiredstringnullable
timestamprequiredstring404Project not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringget/endpoints/{id}
Get an endpoint
Path parameters
idrequiredstringmin length 1
Request
curl -X GET https://api.catchook.com/endpoints/{id} \
-H "Authorization: Bearer $CATCHOOK_API_KEY"200The endpoint
datarequiredobjectdata.idrequiredstringdata.project_idrequiredstringdata.org_idrequiredstringdata.namerequiredstringdata.providerrequired"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"data.verification_methodrequired"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"data.statusrequired"active" | "paused" | "disabled"data.urlrequiredstringdata.created_atrequiredstringdata.updated_atrequiredstringdata.deleted_atrequiredstringnullable
timestamprequiredstring404Endpoint not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringpatch/endpoints/{id}
Update an endpoint
Takes up to 60 seconds to affect incoming webhooks: the ingest service caches endpoint configuration, and that cache expires rather than being purged.
Path parameters
idrequiredstringmin length 1
Request body
nameoptionalstringmin length 1
provideroptional"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"secretoptionalstringmin length 1
verification_methodoptional"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"verification_configoptionalobjectRequest
curl -X PATCH https://api.catchook.com/endpoints/{id} \
-H "Authorization: Bearer $CATCHOOK_API_KEY" \
-H "Content-Type: application/json" \ \
-d '{ … }'200The updated endpoint
datarequiredobjectdata.idrequiredstringdata.project_idrequiredstringdata.org_idrequiredstringdata.namerequiredstringdata.providerrequired"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"data.verification_methodrequired"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"data.statusrequired"active" | "paused" | "disabled"data.urlrequiredstringdata.created_atrequiredstringdata.updated_atrequiredstringdata.deleted_atrequiredstringnullable
timestamprequiredstring404Endpoint not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringdelete/endpoints/{id}
Delete an endpoint (soft delete)
Path parameters
idrequiredstringmin length 1
Request
curl -X DELETE https://api.catchook.com/endpoints/{id} \
-H "Authorization: Bearer $CATCHOOK_API_KEY"204Endpoint deleted
404Endpoint not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringpost/endpoints/{id}/test
Send a test webhook to this endpoint
Signs a sample payload with this endpoint's own verification config and posts it to its public ingest URL, so it goes through the same path a real provider event does: rate limiting, signature verification, fan-out to every active destination, and a recorded event you can then open, replay, or watch arrive in `catchook listen`. Not every scheme can be tested this way, and the ones that cannot get a 400 saying why: `ip_allowlist` (the request comes from Catchook, never from an allowlisted address), `jwt` (a valid token has to be minted by whoever holds the key) and `twilio_signature` (Twilio signs the URL together with its sorted form parameters). For those, send a real event from the provider.
Path parameters
idrequiredstringmin length 1
Request
curl -X POST https://api.catchook.com/endpoints/{id}/test \
-H "Authorization: Bearer $CATCHOOK_API_KEY"200The test was sent
datarequiredobjectdata.acceptedrequiredbooleanWhether the ingest endpoint accepted it.
data.statusrequirednumberThe HTTP status the ingest endpoint answered.
data.event_idrequiredstringThe recorded event, when it was accepted.
nullable
data.errorrequiredstringWhy it was not accepted, in the words the ingest service itself used — for example: missing header x-signature, or signature mismatch.
nullable
data.urlrequiredstringThe ingest URL the test was sent to.
timestamprequiredstring400This endpoint's scheme cannot be tested this way
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstring404Endpoint not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstring409Endpoint is paused, so a test would be rejected
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstring503The ingest service could not be reached
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringpost/endpoints/{id}/pause
Pause an endpoint
Incoming webhooks are answered 409 while paused, and still recorded so the arrivals stay visible. Takes up to 60 seconds to affect incoming webhooks: the ingest service caches endpoint configuration, and that cache expires rather than being purged.
Path parameters
idrequiredstringmin length 1
Request
curl -X POST https://api.catchook.com/endpoints/{id}/pause \
-H "Authorization: Bearer $CATCHOOK_API_KEY"200The paused endpoint
datarequiredobjectdata.idrequiredstringdata.project_idrequiredstringdata.org_idrequiredstringdata.namerequiredstringdata.providerrequired"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"data.verification_methodrequired"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"data.statusrequired"active" | "paused" | "disabled"data.urlrequiredstringdata.created_atrequiredstringdata.updated_atrequiredstringdata.deleted_atrequiredstringnullable
timestamprequiredstring404Endpoint not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringpost/endpoints/{id}/resume
Resume a paused endpoint
Takes up to 60 seconds to affect incoming webhooks: the ingest service caches endpoint configuration, and that cache expires rather than being purged.
Path parameters
idrequiredstringmin length 1
Request
curl -X POST https://api.catchook.com/endpoints/{id}/resume \
-H "Authorization: Bearer $CATCHOOK_API_KEY"200The resumed endpoint
datarequiredobjectdata.idrequiredstringdata.project_idrequiredstringdata.org_idrequiredstringdata.namerequiredstringdata.providerrequired"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"data.verification_methodrequired"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"data.statusrequired"active" | "paused" | "disabled"data.urlrequiredstringdata.created_atrequiredstringdata.updated_atrequiredstringdata.deleted_atrequiredstringnullable
timestamprequiredstring404Endpoint not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstringpost/endpoints/{id}/rotate-secret
Regenerate the verification secret (shown once)
The old secret stops being accepted once this takes effect. Takes up to 60 seconds to affect incoming webhooks: the ingest service caches endpoint configuration, and that cache expires rather than being purged.
Path parameters
idrequiredstringmin length 1
Request
curl -X POST https://api.catchook.com/endpoints/{id}/rotate-secret \
-H "Authorization: Bearer $CATCHOOK_API_KEY"200The new secret
datarequiredobjecttimestamprequiredstring400This verification method does not support rotation
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstring404Endpoint not found
errorrequiredobjecterror.coderequiredstringerror.messagerequiredstringtimestamprequiredstring