Hosted Forms
Collect structured responses from your recipients with Pinnacle-hosted forms. Mint a form URL, deliver it over SMS or RCS in the same call, and receive completed submissions as…
Hosted Forms
Collect structured responses from your recipients with Pinnacle-hosted forms. Mint a form URL, deliver it over SMS or RCS in the same call, and receive completed submissions as a new FORM.SUBMISSION webhook event.
Browse, build, and theme forms in the Pinnacle Dashboard → Forms.
What's new?
Form endpoints
POST /forms— create a form without sending it (returns the publichttps://forms.pinnacle.sh/{form_id}URL).POST /forms/send— create (or reuse) a form and deliver its URL over SMS or RCS in one call. Whentois provided, Pinnacle dispatches the message and the recipient is recorded on the response (submission.toplus the outboundmessage_id). Omittoto mint a standalone submission URL for embedding in your own outreach.GET /forms/{id},PATCH /forms/{id}— retrieve and partial-update a form.POST /forms/list,POST /forms/{id}/submissions/list— paginated listings of forms and of their completed submissions.
16 field types out of the box
Text, textarea, email, url, phone (auto-formats + E.164-normalized on submit), number, range slider, rating stars, date, time, datetime, color picker, select, radio group, checkbox group, and an address input with built-in Google Places autocomplete.
Theme overrides
Per-form theme_override layered on top of your team's default theme — tweak colors, background (solid / gradient / pattern / image), font family, corner radius, submit button label, success message, and post-submission redirect URL. Configure team-wide defaults from the Pinnacle Dashboard → Forms.
Updatable submissions
Set can_update: true to let a recipient reopen their submission URL and edit their answers. The form rehydrates with their prior values; submission_count reflects distinct recipients and last_submitted_at tracks the latest edit.
New webhook event: FORM.SUBMISSION
When a recipient completes a form, every webhook subscribed to the sender receives a FORM.SUBMISSION event. The payload carries the sender, an optional conversation reference, the form summary, and a resolved snapshot of every field paired with the submitted value — ready to render or route on without a separate get_form call. Manage subscribers from the Pinnacle Dashboard → Webhooks.
{
"type": "FORM.SUBMISSION",
"sender": "agent_iM9wQcyBBjYn",
"conversation": { "id": "convo_…", "from": "agent_…", "to": "+14155551234" },
"form": { "id": "form_…", "url": "https://forms.pinnacle.sh/form_…", "name": "Contact request" },
"submission": {
"id": "fsub_…",
"from": "agent_iM9wQcyBBjYn",
"to": "+14155551234",
"data": { "full_name": "Ada Lovelace", "email": "ada@example.com" },
"fields": [
{ "key": "full_name", "label": "Full name", "type": "text", "value": "Ada Lovelace" },
{ "key": "email", "label": "Email", "type": "email", "value": "ada@example.com" }
],
"ip_address": "203.0.113.45",
"user_agent": "Mozilla/5.0 …",
"submitted_at": "2026-04-24T00:35:04.406Z"
}
}See the Receiving Message, Call, and User Events guide for full routing details.