Developer & Integrations Docs

Send leads straight into Hoot with the Patient Intake Webhook.

Connect Zapier, Make.com, Salesforce, or any system that can send an HTTP request — and every new lead lands in Hoot as a patient, automatically enrolled in the nurture campaign you choose.

POST /webhook/patient-intake/{token} Content-Type: application/json { "firstName": "Christian", "lastName": "Espigadera", "phone": "7202190414", "email": "chrespi14@gmail.com", "leadSource": "Facebook Ad" } 200 OK { "message": "Patient created successfully", "patientId": 74165 }
1

Overview

What the Patient Intake Webhook does and when to use it.

The Patient Intake Webhook lets any external system that can send an HTTP POST request push new leads directly into Hoot CRM as patients — automatically enrolling them into a nurture campaign you choose ahead of time. It's the standard way to connect lead-gen forms, ad platforms, and automation tools (Zapier, Make.com, Salesforce Flow, custom scripts, etc.) to Hoot without manual data entry.

Each webhook URL is unique to one doctor and one service in your Hoot account, and every submission is automatically checked for duplicates before a new patient record is created.

Good to know This guide covers Hoot's current webhook capability: inbound lead delivery into Hoot (Patient Intake). Hoot does not yet send outbound event notifications to your systems — see the FAQ for current scope.
2

How It Works

 

  1. You generate a unique webhook URL from your Hoot doctor portal for a specific service.
  2. You assign a nurture campaign to that webhook — every lead arriving through it enrolls into this campaign automatically.
  3. You paste the webhook URL into your external system (Zapier, Make.com, Salesforce, a website form handler, etc.) as the destination for new leads.
  4. When a new lead comes in on the external side, that system sends a POST request with the lead's details to your Hoot webhook URL.
  5. Hoot validates the request, creates (or matches an existing) patient record, and activates the assigned campaign — no manual entry required.
3

Generating Your Webhook URL

Done once per service, from inside your Hoot portal.

  • 1

    Log in to your Hoot CRM portal

    Open your profile page.

  • 2

    Select the service

    Choose the service you want to receive leads for.

  • 3

    Generate the URL

    Find the Patient Intake Webhook card and click Generate Webhook URL.

  • 4

    Copy the URL

    Paste it into your external system (Zapier, Make.com, Salesforce, etc.).

  • 5

    Assign a campaign

    Select a nurture campaign and click Save Campaign. A webhook cannot receive leads until a campaign is assigned.

Status shown in portalMeaning
Not ConfiguredNo webhook URL has been generated yet for this service.
URL Ready — Campaign NeededURL exists, but no campaign is assigned. Incoming leads will be rejected until you assign one.
Fully ConfiguredURL and campaign are both set. The webhook is live and accepting leads.
4

Security & Tokens

 

Every webhook URL contains a unique, unguessable token that identifies your doctor and service:

https://api.app-hoot.com/webhook/patient-intake/<your-token>
Treat your webhook URL as a secret The token in the URL is the only credential used to authorize a submission — there is no additional signature, API key, or header required. Anyone with the URL can submit leads to your account. Do not post it publicly, and only paste it into trusted automation tools.

If a URL is ever exposed, or you simply want to rotate it, click Revoke in the webhook card and generate a new one. The old URL stops working immediately (any request returns 401 Unauthorized), so remember to update every external system that uses it.

5

Endpoint Reference

 

Submit a lead

POST  /webhook/patient-intake/{token}

No authentication headers are required — the token in the URL path is sufficient. Send a JSON body with Content-Type: application/json.

Request fields

FieldTypeRequiredNotes
firstNamestringYesLead's first name.
lastNamestringYesLead's last name.
phonestringOne of phone / emailDigits only; Hoot stores it in +1 format.
emailstringOne of phone / emailUsed for duplicate matching if phone is not provided.
idstringNoYour own external record ID, stored for reference (e.g. Salesforce lead ID).
leadFormNamestringNoName of the form or ad that generated the lead.
leadSourcestringNoWhere the lead came from (e.g. "Facebook Ad", "Website Form").
leadSourceDetailstringNoAdditional detail about the source.
resultNurturestringNoOptional tag/code carried over from your source system.

Example request

curl -X POST "https://api.app-hoot.com/webhook/patient-intake/6f2c9a3e-51e0-4b3f-9d2a-8e0c4a7b1d90" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Christian",
    "lastName": "Espigadera",
    "phone": "7202190414",
    "email": "chrespi14@gmail.com",
    "id": "0013h000005CumzAAC",
    "leadFormName": "Self-Test",
    "leadSource": "Already Knew About LEC",
    "leadSourceDetail": null,
    "resultNurture": "CLR-7"
  }'

All fields except firstName and lastName are optional, and Hoot only requires one of phone or email. Any extra fields you send (leadFormName, leadSource, leadSourceDetail, resultNurture, id) are stored on the patient record for reference and reporting.

6

Responses & Status Codes

 

200 Created

{"message":"Patient created successfully","patientId":74165}

200 Duplicate — skipped

A matching patient already exists, so no duplicate was created. This is expected and safe on retries. {"message":"Patient already exists, skipped"}

400 Missing required fields

No firstName/lastName, or missing both phone and email.

401 Invalid token

The token is invalid or has been revoked. {"message":"Invalid webhook token"}

503 Not fully configured

The webhook URL is valid, but no nurture campaign has been assigned yet. No patient is created for this request. {"message":"Webhook is not fully configured. Contact Hoot support."}

500 Server error

Unexpected internal error.

Seeing 503 responses? This almost always means a campaign hasn't been assigned to the webhook yet. Go to your profile in the Hoot portal, open the webhook card for the service, and select a campaign under Assign Campaign.
7

Retries & Duplicate Handling

 

Hoot is the receiver in this integration, so it does not re-send or retry requests — that responsibility sits with your automation tool (Zapier, Make.com, Salesforce, etc.). What Hoot does guarantee is that re-sending the same lead is safe:

  • Before creating a patient, Hoot checks for an existing match by name + email or name + phone.
  • If a match is found, Hoot returns 200 with "Patient already exists, skipped" instead of creating a duplicate.

This means you can safely configure automatic retries on timeouts or network errors in your source system without worrying about duplicate patient records.

8

Integration Recipes

 

Zapier

  1. Create a Zap with your lead source as the Trigger (e.g. a form app, ad platform, or spreadsheet).
  2. Add an action step using the Webhooks by Zapier app — POST.
  3. Paste your Hoot webhook URL into the URL field.
  4. Set Payload Type to json and map your trigger's fields to firstName, lastName, phone/email, and any optional fields.
  5. Test the step — you should see a 200 response and the lead should appear as a patient in Hoot.

Make.com

  1. Add an HTTP — Make a request module after your trigger module.
  2. Set the method to POST and the URL to your Hoot webhook URL.
  3. Set the body type to JSON and map the required fields.
  4. Run once to confirm a 200 response before turning the scenario on.

Salesforce

  1. Use a Flow (Record-Triggered, on Lead creation/update) with an HTTP Callout action, or an Outbound Message paired with a lightweight relay if your org requires SOAP-based outbound messages.
  2. Point the callout at your Hoot webhook URL with method POST and a JSON body mapping Salesforce Lead fields to Hoot's expected fields (send the Salesforce Lead ID as id).
  3. Confirm the callout returns 200 in Flow debug logs.

Any other system

If your platform can send an HTTP POST request with a JSON body, it can integrate with this webhook — website form handlers, custom scripts, ad-platform lead sync tools, and other CRMs all work the same way.

9

Troubleshooting

 

SymptomLikely causeFix
Getting 401 on every requestToken was revoked/regenerated, or copied incorrectlyRe-copy the current URL from the Hoot portal and update your integration
Getting 503 on every requestNo campaign assigned to the webhookAssign a campaign in the webhook card in your profile
Getting 400Missing firstName/lastName, or missing both phone and emailCheck your field mapping in the source system
Lead not appearing as a new patientAn existing patient already matched by name + phone/emailExpected behavior — check for the existing patient record rather than a new one
10

FAQ

 

Does Hoot send webhooks to my system when something happens (e.g., a new deal, appointment, or stage change)?
Not currently. Today, Hoot only supports inbound webhooks — receiving leads from your systems into Hoot via the Patient Intake Webhook. Outbound, event-driven notifications from Hoot to your systems are not available yet.
Is the webhook payload signed or verified with a shared secret?
No. The webhook token embedded in the URL is the only credential. Keep the URL private and rotate it if it's ever exposed.
Can I see a log of past webhook deliveries?
Delivery history isn't currently exposed in the portal. If you need to confirm whether specific leads came through, contact Hoot support with the approximate date/time and lead details.
Can one webhook feed multiple campaigns?
No — each webhook URL is tied to exactly one nurture campaign at a time. If you need leads routed to different campaigns, generate separate webhook URLs per service/use case.
What happens if I revoke a webhook URL that's still in use?
Any request sent to the old URL will immediately receive a 401 Unauthorized response. Update your integration with the newly generated URL to resume delivery.