Skip to content
catchook

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

projectIdrequired
string

min length 1

Query parameters

pageoptional
integer

default 1 · min 1

limitoptional
integer

default 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

datarequired
object[]
data[].idrequired
string
data[].project_idrequired
string
data[].org_idrequired
string
data[].namerequired
string
data[].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[].urlrequired
string
data[].created_atrequired
string
data[].updated_atrequired
string
data[].deleted_atrequired
string

nullable

paginationrequired
object
pagination.pagerequired
number
pagination.limitrequired
number
pagination.totalrequired
number
pagination.total_pagesrequired
number
pagination.has_nextrequired
boolean
pagination.has_prevrequired
boolean
timestamprequired
string

404Project not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

post/projects/{projectId}/endpoints

Create an endpoint

Path parameters

projectIdrequired
string

min length 1

Request body

namerequired
string

min length 1

providerrequired
"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"
secretoptional
string

Required 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_configoptional
object

Request

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

datarequired
object
data.idrequired
string
data.project_idrequired
string
data.org_idrequired
string
data.namerequired
string
data.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.urlrequired
string
data.created_atrequired
string
data.updated_atrequired
string
data.deleted_atrequired
string

nullable

timestamprequired
string

404Project not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

get/endpoints/{id}

Get an endpoint

Path parameters

idrequired
string

min length 1

Request

curl -X GET https://api.catchook.com/endpoints/{id} \
  -H "Authorization: Bearer $CATCHOOK_API_KEY"

200The endpoint

datarequired
object
data.idrequired
string
data.project_idrequired
string
data.org_idrequired
string
data.namerequired
string
data.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.urlrequired
string
data.created_atrequired
string
data.updated_atrequired
string
data.deleted_atrequired
string

nullable

timestamprequired
string

404Endpoint not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

patch/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

idrequired
string

min length 1

Request body

nameoptional
string

min length 1

provideroptional
"stripe" | "github" | "shopify" | "twilio" | "linear" | "custom"
secretoptional
string

min length 1

verification_methodoptional
"hmac_sha256" | "hmac_sha1" | "twilio_signature" | "bearer_token" | "basic_auth" | "jwt" | "ip_allowlist" | "none"
verification_configoptional
object

Request

curl -X PATCH https://api.catchook.com/endpoints/{id} \
  -H "Authorization: Bearer $CATCHOOK_API_KEY" \
  -H "Content-Type: application/json" \ \
  -d '{ … }'

200The updated endpoint

datarequired
object
data.idrequired
string
data.project_idrequired
string
data.org_idrequired
string
data.namerequired
string
data.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.urlrequired
string
data.created_atrequired
string
data.updated_atrequired
string
data.deleted_atrequired
string

nullable

timestamprequired
string

404Endpoint not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

delete/endpoints/{id}

Delete an endpoint (soft delete)

Path parameters

idrequired
string

min length 1

Request

curl -X DELETE https://api.catchook.com/endpoints/{id} \
  -H "Authorization: Bearer $CATCHOOK_API_KEY"

204Endpoint deleted

404Endpoint not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

post/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

idrequired
string

min length 1

Request

curl -X POST https://api.catchook.com/endpoints/{id}/test \
  -H "Authorization: Bearer $CATCHOOK_API_KEY"

200The test was sent

datarequired
object
data.acceptedrequired
boolean

Whether the ingest endpoint accepted it.

data.statusrequired
number

The HTTP status the ingest endpoint answered.

data.event_idrequired
string

The recorded event, when it was accepted.

nullable

data.errorrequired
string

Why it was not accepted, in the words the ingest service itself used — for example: missing header x-signature, or signature mismatch.

nullable

data.urlrequired
string

The ingest URL the test was sent to.

timestamprequired
string

400This endpoint's scheme cannot be tested this way

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

404Endpoint not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

409Endpoint is paused, so a test would be rejected

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

503The ingest service could not be reached

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

post/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

idrequired
string

min length 1

Request

curl -X POST https://api.catchook.com/endpoints/{id}/pause \
  -H "Authorization: Bearer $CATCHOOK_API_KEY"

200The paused endpoint

datarequired
object
data.idrequired
string
data.project_idrequired
string
data.org_idrequired
string
data.namerequired
string
data.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.urlrequired
string
data.created_atrequired
string
data.updated_atrequired
string
data.deleted_atrequired
string

nullable

timestamprequired
string

404Endpoint not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

post/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

idrequired
string

min length 1

Request

curl -X POST https://api.catchook.com/endpoints/{id}/resume \
  -H "Authorization: Bearer $CATCHOOK_API_KEY"

200The resumed endpoint

datarequired
object
data.idrequired
string
data.project_idrequired
string
data.org_idrequired
string
data.namerequired
string
data.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.urlrequired
string
data.created_atrequired
string
data.updated_atrequired
string
data.deleted_atrequired
string

nullable

timestamprequired
string

404Endpoint not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

post/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

idrequired
string

min length 1

Request

curl -X POST https://api.catchook.com/endpoints/{id}/rotate-secret \
  -H "Authorization: Bearer $CATCHOOK_API_KEY"

200The new secret

datarequired
object
timestamprequired
string

400This verification method does not support rotation

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string

404Endpoint not found

errorrequired
object
error.coderequired
string
error.messagerequired
string
timestamprequired
string