Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: hyreflow engine (local) Webhooks API
version: 0.1.0
tags:
- name: Webhooks
paths:
/api/v2/webhooks/inbound/{webhook_id}:
post:
summary: Webhook Inbound
description: 'PUBLIC inbound webhook trigger — the 128-bit URL secret IS the auth (no bearer).
Fires the workflow''s published revision with the POST body as `{{input.*}}`.'
operationId: webhook_inbound_api_v2_webhooks_inbound__webhook_id__post
parameters:
- name: webhook_id
in: path
required: true
schema:
type: string
title: Webhook Id
requestBody:
content:
application/json:
schema:
type: object
additionalProperties: true
default: {}
title: Body
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Webhooks
/api/v2/webhooks/provider/{provider}/{nonce}:
post:
summary: Provider Webhook
description: 'PUBLIC vendor callback for a managed async job: FullEnrich, Wiza or BetterContact calls it when the
job is done. The per-job nonce in the URL IS the auth. None of these vendors signs its callbacks.
A poke, never data: the body is never read, logged or stored. The job settles through the sweeper''s
own vendor re-poll and idempotent billing, woken now instead of at its next tick. So a forged or
replayed call can at most trigger one free poll, and only on a job''s first callback
(`provider_jobs.poke`). Every outcome answers the same 200, so the route says nothing about which
nonces exist and gives a vendor no reason to retry.'
operationId: provider_webhook_api_v2_webhooks_provider__provider___nonce__post
parameters:
- name: provider
in: path
required: true
schema:
type: string
title: Provider
- name: nonce
in: path
required: true
schema:
type: string
title: Nonce
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
tags:
- Webhooks
/api/v2/webhooks/calendly:
post:
summary: Calendly Webhook
description: 'PUBLIC — gated only by the `Calendly-Webhook-Signature` HMAC (and a per-IP rate limit). On
`invitee.created` (a meeting was booked) post the Slack card; every other event is acknowledged and
ignored so Calendly doesn''t retry it. The Slack post is fail-soft, so a Slack outage still returns 200
— a 5xx would make Calendly redeliver, and the notification isn''t worth a duplicate later.'
operationId: calendly_webhook_api_v2_webhooks_calendly_post
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
tags:
- Webhooks
/api/v2/webhooks/resend:
post:
summary: Resend Webhook
description: 'PUBLIC — gated only by the Svix signature (and a per-IP rate limit). The one event acted on is
`contact.updated` with `unsubscribed: true`: a contact who unsubscribed on Resend''s side (from a
Broadcast) becomes a marketing opt-out here, because our own sends go through the plain send API,
which Resend''s unsubscribe flag does not block. Everything else is acknowledged and ignored.'
operationId: resend_webhook_api_v2_webhooks_resend_post
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
tags:
- Webhooks
components:
schemas:
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
securitySchemes:
HTTPBearer:
type: http
scheme: bearer