Admissions follow-up over iMessage with a hosted AI agent
ZeroSettle lets a bootcamp, trade school or private school have a hosted AI agent (Beta) text each prospective student who submits a request-info form with text consent, then answer questions on tuition, financing and start dates from the school's own business context. Counselors read every thread live in the ZeroSettle console. On the $49-a-month Pro plan, 5 new contacts a day per number covers about 150 inquiries a month, and each text the agent sends uses one AI credit.
Key takeaways
- What it is: ZeroSettle is an iMessage API: a real phone number on real iMessage, running on Apple hardware we operate for you, that your code texts customers from and hears back on through a bearer token and signed webhooks. Its hosted AI agent (Beta) can run the conversations with no server.
- Who it fits: admissions teams whose inquiries arrive through a request-info form with a box for text consent.
- Price: Pro is $49/month for one number with 1,000 AI credits a month. Growth, for several numbers working as one, is from $599/mo with 5,000.
- Main limit: 5 new contacts a day per number on Pro. Each inquiry counts once, when the opener reaches the student; the rest of that conversation never counts again.
- What it does not do: there is no SMS fallback, so applicants without iMessage can't be reached, and counselors cannot type into a thread the agent manages.
Who uses iMessage for admissions follow-up?
iMessage admissions follow-up suits schools whose prospects ask what the program costs, how to pay for it and when it starts before they will talk to anyone. Prospects request info from several programs at once, admissions emails pile up, and counselors can't call every inquiry.
- Coding bootcamps fielding questions about part-time schedules, financing and the next cohort.
- Trade schools with rolling start dates and prerequisites to explain.
- Private K-12 schools, where a parent fills in the form, so the agent texts that parent.
- Graduate admissions teams answering deadline and funding questions.
It is not for schools that buy student lists or whose applicants are mostly on Android; see when ZeroSettle is not a fit.
How iMessage for admissions follow-up works, step by step
One API call per inquiry starts it: the request-info form triggers POST /api/imessage/agent/start, and ZeroSettle's hosted AI agent runs the conversation.
- A student submits the form and ticks a box agreeing to texts about their inquiry. Your CRM stores that consent.
- Your CRM calls
agent/startwith the student's mobile number astoand first name asname. The opener goes out at once, so the handler holds forms that arrive between 9 PM and 8 AM in the student's time zone. - The agent sends the school's
first_message: 1–3 texts, exactly as written, that name the school and end on a question. Because it is sent as written, it can't include the student's name; the agent knows the name from then on. - The agent answers each reply in up to three texts, only from the
business_context: tuition, financing, start dates, prerequisites and published outcomes. - Its
goalisdemo_booked, as for an AI SDR texting demo requests, withlinkat the page where students book an info session or class visit. That link stays out of the first message, because an iPhone shows a link from an unknown sender as plain text until they reply or save the number (why first-message links aren't tappable). - If the student goes quiet, the default trigger sends one follow-up the morning after the last message, at a moment between 9 and 11 AM in the agent's
timezone(Eastern by default). - Counselors, invited to the console as teammates, read every thread live. When a student wants a person, the agent gives the counselor's direct number from the business context.
Example conversation: admissions follow-up
In this admissions thread the opener says who is texting and asks one question, and the visit link arrives after the student has replied, so it is tappable.
- Tue 12:14 PM
- School: Hi! This is Northgate Code Academy's automated admissions assistant. Thanks for requesting program info.
- School: Are you looking at the full-time or part-time software engineering program?
- Student: part time, I work days
- School: Got it, Andre. Part-time runs 9 months, evenings Tue/Thu plus Saturday mornings. The next cohort starts Jan 12, with financing from $250/mo.
- School: Want to sit in on a free class? Pick a night: https://northgate.example.com/visit
- Student: booked thursday
Setup: a form handler that calls agent/start
Setup is a business context, the agent settings, and a form handler that calls agent/start. No webhook receiver is needed: on a line group Managed by AI Agent, the agent answers inbound texts instead of your webhook. Field names follow the AI agent section of the ZeroSettle docs.
1. Write the business context
The agent answers only from this text, which can run to 40,000 characters, so the full program sheet and financing terms fit. Write the "never" list as carefully as the facts.
You are the admissions assistant for Northgate Code Academy, texting people
who requested program info and agreed to texts.
Part-time software engineering: 9 months, Tue/Thu evenings plus Saturday
mornings. Next cohort Jan 12. Financing from $250/mo.
Full-time, tuition, prerequisites: [your program sheet]
Outcomes: [figures from your published outcomes report, with its date]
Never promise admission, a job, a salary or loan approval.
For their own application, financial aid eligibility, visas or anything
not written here, give Dana's direct number, (312) 555-0142.
2. Turn on the agent
In the console's Messaging tab, or with PUT /api/imessage/agent, set managed_by to zerosettle, paste the context, use the example's two opening texts as first_message, set goal to demo_booked with link at the visit page, and set timezone to where most applicants live. The default trigger, one follow-up the morning after the last message, needs no change.
3. Start a thread from the form handler
The handler checks consent and the student's local time, calls agent/start, and handles three refusals: the new-contact limit, no AI credits left, and a student who texted STOP. retry_later and alert_admissions stand in for your own job queue and alerting.
# request_info.py: call on_request_info() from your form handler or CRM job
import os
from datetime import datetime
from zoneinfo import ZoneInfo
import requests
BASE = "https://portal.zerosettle.io"
TOKEN = os.environ["ZEROSETTLE_TOKEN"]
def on_request_info(lead: dict) -> None:
if not lead.get("text_consent"): # no box ticked, no text
return
local = datetime.now(ZoneInfo(lead.get("timezone") or "America/New_York"))
if not 8 <= local.hour < 21: # 9 PM to 8 AM where the student lives
return retry_later(lead, at_local_hour=8) # runs on_request_info() again
r = requests.post(f"{BASE}/api/imessage/agent/start",
headers={"Authorization": f"Bearer {TOKEN}"},
json={"to": lead["mobile"], "name": lead["first_name"]},
timeout=180)
if r.ok:
return # {"ok": true, "status": "started", ...}
err = r.json().get("error") or {} # a failed send may carry no error object
code = err.get("code")
if code == "new_contact_limit": # Pro: 5 a day per number
retry_later(lead, seconds=err["retry_after_s"])
elif code == "ai_credits_exhausted":
alert_admissions(f"Out of AI credits: {err['buy_url']}")
elif code != "recipient_opted_out": # texted STOP: never retry
alert_admissions(err.get("message") or r.text)
Limits and consent for admissions follow-up
Each inquiry counts once against ZeroSettle's new-contact limit, when the opener reaches the student; the rest of the conversation never counts again. AI credits, one per agent text, are the second budget.
| Limit | Pro | Growth |
|---|---|---|
| New inquiries per day, per number (3 AM to 3 AM Eastern) | 5 | 50 |
| New inquiries per rolling 15 minutes, per number | — | 3 |
| Inquiries a month at the daily cap, per number | About 150 | About 1,500 |
| Unanswered texts to one student | 2, then 403 awaiting_reply; the agent too | 2, then 403 awaiting_reply; the agent too |
| AI credits included, per account | 1,000 a month | 5,000 a month |
A student who texts the school's number first, as in text-to-apply hiring, is never a new contact.
The limit math for an inquiry season
- Credits: a two-text opener uses 2, a follow-up 1, each answer up to 3. At Pro's ceiling of about 150 inquiries a month, openers use 300 and follow-ups up to 150, leaving about 550 of the 1,000 included for answers, so a chatty season may need a pack. At zero, the agent goes quiet and
agent/startreturns402 ai_credits_exhausted. - After an open house where 45 attendees tick the text box, one Pro number starts 5 threads a day. The count resets at 3 AM Eastern and the handler waits for 8 AM in the student's time zone, so the last of the 45 goes out on the ninth day. Growth's 3 or more numbers each open 3 threads per 15 minutes, so the same 45 go out in a little over an hour.
- On every plan, opener texts sent within 5 minutes of each other count as one unanswered message and the follow-up as the second, so keep one follow-up trigger; a second follow-up would be refused with
403 awaiting_reply.
Consent, STOP and what the agent may promise
Text only students who ticked a text-consent box, keep that record, and never text purchased student lists. The iMessage TCPA consent guide covers the rules in more detail. This isn't legal advice; check your obligations with counsel.
- STOP: a text with the word STOP in it, or a clear request like “take me off your list”, opts the student out, and ZeroSettle blocks every number on the account from reaching them, counselor lines included.
- Quiet hours: the docs rule out promotional texts before 8 am or after 9 pm in the recipient's time zone, and the handler enforces that for openers. Triggers use one time zone per line group (America/New_York by default), so a 9 AM Eastern follow-up reaches a California applicant at 6 AM; hence
timezonein the agent settings. - Promises: the business context should forbid guarantees about admission, jobs or salaries, because agent texts go out in the school's name. For vocational schools, the FTC's guides cover misrepresenting graduates' job prospects and salaries (16 CFR 254.4); for schools in federal student aid programs, Department of Education rules cover misstating costs, financial aid and employability (34 CFR 668.73, 668.74).
- AI disclosure: ZeroSettle's terms require disclosing AI interaction unless it is evident from context. The example's opener says so up front, and the agent says it is the school's automated assistant if sincerely asked.
When ZeroSettle is not a fit for admissions follow-up
ZeroSettle is the wrong tool for admissions follow-up when consent is missing, counselors must type in the agent's thread, more than 5 inquiries a day must go out from one Pro number, or applicants mostly aren't on iMessage.
- Purchased student lists: never. ZeroSettle's terms require opt-in, and lines used for unsolicited messaging are suspended.
- Counselors replying in the same thread: agent-managed lines refuse console and API sends (
403 managed_by_zerosettle). Run counselors on a separate number in its own Managed by API line group; a student who texts the counselor's number first isn't a new contact there. - More than 5 inquiries a day on one Pro number: the 6th waits for the next day's allowance. Growth allows 50 a day per number, across 3 or more numbers.
- International applicants mostly on Android or WhatsApp: there is no SMS fallback, so keep email for them. ZeroSettle checks every first message with Apple, and a number that isn't on iMessage is refused with
422 not_on_imessage, with nothing sent and no new-contact slot used.
How much does iMessage for admissions follow-up cost?
Admissions follow-up on ZeroSettle costs $49 a month on Pro, or from $599/mo on Growth for several numbers working as one, plus any AI credits beyond the plan's allowance.
| Option | Price | AI credits |
|---|---|---|
| Pro | $49/month, one number, no setup fee, unlimited messages with people who message you first | 1,000 a month |
| Growth | From $599/mo, 3+ numbers | 5,000 a month |
| AI credit pack | $50 or $200, paid once | 1,000 or 5,000; never expire |
Monthly credits don't carry over. Both plans have a 30-day money-back guarantee on the subscription, not on packs. Get a Pro number, book a Growth demo, see ZeroSettle pricing, or browse the iMessage use-case hub.
Frequently asked questions
Can the agent quote our job placement rate?
Only if the exact figure, with its source and date, is in your business context. Add a rule that it never turns a past rate into a promise about the student's own job.
What does the agent do with a question the business context doesn't cover?
It does not guess: the agent never invents facts your business context doesn't give. Name a hand-off in the context, such as a counselor's direct number, and the agent points the student there.
Can the agent text a parent and a student together?
No. ZeroSettle conversations are one to one, and group chats are not supported yet. A parent and a student who each consent get separate threads, and each counts as a new contact.
Will students see the school's name?
Once you set a name and photo in the console, ZeroSettle shares them with the first message of every conversation, so a student can see "Maybe: Northgate Code Academy" before saving the number. The exact display depends on the student's iPhone and contact settings.
Sources
- ZeroSettle iMessage API docs: "AI agent", "Links in a first message" and "Errors, limits, and compliance". Checked October 12, 2026.
- ZeroSettle iMessage API Terms of Service, sections 4 (AI disclosure) and 13 (opt-in and prohibited uses). Last modified September 28, 2026.
- 16 CFR 254.4, Misrepresentation of facilities, services, qualifications of staff, status, and employment prospects for students after training, FTC Guides for Private Vocational and Distance Education Schools (Legal Information Institute). Checked October 8, 2026.
- 34 CFR 668.73, Nature of financial charges or financial assistance, Department of Education misrepresentation rules (Legal Information Institute). Checked October 8, 2026.
- 34 CFR 668.74, Employability of graduates, Department of Education misrepresentation rules (Legal Information Institute). Checked October 8, 2026.