Choose the right hook
Partial submissions (
save later) skip full post-submit integrations unless a feed explicitly allows partials. Completed submissions always run the finalize job.Integration feeds (built-in post-submit)
Configure under Form → Integrations in Studio. Each feed:- Normalizes answers (optionally through field mapping)
- Respects conditional feed rules — Conditional feeds
- Records success/failure for inbox replay
Queued listener example
Event::listen or Laravel discovery. Use a dedicated queue name (integrations) in production.
Custom post-submit driver
When multiple forms share the same outbound system, implement a driver (Custom integrations) instead of duplicating listeners:- Admins configure feeds in Studio
- Deliveries appear in the integration log with replay
- OAuth Connections supply auth — OAuth integrations
Idempotency and retries
Post-submit actions should tolerate duplicate delivery attempts:- Key external creates on
submission_id - Use
IntegrationDispatchSucceeded/IntegrationDispatchFailedfor alerting, not primary business logic - Replay from the admin UI re-runs
dispatch()with the same submission snapshot
What not to do
- Do not use Eloquent observers on
FlexFormSubmission— see Events & hooks - Do not assume
syncqueue in production — run a worker