Skip to main content

Widget Submissions

Submission endpoint

When a visitor submits a widget form, the widget loader POSTs to:
This is an HTTP function with CORS enabled. It is publicly accessible — no authentication is required from the visitor.

Accepted input fields

The following fields can be collected by widget input blocks. All are optional unless marked as required in the widget’s block configuration. Additional custom fields from text, textarea, select, checkbox, and date blocks are collected as key-value pairs and stored in the lead’s form data.

Server-side processing flow

The endpoint always returns HTTP 200, including for silently dropped submissions (spam, honeypot, duplicates). This is intentional — it prevents attackers from probing the spam filters.

Response

Contact deduplication

On every submission, Financely looks up an existing contact in the organization by exact email match (case-insensitive). If found, the contact record is updated with any new non-empty fields from the submission. If not found, a new contact is created. This means repeated submissions from the same email address enrich the contact record rather than creating duplicates.

Lead record

A lead record is created for every valid submission. Key fields:

Webhook payload — widget.submitted

When a submission is processed, all configured webhook endpoints for the organization receive this payload:

HMAC signature verification (Node.js)

Every webhook request includes an X-Financely-Signature header. Verify it as follows:
Always use express.raw() (or equivalent) to get the raw body before parsing. Computing the HMAC on a re-serialized JSON object will not produce the same signature.