App integration · All integrations
Send Intake Forms After Every Calendly Booking
When a patient books through Calendly, the intake process usually starts a chain of manual work: copy the email into your form tool, send a separate intake request, then chase the patient for the completed form before the appointment. Clinics, coaches, and agencies lose 10–20 minutes per booking to this handoff. Patients arrive without signing waivers. Practitioners scramble for consent forms at the last minute. The booking confirmation lands instantly — the intake form should too.
Formfy's REST API lets you trigger a form send the moment a Calendly event fires. Point a Calendly webhook at your endpoint, call POST /api/v1/forms/{id}/send with the booker's email, and the patient receives a branded intake link before the confirmation email finishes loading.
The workflow at a glance
Trigger
A client books an appointment through Calendly
Action
Formfy automatically sends the intake or consent form to the booker
Result
The form is signed before the appointment — no chasing, no clipboards
Step-by-step: connect Calendly to Formfy
Wire a Calendly webhook to Formfy's send API so every new booking triggers an intake form delivery with no manual steps.
Generate a Formfy API key
Open the Formfy dashboard, navigate to Settings → API Keys, and click Create key. Copy the fk_live_… token to a password manager — Formfy displays it once. Use a fk_test_… key during development so you can verify the full booking-to-signature flow without consuming live credits or delivering to real patients.
Pick or create an intake form in Formfy
Call GET /api/v1/templates to browse ready-made intake, consent, and waiver templates. Note the form id of the template that fits your appointment type — you will pass it to the send endpoint. For a fully custom intake, call POST /api/v1/forms to scaffold a new form and capture its id from the response.
GET
/api/v1/templatesSee in the OpenAPI spec →Configure a Calendly webhook for the invitee.created event
In your Calendly developer settings, create a webhook subscription pointing at your server endpoint and subscribe to invitee.created. Calendly posts the booker's email, name, and scheduled event time in real time whenever a booking completes — your endpoint reads this payload and triggers the Formfy form send.
Send the intake form to the booker
When your endpoint receives the Calendly payload, POST /api/v1/forms/{id}/send with the recipient email extracted from the booking data and an optional message such as "Please complete your intake before your appointment." Formfy delivers the signed form link by email within seconds of the call.
POST
/api/v1/forms/{id}/sendSee in the OpenAPI spec →Subscribe to the form.signed event in Formfy
Register a Formfy webhook via POST /api/v1/webhooks with event_types: ["form.signed"] so your system is notified the moment the patient completes the intake. Store the signing secret Formfy returns — use it to verify the HMAC-SHA256 signature on every delivery and confirm no payload has been altered in transit.
POST
/api/v1/webhooksSee in the OpenAPI spec →Download the signed PDF before the appointment
When the form.signed webhook fires, call GET /api/v1/forms/{id}/signed-pdf to retrieve the secure download URL for the completed intake. Forward the PDF to your EHR, scheduling tool, or Google Drive folder so the practitioner has the signed document ready before the patient walks in.
GET
/api/v1/forms/{id}/signed-pdfSee in the OpenAPI spec →Rotate the webhook secret on a quarterly schedule
POST /api/v1/webhooks/{id}/rotate-secret every quarter — or immediately on suspected exposure. Update your server with the new signing secret returned in the response. Formfy webhook deliveries fail closed until both sides agree on the updated secret, keeping patient intake data protected end to end.
POST
/api/v1/webhooks/{id}/rotate-secretSee in the OpenAPI spec →
Send a Formfy intake form after a Calendly booking
When Calendly fires invitee.created, extract the booker's email from the payload and call Formfy's send endpoint. Replace FORM_ID with your intake form's id.
curl -X POST https://formfy.ai/api/v1/forms/FORM_ID/send \
-H "Authorization: Bearer fk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient_email": "patient@example.com",
"message": "Please complete your intake form before your appointment."
}'Frequently asked questions
Does Formfy have a native Calendly integration?
Not a no-code native integration yet — but the connection is straightforward with Formfy's public REST API. You either write a small webhook endpoint (10–20 lines) that receives Calendly's invitee.created event and calls Formfy's send endpoint, or wire them together through Zapier or Make using their HTTP/webhook modules. Either route takes under 20 minutes to set up end to end.
Which Calendly event should trigger the Formfy form send?
Subscribe to invitee.created — it fires the instant a booker completes the Calendly scheduling flow and includes the booker's email, name, event type, and scheduled time. If you want to handle rescheduling (and resend a fresh form), also subscribe to invitee.canceled and re-trigger on the replacement booking. Configure Calendly webhooks in your Calendly developer dashboard.
Can I send different Formfy forms for different Calendly event types?
Yes. The Calendly invitee.created payload includes the event type name and URI. In your webhook handler, branch on event_type.name to select which Formfy form id to pass to POST /api/v1/forms/{id}/send. A new-patient consultation might send a full intake and liability waiver, while a follow-up sends only a brief consent update. Store the mapping in an environment variable for easy updates.
How quickly does the patient receive the intake form after booking?
Typically within a few seconds. When Calendly fires invitee.created, your endpoint calls Formfy's send API, and Formfy dispatches the form link by email in real time. From the patient's perspective, the intake form often arrives in the same inbox refresh as the Calendly confirmation email — making it natural to complete immediately while the appointment context is fresh.
What if a patient never signs the intake form before the appointment?
Subscribe to form.expired in your Formfy webhook (event_types: ["form.expired"]) to catch unsigned forms that hit the expiry window. When that event fires, your system can send a reminder, flag the appointment in your scheduling tool, or alert front-desk staff. You can also call GET /api/v1/forms/{id}/signers at any point to see who has and has not completed the form.
Does Formfy support SMS delivery of intake forms after a Calendly booking?
Yes. POST /api/v1/forms/{id}/send accepts a recipient phone number in addition to, or instead of, an email address. For patient populations that prefer text, pass the mobile number captured during the Calendly booking flow. The recipient receives a secure link via SMS and can sign on any device — no app download required.
Can I set up this integration without writing server code?
Yes. Zapier and Make both support the pattern without custom code. In Zapier, use a Calendly trigger (invitee.created) connected to a Webhooks by Zapier POST action that calls Formfy's send endpoint. In Make, use the Calendly module paired with an HTTP POST module. Both handle the data mapping between the Calendly payload and the Formfy API call through a visual builder.
Does the Formfy API rate-limit high-volume booking flows?
Every Formfy API response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers so you can track quota consumption in real time. Rate limits scale with your plan tier. For high-volume booking flows — busy clinics, event businesses, large coaching practices — review your current quota in the dashboard and upgrade before a high-demand season.
Ready to wire Calendly into Formfy?
Spin up an API key, run your first webhook, and route signed forms wherever your team already works.
