const caldotcom = client.defineHttpEndpoint({
//this should be unique inside your project
id: "cal.com",
//usually you'd use the domain name of the service
source: "cal.com",
//the icon is optional, it displays in the dashboard
icon: "caldotcom",
//this function is called when a webhook is received
verify: async (request) => {
//this is a useful helper function that can verify sha256 signatures
//each API has a different header name
return await verifyRequestSignature({
request,
//you can find the header name in the API's documentation
headerName: "X-Cal-Signature-256",
//you can find the secret in the Trigger.dev dashboard, on the HTTP endpoint page
secret: process.env.CALDOTCOM_SECRET!,
algorithm: "sha256",
});
},
});
Parameters
HTTPEndpointOptions
required
The options for the HTTP endpoint.
Hide options
Hide options
string
required
Used to uniquely identify the HTTP Endpoint inside your Project.
string
required
Usually you would use the domain name of the service, e.g.
cal.com.string
An optional icon name that’s displayed in the dashboard. Lots of company names are supported, e.g.
github, twilio. You can also reference the name of any Tabler icon, e.g. brand-google-maps, brand-twitch.string
An optional title, displayed in the dashboard.
array
Used to provide example payloads that are accepted by the job.This will be available in the dashboard and can be used to trigger test runs.
array
function
required
This is compulsory, and is used to verify that the received webhook is authentic. It’s a function that expects you to return a result object like:In 90% of cases, you’ll want to use the
//if it's valid
return { success: true }
//if it's invalid, reason is optional
return { success: false, reason: "No header" }
verifyRequestSignature helper function we provide.object
This optional object allows you to immediately Respond to a Request. This is useful for some APIs where they do a
GET Request when the webhook is first setup and expect a specific Response.Only use this if you really need to Respond to the Request that comes in. Most of the time you don’t.Show options
Show options
boolean
default:false
If you set this to
true, the Request that comes in won’t go on to Trigger any Runs. This is useful if you want to Respond to the Request, but don’t want to Trigger any Runs.RequestFilter
Only Requests that match this filter will cause the corresponding function to run. For example, you can use this to only allow
GET Requests.Show options
Show options
array
An array of HTTP methods to match. For example,
["GET", "POST"] will match both GET and POST Requests.object
An object of query parameters to match. This uses the EventFilter matching syntax.
filter: {
query: {
"hub.mode": [{ $startsWith: "sub" }],
},
},
object
An object of header key/values to match. This uses the EventFilter matching syntax.
filter: {
header: {
"content-type": ["application/json"],
},
},
object
An object of key/values to match. This uses the EventFilter matching syntax.
function
required
This is a function that’s called when a Request comes in. It’s passed the Request object, and expects you to return a Response object.
Returns
HttpEndpoint
The HTTP Endpoint that was created. You should assign this to a variable, as you’ll need it to
create an HTTP Trigger.

