<!-- https://vatio.ai/guides/ai-agent-for-education · Updated: 2026-10-11 -->

> Build an AI agent that answers programs, fees and admission requirements, checks application status and books campus visits, without promising admission.

# AI agent for schools, universities and admissions

An AI agent for a school or university answers prospective students, and the parents who write for them, on WhatsApp, Instagram and your admissions site: programs, fees, admission requirements and scholarships, the status of an application, and a campus visit or advisor call. It never promises admission or a scholarship. With Vatio you describe that agent in one `vatio.yml` file and it runs on your own WhatsApp number, Instagram account and website.

## What the agent handles

Admissions teams answer the same questions every intake:

- **Programs.** What a program covers, how long it lasts, which campus.
- **Fees and scholarships.** Tuition for a given intake, and what each scholarship asks for.
- **Requirements and deadlines.** Documents, test scores, interviews, closing dates.
- **Application status.** The stage and any missing documents.
- **Visits and calls.** A guided campus visit or a call with an advisor.
- **Everything else goes to a person.** Exceptions, appeals, disability support, payment plans.

A typical exchange:

> **Parent:** hello, I'm writing for my daughter. she wants to study nursing, what does she need?
>
> **Agent:** Happy to help. For Nursing she needs her school-leaving certificate, her national exam score and an interview. Applications for the March 2027 intake close on January 15. Would a campus visit help?
>
> **Parent:** yes, if there's one on a saturday
>
> **Agent:** There are guided visits this Saturday at 10:00 and on the 18th at 11:30. Which suits you, and what is your daughter's name?

Behind those replies were a knowledge lookup, a call to `find_visit_slots` and a `remember` note about Nursing for March 2027, all visible in the inbox.

## Before writing anything: five questions for the institution

1. **Who writes in, and about what?** Prospective students and parents about programs, fees and deadlines; applicants about their status.
2. **What must it never say?** Promises of admission or scholarships, chances based on scores, fees for an intake that is not priced yet.
3. **When does a person take over?** Exceptions, appeals, disability support, payment plans.
4. **Which systems does it read from?** The admissions system's API, the calendar where visits are booked, the fee table, the scholarship rules.
5. **What may an application number reveal?** Decide what someone holding it and the applicant's ID may learn. The stage and missing documents usually; never the decision.

The answers become the instructions, the `handoff` conditions, the tools and the knowledge, in that order.

## The `vatio.yml`

```yaml
workspace: austral-institute
agent:
  name: Austral Institute Admissions
  personality: Clear, patient and encouraging. Never pushy.
  instructions: |
    You answer prospective students of Austral Institute, and the parents
    who write for them, about programs, fees, requirements, scholarships
    and deadlines.

    Programs, fees, requirements, scholarships and dates: answer only from
    knowledge_lookup, and always say which intake a fee is for. If it does
    not answer, say so and offer to pass the question to an advisor.

    Visits and advisor calls: ask which program interests them, call
    find_visit_slots and offer at most three options. Ask for a name, an
    email and, except on WhatsApp, a phone number, then call book_visit.
    Only say it is booked when book_visit returned it.

    Application status: ask for the application number and the applicant's
    ID number, then call application_status. Give the stage and any missing
    documents. If a decision is ready, say it was sent by email and is in
    the applicant portal; never state the decision yourself.

    Parents: help them the same way. Save the name of whoever is writing
    with identify_contact. Use remember to save the program and intake a
    family is considering, and recall when they come back.

    Rules you never break:
    - Never promise or predict admission, a place or a scholarship, and
      never estimate someone's chances from their grades or scores. The
      admissions and scholarships committees decide.
    - Never give a fee, date or requirement that knowledge did not return.
    - Never share anything about an application without both its number
      and the applicant's ID number.
  tools: [knowledge_lookup, find_visit_slots, book_visit, application_status, identify_contact, remember, recall]
  knowledge: [admissions]
  links:
    apply: https://austral-institute.example/apply
    portal: https://austral-institute.example/applicants
    program:
      url: https://austral-institute.example/programs/{program}
      when: The person wants the full page of a program.
      values:
        program: [nursing, business, software-engineering, graphic-design]
  handoff:
    after_turns: 14
    when:
      - the person asks for an exception to a requirement or a deadline
      - the person disagrees with an admission or scholarship decision
      - questions about disability support or a health condition
      - the person asks about a payment plan or financial hardship
```

A few choices worth explaining:

- **The agent never delivers a decision.** A decision deserves wording your admissions team chose, not a chat on a shared family phone. The endpoint below does not even return it, so the rule does not rest on the prompt alone.
- **Fees only from knowledge, always with the intake.** A fee quoted for the wrong year is a promise someone will hold you to.
- **`after_turns: 14`** is higher than a booking agent's because admissions conversations run long. Past fourteen messages, a person takes over.
- **Office hours go on the inbox's Business page**, not in `vatio.yml`: here Monday to Thursday 9:00–18:00 and Friday 9:00–17:00, Santiago time, set by the admissions team. Inside them a handoff quiets the agent; outside them it keeps helping and says the team will reply.

## Tools: application status and visits

A tool is one HTTP request to your backend, described in YAML. Store the address and key as secrets:

```bash
vatio secrets set AUSTRAL_API https://api.austral-institute.example
vatio secrets set AUSTRAL_API_KEY sk_live_...
```

`tools/application_status.yml`:

```yaml
description: Get the stage of an application and any missing documents.
when_to_use: Someone asks about an application and gave its number and the applicant's ID number.
parameters:
  type: object
  properties:
    application_number: { type: string, description: "e.g. AP-2027-04812" }
    national_id: { type: string, description: "The applicant's ID number, not the parent's" }
  required: [application_number, national_id]
access: public
request:
  method: POST
  base_url: "$env.AUSTRAL_API"
  path: /applications/status
  requires: [params.application_number, params.national_id]
  headers:
    Authorization: "Bearer $env.AUSTRAL_API_KEY"
  body:
    application_number: "$params.application_number"
    national_id: "$params.national_id"
respond:
  data:
    stage: "$.stage"
    missing_documents: "$.missing_documents"
```

`tools/book_visit.yml`:

```yaml
description: Book a campus visit or an advisor call in a free slot.
when_to_use: The person chose a slot from find_visit_slots and gave a name and a way to reach them.
parameters:
  type: object
  properties:
    slot_id: { type: string }
    student_name: { type: string }
    email: { type: string }
    phone: { type: string, description: "Instagram and web only. On WhatsApp the tool uses the contact's number" }
    program: { type: string, description: "e.g. nursing, business" }
  required: [slot_id, student_name, program]
access: public
request:
  method: POST
  base_url: "$env.AUSTRAL_API"
  path: /visits
  requires: [params.slot_id, params.student_name]
  headers:
    Authorization: "Bearer $env.AUSTRAL_API_KEY"
  body:
    slot_id: "$params.slot_id"
    student_name: "$params.student_name"
    email: "$params.email || $contact.email"
    phone: "$params.phone || $contact.phone_number"
    program: "$params.program"
respond:
  data:
    visit: "$.visit"
```

`find_visit_slots` is a `GET` with the kind of visit, the program and a date. `||` takes what the person typed, or what is already on their contact. On WhatsApp the number is already on the contact, so the agent asks for it only on Instagram and the website. For an advisor call, the advisor phones at the booked time; the agent only books it.

The status tool is where this agent's security lives. A WhatsApp or Instagram contact is anonymous until they [sign in](https://vatio.ai/docs/authentication/sessions#on-whatsapp), so `application_status` is public, and the number plus the ID is all that stands between a stranger and an application. **Your backend checks that the two match**, answers a mismatch exactly like a number that does not exist, and rate-limits attempts. It is a `POST` so the ID never sits in a URL. And whatever it returns is what anyone holding those two numbers learns, so it returns only the stage and missing documents.

The full application belongs behind your applicant portal's login, where the same agent can use a [private tool](https://vatio.ai/docs/authentication/tools) that reads `$auth.subject` instead of asking for numbers.

## Knowledge: programs, fees and scholarships

```bash
vatio kb create admissions
vatio kb write admissions programs programs.md
vatio kb write admissions fees-2027 fees-2027.md
vatio kb write admissions requirements requirements.md
vatio kb write admissions scholarships scholarships.md
```

An entry that says plainly who decides makes the "never promise" rule easy to follow:

```markdown
# Scholarships

## Academic excellence scholarship
For first-year students with an outstanding national exam score.
There is no separate form: the admission application counts.
The scholarships committee decides who receives it, and how much,
after admission results are published. Nobody can confirm it before then.

## Deadline
Scholarship applications for the March 2027 intake close on December 15, 2026.
```

Vatio does not read your website, so fees and requirements go into entries. When the next intake is priced, write `fees-2028` next to `fees-2027`, not over it.

## Parents, students and conversations that last months

Many conversations are started by a parent, and the application belongs to the student. The instructions handle both:

- **The parent is the contact.** `identify_contact` saves the name of whoever is writing, so the inbox shows the parent, not a student who never wrote.
- **The student's numbers open the application.** A parent with the application number and the student's ID gets the stage like anyone else. The rule is the same for everyone, which is what makes it safe.
- **Memory carries over.** People research a program months before applying. A WhatsApp conversation continues until the last message is eight hours old, then the next one starts fresh; with `remember` and `recall`, what was saved in March is still there in October, and supervisors read the same notes on the contact in the inbox.

## Try it before any applicant does

```bash
vatio push
vatio chat "Hi, what do I need to apply to Nursing?"
vatio chat "I got 720 on the national exam. Will I get in? And the scholarship?"
vatio chat --new "I'm her mother. Application AP-2027-04812, what's the status?"
vatio chat --new "How much is Business for the 2028 intake?"
vatio chat show
```

The second must neither promise nor estimate. The third has no ID, so the agent must ask for the student's and say nothing until it has it. The fourth asks for a fee knowledge does not have yet. Then add your phone as a test number on the shared WhatsApp preview and try it as a parent sending a voice note.

## Make it better every week

When the admissions team reads the inbox, they **flag** any wrong reply and write what should have happened: "Design's deadline moved to January 30". `vatio flags` turns those notes into a document your coding agent can fix from, each flag becomes an eval case, and the flag is marked fixed when live passes it. See [Improve your agent](/guides/improve-your-ai-agent).

## Go live

```bash
vatio publish
vatio tokens create --env live --label admissions --origin https://austral-institute.example
```

The token goes into the widget's script tag on your admissions site. Then connect your WhatsApp Business number and Instagram account on the inbox's **Channels** page, then switch WhatsApp's **Live** on. Instagram answers as soon as the account is connected. The agent never decides on its own to write first; deadline reminders go out on WhatsApp when your admissions system sends them through the [Messages API](https://vatio.ai/docs/api/messages).

Applications hold personal data, often of minors. Vatio shows conversations only behind a sign-in or a Vatio token, and what your local rules require of how you handle applicants' data is still yours to check.

## Frequently asked questions

### Can an AI agent answer admissions questions for a school or university?

Yes. Programs, fees, requirements, scholarships and deadlines go into knowledge entries you write, and the agent answers from them on WhatsApp, Instagram and your website. Vatio does not read your website, so whatever the agent should know has to be in an entry.

### Can applicants check their application status on WhatsApp?

Yes, with the application number and the applicant's ID number. A public tool sends both to your backend, which answers only when they match and returns the stage and any missing documents. The full application belongs behind your applicant portal's login.

### Will the agent promise admission or a scholarship?

Not if you write the rule. Tell it never to promise or predict admission or a scholarship and never to estimate chances from grades, and test exactly that with vatio chat before going live. Supervisors flag any reply that slips, and each flag becomes an eval case.

### Can parents talk to the agent on behalf of their children?

Yes. The agent helps them the same way, saves the parent's name as the contact, and asks for the student's application number and ID number to read an application. It can remember which program and intake the family is considering for the next conversation.

### Can the agent book campus visits and calls with an advisor?

Yes, through tools that call the API of the calendar or admissions system where you book them. The agent books the slot; for an advisor call, the advisor phones the student at that time. The agent itself makes no calls.
