{"auth":{"bearer":[{"key":"token","type":"string","value":"{{api_key}}"}],"type":"bearer"},"info":{"description":"Manage your roster and send texts from your own systems. Included on Team Plus and up. Create keys in Settings, Developers. Errors: {\"error\": {\"code\", \"message\"}}. Successes: {\"data\": ...}, with a \"pagination\" object on lists. Limits: 120 requests/min per key, 20 sends/min and 200 sends/hour per key, 60/min per IP for requests without a valid key. Opted-out members are never texted, and the API cannot re-subscribe them. Set api_key to your rt_live_ key.","name":"RallyText API v1","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"item":[{"item":[{"name":"Team name, code, number, plan and credits","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["team"],"raw":"{{base_url}}/team"}}}],"name":"team"},{"item":[{"name":"List members","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["members"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""},{"description":"Only members of this group (404 not_found if unknown)","disabled":true,"key":"group_id","value":""},{"description":"Only this role (400 invalid_request if unknown)","disabled":true,"key":"role","value":""},{"description":"pending, invited_sms, verified_sms, opted_out, ...","disabled":true,"key":"status","value":""},{"description":"Only members with this phone number, in any common US format (400 invalid_phone if it is not a valid number)","disabled":true,"key":"phone","value":""},{"description":"Only members with this email, case-insensitive (400 invalid_email if malformed)","disabled":true,"key":"email","value":""},{"description":"created_at = oldest first, -created_at = newest first (400 invalid_request for anything else)","disabled":true,"key":"sort","value":""}],"raw":"{{base_url}}/members"}}},{"name":"Add a member (ordinary members only, not staff)","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"name\": \"Jordan Lee\",\n  \"phone\": \"(906) 555-1234\",\n  \"role\": \"athlete\"\n}"},"description":"","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["members"],"raw":"{{base_url}}/members"}}},{"name":"Get one member","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["members",":member_id"],"raw":"{{base_url}}/members/:member_id","variable":[{"key":"member_id","value":""}]}}},{"name":"Update a member","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"name\": \"Jordan Lee\"\n}"},"description":"status, is_blocked and id are read-only. Staff, board members and members with a login return 403 staff_member_protected. An opted-out member's number cannot be changed (409 opted_out).","header":[{"key":"Content-Type","value":"application/json"}],"method":"PATCH","url":{"host":["{{base_url}}"],"path":["members",":member_id"],"raw":"{{base_url}}/members/:member_id","variable":[{"key":"member_id","value":""}]}}},{"name":"Remove a member","request":{"description":"","header":[],"method":"DELETE","url":{"host":["{{base_url}}"],"path":["members",":member_id"],"raw":"{{base_url}}/members/:member_id","variable":[{"key":"member_id","value":""}]}}},{"name":"A member's custom values (private fields are left out)","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["members",":member_id","custom-fields"],"raw":"{{base_url}}/members/:member_id/custom-fields","variable":[{"key":"member_id","value":""}]}}},{"name":"Set some of a member's custom values","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"values\": {\n    \"jersey_number\": \"12\"\n  }\n}"},"description":"","header":[{"key":"Content-Type","value":"application/json"}],"method":"PATCH","url":{"host":["{{base_url}}"],"path":["members",":member_id","custom-fields"],"raw":"{{base_url}}/members/:member_id/custom-fields","variable":[{"key":"member_id","value":""}]}}}],"name":"members"},{"item":[{"name":"List groups","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["groups"],"raw":"{{base_url}}/groups"}}},{"name":"Add a member to a group","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"member_id\": \"\"\n}"},"description":"","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["groups",":group_id","members"],"raw":"{{base_url}}/groups/:group_id/members","variable":[{"key":"group_id","value":""}]}}},{"name":"Remove a member from a group","request":{"description":"","header":[],"method":"DELETE","url":{"host":["{{base_url}}"],"path":["groups",":group_id","members",":member_id"],"raw":"{{base_url}}/groups/:group_id/members/:member_id","variable":[{"key":"group_id","value":""},{"key":"member_id","value":""}]}}}],"name":"groups"},{"item":[{"name":"List broadcast messages with delivery counts","request":{"description":"Team broadcasts only (dashboard and API sends). Inbox replies, direct messages and automations are not listed.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["messages"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""}],"raw":"{{base_url}}/messages"}}},{"name":"Send or schedule a broadcast text","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"text\": \"Practice moved to 5pm today.\",\n  \"audience\": \"all\"\n}"},"description":"Broadcast audiences only: all, staff, families or one group. Opted-out members are never texted. A team approval policy can hold the send (status pending_approval). 20 sends/min and 200 sends/hour per key.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["messages"],"raw":"{{base_url}}/messages"}}},{"name":"Estimate a send without sending it","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"text\": \"Practice moved to 5pm today.\",\n  \"audience\": \"all\"\n}"},"description":"Runs every check a send runs, sends nothing, and does not count toward the 20 sends/min limit. scheduled_for and repeat are ignored.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["messages","estimate"],"raw":"{{base_url}}/messages/estimate"}}},{"name":"One message with delivery counts","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["messages",":message_id"],"raw":"{{base_url}}/messages/:message_id","variable":[{"key":"message_id","value":""}]}}},{"name":"Per-recipient delivery report for one broadcast","request":{"description":"Numbers are masked. member_ids lists roster entries with that number.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["messages",":message_id","deliveries"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""}],"raw":"{{base_url}}/messages/:message_id/deliveries","variable":[{"key":"message_id","value":""}]}}}],"name":"messages"},{"item":[{"name":"Totals for a date range","request":{"description":"Up to 366 days. Broadcasts only (no inbox replies or automations).","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["analytics"],"query":[{"description":"UTC date, default 29 days before to","disabled":true,"key":"from","value":""},{"description":"UTC date, default today","disabled":true,"key":"to","value":""}],"raw":"{{base_url}}/analytics"}}}],"name":"analytics"},{"item":[{"name":"List texts received by your team number, newest first","request":{"description":"Each item has the same fields as the data of the message.received webhook event.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["inbound-messages"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""}],"raw":"{{base_url}}/inbound-messages"}}}],"name":"inbound-messages"},{"item":[{"name":"Inbox: received texts with read and reply state","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["inbox"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""},{"description":"Default all. Archived texts are left out.","disabled":true,"key":"filter","value":""}],"raw":"{{base_url}}/inbox"}}},{"name":"Number of unread texts","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["inbox","unread-count"],"raw":"{{base_url}}/inbox/unread-count"}}},{"name":"Mark one text read","request":{"description":"","header":[],"method":"POST","url":{"host":["{{base_url}}"],"path":["inbox",":message_id","read"],"raw":"{{base_url}}/inbox/:message_id/read","variable":[{"key":"message_id","value":""}]}}},{"name":"Mark every text read","request":{"description":"","header":[],"method":"POST","url":{"host":["{{base_url}}"],"path":["inbox","read-all"],"raw":"{{base_url}}/inbox/read-all"}}}],"name":"inbox"},{"item":[{"name":"List pending scheduled broadcasts","request":{"description":"Pending broadcast rows only. Practice reminders and campaign steps are not listed.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["scheduled"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""}],"raw":"{{base_url}}/scheduled"}}},{"name":"Cancel a scheduled broadcast","request":{"description":"","header":[],"method":"DELETE","url":{"host":["{{base_url}}"],"path":["scheduled",":scheduled_id"],"raw":"{{base_url}}/scheduled/:scheduled_id","variable":[{"key":"scheduled_id","value":""}]}}}],"name":"scheduled"},{"item":[{"name":"List drip campaigns","request":{"description":"Campaigns are created in the dashboard. The API can list, pause, resume and cancel them.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["campaigns"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""}],"raw":"{{base_url}}/campaigns"}}},{"name":"Get a drip campaign","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["campaigns",":campaign_id"],"raw":"{{base_url}}/campaigns/:campaign_id","variable":[{"key":"campaign_id","value":""}]}}},{"name":"Pause a campaign","request":{"description":"","header":[],"method":"POST","url":{"host":["{{base_url}}"],"path":["campaigns",":campaign_id","pause"],"raw":"{{base_url}}/campaigns/:campaign_id/pause","variable":[{"key":"campaign_id","value":""}]}}},{"name":"Resume a campaign","request":{"description":"","header":[],"method":"POST","url":{"host":["{{base_url}}"],"path":["campaigns",":campaign_id","resume"],"raw":"{{base_url}}/campaigns/:campaign_id/resume","variable":[{"key":"campaign_id","value":""}]}}},{"name":"Cancel a campaign","request":{"description":"","header":[],"method":"POST","url":{"host":["{{base_url}}"],"path":["campaigns",":campaign_id","cancel"],"raw":"{{base_url}}/campaigns/:campaign_id/cancel","variable":[{"key":"campaign_id","value":""}]}}}],"name":"campaigns"},{"item":[{"name":"List active message templates","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["templates"],"raw":"{{base_url}}/templates"}}},{"name":"Create a message template","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"name\": \"Rainout\",\n  \"body\": \"Practice is cancelled today because of weather.\"\n}"},"description":"Reusing the name of a deleted template brings that template back.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["templates"],"raw":"{{base_url}}/templates"}}},{"name":"One template","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["templates",":template_id"],"raw":"{{base_url}}/templates/:template_id","variable":[{"key":"template_id","value":""}]}}},{"name":"Change a template","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"body\": \"Practice is cancelled today because of weather.\"\n}"},"description":"","header":[{"key":"Content-Type","value":"application/json"}],"method":"PATCH","url":{"host":["{{base_url}}"],"path":["templates",":template_id"],"raw":"{{base_url}}/templates/:template_id","variable":[{"key":"template_id","value":""}]}}},{"name":"Delete a template","request":{"description":"","header":[],"method":"DELETE","url":{"host":["{{base_url}}"],"path":["templates",":template_id"],"raw":"{{base_url}}/templates/:template_id","variable":[{"key":"template_id","value":""}]}}}],"name":"templates"},{"item":[{"name":"List custom fields","request":{"description":"","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["custom-fields"],"raw":"{{base_url}}/custom-fields"}}},{"name":"Create a custom field","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"label\": \"Jersey number\"\n}"},"description":"","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["custom-fields"],"raw":"{{base_url}}/custom-fields"}}},{"name":"Rename a field or make it private","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"label\": \"Jersey number\"\n}"},"description":"","header":[{"key":"Content-Type","value":"application/json"}],"method":"PATCH","url":{"host":["{{base_url}}"],"path":["custom-fields",":field_id"],"raw":"{{base_url}}/custom-fields/:field_id","variable":[{"key":"field_id","value":""}]}}},{"name":"Delete a field and every member's value for it","request":{"description":"Private fields can only be deleted in the dashboard.","header":[],"method":"DELETE","url":{"host":["{{base_url}}"],"path":["custom-fields",":field_id"],"raw":"{{base_url}}/custom-fields/:field_id","variable":[{"key":"field_id","value":""}]}}}],"name":"custom-fields"},{"item":[{"name":"List your members who texted STOP","request":{"description":"Only this team's own members, with the number and email you already hold for them.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["opt-outs"],"query":[{"description":"Page size","disabled":true,"key":"limit","value":""},{"description":"Items to skip","disabled":true,"key":"offset","value":""}],"raw":"{{base_url}}/opt-outs"}}},{"name":"Record an opt-out (one-way)","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"phone\": \"(906) 555-0142\"\n}"},"description":"Opts out every non-staff roster entry with that number and keeps it opted out for good. The member gets no text. Works on any plan. There is no API call that removes an opt-out: only the member can, by texting START.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["opt-outs"],"raw":"{{base_url}}/opt-outs"}}},{"name":"Record up to 500 opt-outs","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"items\": [\n    {\n      \"phone\": \"(906) 555-0142\"\n    }\n  ]\n}"},"description":"Items fail on their own (status error, with the same codes as POST /opt-outs, including staff_member_protected and not_found) without stopping the rest. Works on any plan.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["opt-outs","bulk"],"raw":"{{base_url}}/opt-outs/bulk"}}}],"name":"opt-outs"},{"item":[{"name":"Check up to 100 numbers against your roster and opt-outs","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"phones\": [\n    \"(906) 555-0142\",\n    \"(906) 555-0143\"\n  ]\n}"},"description":"Read-only. No carrier lookup.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["recipients","validate"],"raw":"{{base_url}}/recipients/validate"}}}],"name":"recipients"},{"item":[{"name":"List webhooks","request":{"description":"Works on any plan, so an integration can still find and delete its webhooks after a downgrade (no plan_required).","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["webhooks"],"raw":"{{base_url}}/webhooks"}}},{"name":"Subscribe a URL to events (REST hook)","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"url\": \"https://example.com/rallytext-webhook\",\n  \"events\": [\n    \"message.received\"\n  ]\n}"},"description":"Webhooks added with a key are deleted when that key is revoked.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["webhooks"],"raw":"{{base_url}}/webhooks"}}},{"name":"Delete a webhook","request":{"description":"Works on any plan, so an integration can unsubscribe after a downgrade (no plan_required or card_required). A key whose creator is blocked is still refused (sender_blocked).","header":[],"method":"DELETE","url":{"host":["{{base_url}}"],"path":["webhooks",":webhook_id"],"raw":"{{base_url}}/webhooks/:webhook_id","variable":[{"key":"webhook_id","value":""}]}}}],"name":"webhooks"}],"variable":[{"key":"base_url","value":"https://rallytext.app/api/v1"},{"key":"api_key","value":"rt_live_your_key_here"}]}
