Intake Relay provides an event-driven workflow layer for processing structured intake submissions. It is not a visual workflow builder — it is a webhook form system with reliable delivery and audit logging.
| Event | Trigger |
|---|---|
intake.submitted |
Validated intake stored |
intake.updated |
Reserved for future use |
List registered events:
export BASE="https://willowriverautomation.com/relay"
curl "$BASE/v1/events"
POST /flows/{id}/intake
│
▼
Validate against FlowVersion schema
│
▼
Evaluate conditionals + computed fields
│
▼
Store IntakeSubmission
│
▼
Log intake.validated event
│
▼
Emit intake.submitted
│
▼
Queue webhook deliveries (async)
│
▼
Retry worker processes failures
Every submission has an audit trail:
curl "$BASE/v1/intake/$INTAKE_ID/events" \
-H "Authorization: Bearer $API_KEY"
{
"events": [
{ "event_type": "intake.validated", "payload": { "field_count": 3 } },
{ "event_type": "workflow.webhook_queued", "payload": { "event": "intake.submitted" } }
]
}
Clients can pass Idempotency-Key on intake submission. Safe for retries from mobile apps or unreliable networks.
Webhook handlers should also deduplicate using intake_id.
Register webhooks on intake.submitted to forward submissions to your backend, CRM, or automation tools (Zapier, Make, n8n). Your handler receives a signed JSON payload with the validated intake data.
For multi-step automation, chain services in your webhook handler or use a queue worker that deduplicates on intake_id.
| Intake Relay | Zapier | |
|---|---|---|
| Intake validation | Built-in schema engine | External |
| Versioning | Immutable flow versions | None |
| Embed | Native SDK | iframe/link |
| Target user | Developers building SaaS | No-code operators |
Use Intake Relay as the structured intake API layer; optionally forward webhooks to Zapier for no-code ops workflows.