Send contacts in from the apps you already use.
Each business has its own webhook. Step-by-step guides connect Zapier, Make, Typeform, Jotform, Google Forms, Facebook Lead Ads, Shopify or your own code.
Integrations
Contacts that other apps send to Harbor Coffee.
Connection details
Paste these three into the tool that sends your contacts. They’re only for Harbor Coffee.
The same for every business. Send a POST with a JSON body.
Tells the webhook which business the contact is for.
Send it in the X-TextScale-Secret header or as "secret" in the body. Keep it off web pages: anyone who has it can add contacts here.
Connect a tool
Step-by-step guides. Every one uses the webhook above, so there’s nothing to install.
Contacts that come in
What happens to every contact this webhook adds.
Added on top of any tags the request sends. A request can name a tag by its name or its name in apps.
Consent is required. Only people sent with "consent": 1 are added, and each one goes into your consent record. People who opted out earlier aren’t added back.
Test it
Sends a sample contact through your webhook with your real secret. Nothing is saved and no text goes out.
Sample request
{
"business_id": 1,
"phone": "+15555550123",
"first_name": "Jane",
"last_name": "Doe",
"email": "[email protected]",
"consent": 1,
"consent_source": "website form",
"source": "website",
"tags": ["loyalty-card"]
}
The secret goes in the X-TextScale-Secret header, as the cURL shows: YOUR_SECRET stands in for it, and Show secret above puts the real one in. A tool that can’t send headers can add "secret" to the JSON body instead.
Fields you can send4 required, 8 optional
business_idRequiredThis business’s ID: 1.secretRequiredIn the X-TextScale-Secret header, or as "secret" in the body.phoneRequiredMobile number with the country code, like +15555550123. US and Canadian numbers work without +1.consentRequired1 when the person agreed to get texts (true, yes and on count too). Anything else is turned away, unless status is "unsubscribed".first_name, last_name, emailOptionalSaved on the contact.tagsOptionalA list of tags, like ["vip", "fall-menu"]. Added on top of the tags set above.sourceOptionalA name for the sending tool (zapier, make, website). Shown in Activity.consent_sourceOptionalWhere they agreed, like "website form". Kept in your consent record.opt_in_sourceOptionalYour word for how they joined, like "website_form". Shown on their Consent tab.statusOptional"unsubscribed" opts someone out: a new number is added as opted out, and a contact is unsubscribed. No consent needed, and it works while the business is paused or your account is locked.event_idOptionalYour own ID for this sign-up, different for every contact. A retry of one we saved is ignored.external_idOptionalYour system’s ID for the person. Kept with the request.What the webhook answersAnything but 200 means not saved
Every answer is JSON with a code and a message. Retry 429 and 500 after a short wait; a repeat of a request already saved is ignored.
Guides for the tools you use
Copy three details into Zapier, Make or your own code. Every guide uses the same webhook, so there’s nothing to install.
Integrations
Contacts that other apps send to Harbor Coffee.
Connection details
Paste these three into the tool that sends your contacts. They’re only for Harbor Coffee.
The same for every business. Send a POST with a JSON body.
Tells the webhook which business the contact is for.
Send it in the X-TextScale-Secret header or as "secret" in the body. Keep it off web pages: anyone who has it can add contacts here.
Connect a tool
Step-by-step guides. Every one uses the webhook above, so there’s nothing to install.
Contacts that come in
What happens to every contact this webhook adds.
Added on top of any tags the request sends. A request can name a tag by its name or its name in apps.
Consent is required. Only people sent with "consent": 1 are added, and each one goes into your consent record. People who opted out earlier aren’t added back.
Test it
Sends a sample contact through your webhook with your real secret. Nothing is saved and no text goes out.
Sample request
{
"business_id": 1,
"phone": "+15555550123",
"first_name": "Jane",
"last_name": "Doe",
"email": "[email protected]",
"consent": 1,
"consent_source": "website form",
"source": "website",
"tags": ["loyalty-card"]
}
The secret goes in the X-TextScale-Secret header, as the cURL shows: YOUR_SECRET stands in for it, and Show secret above puts the real one in. A tool that can’t send headers can add "secret" to the JSON body instead.
Fields you can send4 required, 8 optional
business_idRequiredThis business’s ID: 1.secretRequiredIn the X-TextScale-Secret header, or as "secret" in the body.phoneRequiredMobile number with the country code, like +15555550123. US and Canadian numbers work without +1.consentRequired1 when the person agreed to get texts (true, yes and on count too). Anything else is turned away, unless status is "unsubscribed".first_name, last_name, emailOptionalSaved on the contact.tagsOptionalA list of tags, like ["vip", "fall-menu"]. Added on top of the tags set above.sourceOptionalA name for the sending tool (zapier, make, website). Shown in Activity.consent_sourceOptionalWhere they agreed, like "website form". Kept in your consent record.opt_in_sourceOptionalYour word for how they joined, like "website_form". Shown on their Consent tab.statusOptional"unsubscribed" opts someone out: a new number is added as opted out, and a contact is unsubscribed. No consent needed, and it works while the business is paused or your account is locked.event_idOptionalYour own ID for this sign-up, different for every contact. A retry of one we saved is ignored.external_idOptionalYour system’s ID for the person. Kept with the request.What the webhook answersAnything but 200 means not saved
Every answer is JSON with a code and a message. Retry 429 and 500 after a short wait; a repeat of a request already saved is ignored.
See every contact that came in
Added, updated or turned away, with how to fix one that was turned away.
Integrations
Contacts that other apps send to Harbor Coffee.
Times are in each business’s time zone. We keep this list for 180 days. The request itself is kept for 30 days, 60 if it failed on our side, or 90 if it was turned away.
Text new contacts once, in daytime
Every new contact an app sends gets one welcome text, held until daytime where they live.
Integrations
Contacts that other apps send to Harbor Coffee.
Welcome text
Text every new contact this webhook adds. Texts wait in a queue, go out at most 60 an hour, and wait for daytime where the person lives.
Your business name goes in front and “Reply STOP to opt out” at the end, unless your text already has them.
Text message · Today 9:41 AM
Whose clock decides when it’s too early?
Texts land between 9:00 AM and 8:00 PM where each person lives. Numbers outside North America use their country’s time where it has one time zone, else Eastern Time. Texas numbers wait until noon on Sunday.
Questions
Do I need a paid Zapier plan?
Webhooks by Zapier is part of Zapier’s paid plans. Make’s HTTP module works on its free plan.
Is there an API for sending texts?
Not yet. Integrations brings contacts in. Sending is done in TextScaleHQ.