10 operations. Guide: Receive events by webhook. Requests and responses are JSON with snake_case fields; authenticate with Authorization: Bearer <api key>. The examples assume a client built as in SDKs and the command line.

Create a webhook endpoint

POST /v1/webhooks

Deliveries are signed svix-style (svix-id, svix-timestamp, svix-signature). Private, loopback and link-local URLs are refused. Test keys create test endpoints, which receive the events test keys simulate.

Operation createWebhook, SDK minket.webhooks.create. Keys: full access. Test keys work on test-mode data.

Request body

FieldTypeRequiredDescription
urlstringyesAn https URL to a public host. Private, loopback, link-local and metadata addresses are refused, also after DNS resolution and redirects. At most 2048 characters.
descriptionstringnoAt most 200 characters.
modeone of "live", "test"noDefault "live".
eventsarray of one of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", …no

Response

201 Created; `secret` is returned once: Webhook.

FieldTypeRequiredDescription
idstringyesA UUID.
object"webhook"yes
environment_idstringyesA UUID.
modeone of "live", "test"yes
urlstringyes
descriptionstring or nullyes
eventsarray of one of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", … or nullyes
statusone of "enabled", "disabled", "auto_disabled"yes
secretstringno
statsobjectyes
stats.delivered_24hintegeryes
stats.failed_24hintegeryes
stats.last_success_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
stats.last_failure_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
updated_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X POST https://api.minket.com/v1/webhooks \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://hooks.acme.example/minket"}'

List webhook endpoints

GET /v1/webhooks

Endpoints of the key's environment; test keys see test endpoints only.

Operation listWebhooks, SDK minket.webhooks.list. Keys: full access. Test keys work on test-mode data.

Response

200 Success: object.

FieldTypeRequiredDescription
object"list"yes
dataarray of Webhookyes
data[].idstringyesA UUID.
data[].object"webhook"yes
data[].environment_idstringyesA UUID.
data[].modeone of "live", "test"yes
data[].urlstringyes
data[].descriptionstring or nullyes
data[].eventsarray of one of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", … or nullyes
data[].statusone of "enabled", "disabled", "auto_disabled"yes
data[].secretstringno
data[].statsobjectyes
data[].stats.delivered_24hintegeryes
data[].stats.failed_24hintegeryes
data[].stats.last_success_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
data[].stats.last_failure_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
data[].created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
data[].updated_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
has_morebooleanyes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/webhooks \
  -H "Authorization: Bearer $MINKET_API_KEY"

Get a webhook endpoint

GET /v1/webhooks/{id}

Operation getWebhook, SDK minket.webhooks.get. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Response

200 Success: Webhook.

FieldTypeRequiredDescription
idstringyesA UUID.
object"webhook"yes
environment_idstringyesA UUID.
modeone of "live", "test"yes
urlstringyes
descriptionstring or nullyes
eventsarray of one of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", … or nullyes
statusone of "enabled", "disabled", "auto_disabled"yes
secretstringno
statsobjectyes
stats.delivered_24hintegeryes
stats.failed_24hintegeryes
stats.last_success_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
stats.last_failure_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
updated_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY"

Update a webhook endpoint

PATCH /v1/webhooks/{id}

events: null subscribes to every event type. Enabling an endpoint that was disabled automatically clears its failure history.

Operation updateWebhook, SDK minket.webhooks.update. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Request body

FieldTypeRequiredDescription
urlstringnoAn https URL to a public host. Private, loopback, link-local and metadata addresses are refused, also after DNS resolution and redirects. At most 2048 characters.
descriptionstring or nullnoAt most 200 characters.
eventsarray of one of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", … or nullno
statusone of "enabled", "disabled"no

Response

200 Success: Webhook.

FieldTypeRequiredDescription
idstringyesA UUID.
object"webhook"yes
environment_idstringyesA UUID.
modeone of "live", "test"yes
urlstringyes
descriptionstring or nullyes
eventsarray of one of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", … or nullyes
statusone of "enabled", "disabled", "auto_disabled"yes
secretstringno
statsobjectyes
stats.delivered_24hintegeryes
stats.failed_24hintegeryes
stats.last_success_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
stats.last_failure_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
updated_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X PATCH https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"events":["email.delivered","email.bounced"]}'

Delete a webhook endpoint

DELETE /v1/webhooks/{id}

Its deliveries are deleted with it.

Operation deleteWebhook, SDK minket.webhooks.delete. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Response

200 Success: object.

FieldTypeRequiredDescription
idstringyesA UUID.
object"webhook"yes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X DELETE https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY"

Rotate the signing secret

POST /v1/webhooks/{id}/rotate

The previous secret keeps signing for 24 hours so receivers can switch without a gap.

Operation rotateWebhookSecret, SDK minket.webhooks.rotateSecret. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Response

200 Success: object.

FieldTypeRequiredDescription
object"webhook"yes
idstringyesA UUID.
secretstringyes
previous_secret_expires_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X POST https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/rotate \
  -H "Authorization: Bearer $MINKET_API_KEY"

List deliveries to an endpoint

GET /v1/webhooks/{id}/deliveries

Operation listWebhookDeliveries, SDK minket.webhooks.deliveries. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.
limitqueryintegerno Default 20.
afterquerystringnoA UUID.
beforequerystringnoA UUID.
statusqueryone of "pending", "succeeded", "failed", "exhausted"no
event_typequeryone of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", …no

Response

200 Success: object.

FieldTypeRequiredDescription
object"list"yes
dataarray of WebhookDeliveryyes
data[].idstringyesA UUID.
data[].object"delivery"yes
data[].webhook_idstringyesA UUID.
data[].event_idstring or nullyesA UUID.
data[].event_typeone of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", …yes
data[].message_idstringyes
data[].statusone of "pending", "succeeded", "failed", "exhausted"yes
data[].attemptsintegeryes
data[].next_attempt_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
data[].last_status_codeinteger or nullyes
data[].last_errorstring or nullyes
data[].attempt_logarray of objectyesAt most 20 items.
data[].attempt_log[].attemptintegeryes
data[].attempt_log[].atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
data[].attempt_log[].status_codeinteger or nullyes
data[].attempt_log[].errorstring or nullyes
data[].attempt_log[].responsestring or nullyes
data[].attempt_log[].duration_msintegeryes
data[].replay_of_idstring or nullyesA UUID.
data[].created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
data[].updated_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
has_morebooleanyes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/deliveries \
  -H "Authorization: Bearer $MINKET_API_KEY"

Get a delivery with its attempt log

GET /v1/webhooks/{id}/deliveries/{deliveryId}

Operation getWebhookDelivery, SDK minket.webhooks.delivery. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.
deliveryIdpathstringyesA UUID.

Response

200 Success: WebhookDelivery.

FieldTypeRequiredDescription
idstringyesA UUID.
object"delivery"yes
webhook_idstringyesA UUID.
event_idstring or nullyesA UUID.
event_typeone of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", …yes
message_idstringyes
statusone of "pending", "succeeded", "failed", "exhausted"yes
attemptsintegeryes
next_attempt_atstring (date-time) or nullyesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
last_status_codeinteger or nullyes
last_errorstring or nullyes
attempt_logarray of objectyesAt most 20 items.
attempt_log[].attemptintegeryes
attempt_log[].atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
attempt_log[].status_codeinteger or nullyes
attempt_log[].errorstring or nullyes
attempt_log[].responsestring or nullyes
attempt_log[].duration_msintegeryes
replay_of_idstring or nullyesA UUID.
created_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.
updated_atstring (date-time)yesAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/deliveries/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b \
  -H "Authorization: Bearer $MINKET_API_KEY"

Replay deliveries

POST /v1/webhooks/{id}/replay

Sends the deliveries again with their original message_id, so receivers that deduplicate by svix-id see the same message. Give delivery_ids, or since for every failed delivery since then (up to 100 per call).

Operation replayWebhookDeliveries, SDK minket.webhooks.replay. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Request body

FieldTypeRequiredDescription
delivery_idsarray of stringnoAt most 100 items.
sincestring (date-time)noAn ISO 8601 timestamp with timezone, for example 2026-10-24T18:00:00.000Z.

Response

202 Queued: object.

FieldTypeRequiredDescription
object"replay"yes
queuedintegeryes

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X POST https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/replay \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"since":"2026-10-24T00:00:00.000Z"}'

Send a test event

POST /v1/webhooks/{id}/test

An example event of the type, signed like any other and attempted once. Test events are not part of the event feed.

Operation testWebhook, SDK minket.webhooks.test. Keys: full access. Test keys work on test-mode data.

Parameters

NameInTypeRequiredDescription
idpathstringyesA UUID.

Request body

FieldTypeRequiredDescription
typeone of "email.sent", "email.scheduled", "email.delivered", "email.delivery_delayed", "email.complained", "email.bounced", "email.opened", "email.clicked", "email.received", "email.failed", "email.suppressed", "email.canceled", …yes

Response

202 Queued: object.

FieldTypeRequiredDescription
object"delivery"yes
idstringyesA UUID.

Errors: 400, 401, 403, 404, 409, 422, 429, 500, with the error body.

Examples

curl
curl -X POST https://api.minket.com/v1/webhooks/019a2b3c-4d5e-7f60-8a9b-0c1d2e3f4a5b/test \
  -H "Authorization: Bearer $MINKET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"email.delivered"}'

Updated