Connect Zapier
Zapier connects RallyText to thousands of apps without code: a new registration in a form adds a member, a reply to your team number lands in a spreadsheet, and so on.
Availability
The RallyText Zapier app is invite-only for now, and coming soon to Zapier's app directory. It is not listed there yet, so you won't find it by searching in Zapier. To try it, email support@rallytext.app from your account email and ask for an invite. It works on Team Plus and up. The RallyText for Zapier page shows the current status and covers each step in more detail.
What the RallyText app does
- Triggers: New Inbound Message, New Member, Member Opted Out.
- Actions: Send Message, Add Member, Add Member to Group.
- Search: Find Member, by phone or email.
Connect your account
- Create a key in Settings → Developers and label it "Zapier". Only head coaches and team directors can create keys.
- In Zapier, add a RallyText step and choose to connect a new account. Paste the key.
- Zapier checks the key against
GET /api/v1/teamand shows your team's name and code.
curl https://rallytext.app/api/v1/team \
-H "Authorization: Bearer rt_live_your_key_here"
import os
import requests
API = "https://rallytext.app/api/v1"
HEADERS = {"Authorization": "Bearer " + os.environ["RALLYTEXT_API_KEY"]}
resp = requests.get(API + "/team", headers=HEADERS, timeout=30)
resp.raise_for_status()
print(resp.json()["data"])
const API = "https://rallytext.app/api/v1";
const headers = { Authorization: `Bearer ${process.env.RALLYTEXT_API_KEY}` };
(async () => {
const resp = await fetch(`${API}/team`, { headers });
if (!resp.ok) throw new Error(`HTTP ${resp.status}: ${await resp.text()}`);
console.log((await resp.json()).data);
})();
<?php
$ch = curl_init("https://rallytext.app/api/v1/team");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("RALLYTEXT_API_KEY")],
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status >= 400) { throw new RuntimeException("HTTP $status: $body"); }
print_r(json_decode($body, true)["data"]);
How triggers work
Turning a Zap on creates a webhook for it, and turning it off deletes that webhook. The app checks the signature on every event. To see the webhooks a Zap created, look in Settings → Developers, or list them through the API: they show created_via: "api". If you delete one there, that Zap stops getting events until you turn it off and on again. Revoking the key deletes them and stops every Zap that uses it.
curl https://rallytext.app/api/v1/webhooks \
-H "Authorization: Bearer rt_live_your_key_here"
import os
import requests
HEADERS = {"Authorization": "Bearer " + os.environ["RALLYTEXT_API_KEY"]}
for hook in requests.get("https://rallytext.app/api/v1/webhooks", headers=HEADERS, timeout=30).json()["data"]:
print(hook["id"], hook["url"], hook["events"], "on" if hook["active"] else "off", hook["created_via"])
(async () => {
const headers = { Authorization: `Bearer ${process.env.RALLYTEXT_API_KEY}` };
const { data } = await (await fetch("https://rallytext.app/api/v1/webhooks", { headers })).json();
for (const h of data) console.log(h.id, h.url, h.events, h.active ? "on" : "off", h.created_via);
})();
<?php
$ch = curl_init("https://rallytext.app/api/v1/webhooks");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("RALLYTEXT_API_KEY")],
CURLOPT_RETURNTRANSFER => true,
]);
foreach (json_decode(curl_exec($ch), true)["data"] as $h) {
echo $h["id"] . " " . $h["url"] . " " . implode(",", $h["events"]) . "\n";
}
curl_close($ch);
Good to know
- Send Message follows the same rules as the dashboard: approval policies, opt-outs, and no urgent alerts. Merge tags are not filled in.
- Add Member never re-adds a number that texted STOP.
- The key acts as the person who created it. If they stop being a head coach or team director, the key and its Zaps stop for good. Create a new key and reconnect.
- Until you have an invite, Zapier's own webhook tools can receive RallyText webhooks, but they don't check the signature.