Webhooks
A webhook lets you trigger a saved flow over HTTP. When the endpoint is called, Sobmit starts a run with the request body as the run input.
Endpoint
Each saved flow has a webhook URL:
POST /api/hooks/<shortId> The <shortId> is the flow’s public short id (the same one in its shareable
URL).
Authentication
Webhook calls are authenticated with a bearer token. Generate (and rotate) the token in the flow’s Webhook trigger panel in the sidebar.
Authorization: Bearer <token> The comparison is constant-time, so the token cannot leak through timing side-channels.
Request bodies
The webhook accepts several content types, each mapped to a run input:
| Content type | Becomes the run input |
|---|---|
application/json | The parsed JSON value |
multipart/form-data | Files as upload payloads + text fields as JSON |
text/* | The raw string |
| Anything else | A single upload payload from the raw bytes |
Multipart file uploads
Files arrive in the exact shape of an Upload File node
({ name, mime, kind, content }), so a vision Agent, Transcribe node or image
reference can consume them directly — no adapter needed.
Limits
- The body is capped at 4 MB (Vercel’s serverless limit); larger requests
get a
413.
Example — trigger with JSON
curl -X POST https://www.sobm.it/api/hooks/AbCdEf
-H "Authorization: Bearer $WEBHOOK_TOKEN"
-H "Content-Type: application/json"
-d '{"question": "Summarize this"}' Example — trigger with a file
curl -X POST https://www.sobm.it/api/hooks/AbCdEf
-H "Authorization: Bearer $WEBHOOK_TOKEN"
-F "file=@recording.mp3" Related
- Schedules — run on a timer instead of a call.
- Start node — how the input enters the flow.