Skip to content

Create Webhook

POST https://api.echovalue.dev/webhook

Creates a new webhook.

HeaderDescription
x-tokenYour API token
Content-TypeMust be application/json

These fields are valid in both modes.

FieldTypeDescriptionRequired
webhookIdstringPublic webhook identifier used for management endpoints. Defaults to default when omitted.No
urlstringCallback URL; must be HTTPS and publicly reachable.Yes
headersobjectCustom headers to include in the callback request.No

Use this mode when you want echoValue to assign an opaque mailbox address and forward each inbound email to your webhook URL.

FieldTypeDescriptionRequired
formatstringNative message format: slack, discord, teams, telegram, pagerduty, customNo
templateobjectJSON template for custom format. Max 2048 bytes, 5 nesting levels.No
optionsobjectFormat-specific options such as chat_id or routing_keyNo
includeAttachmentsbooleanInclude email attachments in payloads. Default: true.No

Need a temporary callback URL while testing? Use webhook.echovalue.dev and set the generated HTTPS URL as url.

{
"webhookId": "support-alerts",
"url": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"format": "slack",
"includeAttachments": false
}
{
"webhookId": "support-alerts",
"webhook": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"headers": {},
"format": "slack",
"options": {},
"includeAttachments": false,
"email": "r_abcd1234@hook.echovalue.dev",
"hash": "a1b2c3d4e5f6..."
}
  • The response includes an opaque email mailbox address.
  • format, template, options, and includeAttachments are only valid in this mode.
  • Inbound email payloads are limited to 1 MiB after parsing.
  • See Webhook Inbound Email for end-to-end examples.

Use this mode when you want echoValue to call your webhook URL on a recurring schedule.

FieldTypeDescriptionRequired
schedule.cronstring5-field cron expression: minute hour day month weekdayYes
schedule.timezonestringIANA timezone used to evaluate the cron expression, for example Europe/RomeYes
schedule.activebooleanWhether scheduled delivery is enabled. Default: true.No

Use crontab.echovalue.dev to generate a valid value for schedule.cron.

{
"webhookId": "daily-sync",
"url": "https://example.com/hooks/daily-sync",
"schedule": {
"cron": "0 9 * * *",
"timezone": "Europe/Rome"
}
}
{
"webhookId": "daily-sync",
"webhook": "https://example.com/hooks/daily-sync",
"headers": {},
"schedule": {
"cron": "0 9 * * *",
"timezone": "Europe/Rome",
"active": true,
"nextRunAt": "2026-04-24T07:00:00.000Z"
},
"hash": "a1b2c3d4e5f6..."
}
  • The response does not include an email field.
  • Do not send format, template, options, or includeAttachments together with schedule.
  • See Webhook Scheduled Jobs for end-to-end examples.
FieldTypeDescription
webhookIdstringPublic webhook identifier for management operations
webhookstringConfigured callback URL
headersobjectCustom headers
formatstringNative format, only returned for inbound email webhooks
templateobjectCustom template, only returned when format is custom
optionsobjectFormat options; sensitive values are redacted
includeAttachmentsbooleanReturned only for inbound email webhooks
scheduleobjectReturned only for scheduled webhooks
emailstringOpaque mailbox address, returned only for inbound email webhooks
hashstringSHA256 hash of your token
  • A webhook is either mailbox-triggered or scheduled, never both.
  • The webhook URL must be HTTPS and publicly reachable.
StatusMeaning
200Webhook created
400Invalid URL, invalid field combination, or malformed request
401Invalid token
402Insufficient credits
409webhookId already exists
500Internal server error