API, webhooks and MCP

Everything you see in the app, you can call.

API keys with the permissions of the context, signed webhooks for every academy event, documentation with real examples and an MCP server that hands courses, register and calendar to AI assistants.

  • API keys per academy or per person, shown only once
  • Webhooks with chosen events, HMAC signature, retries and logs
  • Same API as the app: courses, attendance, students, calendar
  • MCP server for Claude, ChatGPT and Cursor
Settings API keysAccademia LeonardoMarco Bianchi
Settings
Manage the account, keys and integrations of the academy.
Profile
Account
Billing
API keys
Webhooks
MCP
Appearance
Notifications
API keys
Programmatic access for Accademia Leonardo.
Keys that authenticate requests to the Aladia API (header apikey) with the permissions of this context. New key
Default key(default)
No expiration
••••••••••••a9F2
CRM integration
No expiration
••••••••••••aZq
Student register · sync
Expires in 312d · 3 ago 2027
••••••••••••7kQ1
Make · automations
No expiration
••••••••••••mX4c
New API key
The key acts with the permissions of this context — treat it like a password.
Name
CRM integration
Expiration
No expiration
Generate key
Your new API key
Copy it now and store it somewhere safe — from the list it will show masked.
ald_sk_9Kp2mQ4xR7tW1nB8vC3yH6jL0sD5fG2aZq
Copy key
Copied
Done
Features

One API, the same as the app

The student register, the CRM, the back office and AI assistants talk to Aladia the way the interface does: no shortcuts, no extra data.

Webhooks with chosen events

One endpoint, the events you need: course.published, course.completed, course.installment.paid, organization.member.added. Every delivery is signed; if the endpoint answers badly we retry five times with growing delays and you keep the log.

Settings WebhooksAccademia LeonardoMarco Bianchi
Settings
Manage the account, keys and integrations of the academy.
Profile
Account
Billing
API keys
Webhooks
MCP
Appearance
Notifications
Webhooks
Real-time event delivery for Accademia Leonardo.
Endpoints that receive an HTTP POST when the events you subscribe to happen — publications, enrollments, payments. New webhook
CRM sync
https://crm.accademialeonardo.it/hooks/aladia
5 events98%Enabled
Student register
https://registro.accademialeonardo.it/aladia
3 events100%Enabled
Edit
Deliveries
Disable
Delete
Deliveries of CRM sync
https://crm.accademialeonardo.it/hooks/aladia
Subscribed events
course.published course.completed course.installment.paid organization.member.added member.invited
AllSuccessFailed
500course.installment.paid24 set, 15:41
185.94.12.7 · Internal Server Error
200course.installment.paid24 set, 15:41
185.94.12.7 · attempt 2
Retry 2/5 in 4 s
200course.published24 set, 15:32
185.94.12.7
200organization.member.added24 set, 15:20
185.94.12.7
200member.invited24 set, 15:19
185.94.12.7
200course.completed23 set, 18:02
185.94.12.7
HMAC signature verified with the webhook secret

Readable payload, verifiable signature

Every event carries the id, the resource and the data: course title, cycle, subjects, who published. The HMAC signature header lets you discard anything that does not come from Aladia.

Settings WebhooksAccademia LeonardoMarco Bianchi
Settings
Manage the account, keys and integrations of the academy.
Profile
Account
Billing
API keys
Webhooks
MCP
Appearance
Notifications
Webhooks
Real-time event delivery for Accademia Leonardo.
CRM sync
https://crm.accademialeonardo.it/hooks/aladia
5 events98%Enabled
Student register
https://registro.accademialeonardo.it/aladia
3 events100%Enabled
Delivery
course.published · CRM sync
Request
POSThttps://crm.accademialeonardo.it/hooks/aladia
Content-Type:application/json
X-Aladia-Event:course.published
X-Aladia-Delivery:dlv_01JAB3X7K2Q9M4
X-Aladia-Signature:sha256=4f9a1c…e21b
Response
…
200 OK · 184 ms
Every delivery carries the event, the resource and the data; the header signature lets you verify it.
Body
{
"id": "evt_01JAB3X7K2Q9",
"event": "course.published",
"createdAt": "2026-09-24T15:32:10.412Z",
"resource": { "type": "course", "id": "66f2a1c4e9b3d8a7c5f01234" },
"data": {
"title": "Liceo Scientifico · 1° anno",
"type": "live",
"organization": { "id": "66e0b7…", "name": "Accademia Leonardo" },
"cycle": { "start": "2026-09-07", "end": "2027-06-05" },
"subjects": ["Matematica", "Fisica", "Italiano", "Latino", "Storia"],
"publishedBy": { "id": "66e1c9…", "name": "Marco Bianchi" }
}
}
RedeliverDone

Documentation with real examples

docs.aladia.io describes every endpoint with parameters, a request sample in cURL, Node and Python and a real response: GET /v2/courses/:courseId/attendance-registry returns lectures and attendance rows with status, source and minutes in the room.

docs.aladia.io/api/courses/attendance-registry
ALADIA API documentation Search the docs…⌘Kapp.aladia.io
Introduction
Authentication
Courses
Attendance register
Students
Calendar
Webhooks
MCP
Courses Attendance register
Attendance register of a course
GET/v2/courses/{courseId}/attendance-registry
The course lectures (done and upcoming) and the attendance rows: status, source, minutes in the room and recording coverage.
API key in the apikey header · permissions of the context
Parameters
courseIdstringpathCourse id
cycleIdstringqueryLimit to one cycle
profileIdstringqueryOne student only
lectureIdstringqueryOne lecture only
RequestcURLNodePython
curl "https://api.aladia.io/v2/courses/66f2a1c4…/attendance-registry" \
-G --data-urlencode "lectureId=66f9d2b1…" \
-H "apikey: ald_sk_••••••••aZq"
Response200application/json
{
"course": { "id": "66f2a1c4…", "title": "Liceo Scientifico · 1° anno" },
"cycle": { "start": "2026-09-07", "end": "2027-06-05" },
"lectures": [{ "id": "66f9d2b1…", "title": "Matematica · Equazioni",
"date": "2026-09-24T08:00:00Z", "status": "done" }],
"rows": [
{ "name": "Giulia Esposito", "status": "present", "source": "live",
"liveMinutes": 58, "liveCoverage": 0.97 },
{ "name": "Marco Gallo", "status": "late", "source": "live",
"liveMinutes": 46, "lateMinutes": 12 },
{ "name": "Andrea Ricci", "status": "remote", "source": "recording",
"recordingCoverage": 0.86 },
{ "name": "Alice Barbieri", "status": "absent", "source": "live" }
]
}

Academy MCP server

Enable the server, pick the scopes (courses, students and attendance, calendar, chat) and connect the clients: Claude, ChatGPT, Cursor. Each client uses the API key of whoever connects it and its actions land in the Activity log.

Settings MCPAccademia LeonardoMarco Bianchi
Settings
Manage the account, keys and integrations of the academy.
Profile
Account
Billing
API keys
Webhooks
MCP
Appearance
Notifications
MCP
Model Context Protocol server for Accademia Leonardo.
Academy MCP server
Any MCP-compatible assistant (Claude, ChatGPT, Cursor) can read and act on the academy data with the permissions of whoever connects.
Disabled
Enabled
Server URL
https://mcp.aladia.io/accademia-leonardo
Scopes 48 tools exposed
Courses and cyclescourses:read
Students and attendance registerstudents:read
Calendar: create and move lessonscalendar:write
Chat: writes in channelschat:write
Paymentspayments:read
Connected clients
A\
Claude
connected on 12 set 2026 · last used 2 min ago
Revoke
G
ChatGPT
connected on 18 set 2026 · last used 40 min ago
Revoke
›_
Cursor
connected on 24 set 2026 · last used just now
Connected now
Client configuration
"mcpServers": {
  "aladia": {
    "url": "https://mcp.aladia.io/accademia-leonardo",
    "headers": { "apikey": "ald_sk_••••••••aZq" }
  }
}
The API key decides what the assistant can do; every action lands in the Activity log.

An external assistant working in the academy

"List the at-risk students of the Liceo Scientifico and create a catch-up lesson on Friday at 3 pm": the assistant calls list_students_at_risk, then create_lecture, and shows you who it invited. With the permissions of whoever asks, not one more.

A\Claude
New chat
Recents
At-risk students · Scientifico
Draft letter to parents
Physics lesson plan October
Accademia LeonardoAladia · Accademia LeonardoMCP · 48 tools
At-risk students · Scientifico Aladia · Accademia LeonardoMarco Bianchi
List the at-risk students of the Liceo Scientifico and create a catch-up lesson on Friday at 3 pm.
A\
aladia · list_students_at_risk{ "course": "Liceo Scientifico · 1° anno", "threshold": 75 }
Completed
Running
Andrea RicciAndrea Ricci68%below the 75% threshold
Chiara ColomboChiara Colombo71%below the 75% threshold
Alice BarbieriAlice Barbieri74%below the 75% threshold
aladia · create_lecture{ "title": "Recupero Matematica", "start": "2026-10-02T15:00", "teacher": "Davide Ricci", "invite": 3 }
Completed
Running
Recupero Matematica · Liceo Scientifico · 1° annoven 2 ott · 15:00 – 16:00 · Davide Ricci · Andrea Ricci, Chiara Colombo, Alice Barbierilec_66fa1d…

Three students of Liceo Scientifico · 1° anno are below the 75% attendance threshold: Andrea Ricci (68%), Chiara Colombo (71%) and Alice Barbieri (74%).

I created the lesson “Recupero Matematica” on Friday 2 October at 15:00 with Davide Ricci and invited the three students. You will find it in the academy calendar.

Open in Aladia Recorded in the Activity log as Marco Bianchi
Message Claude…
Aladia · Accademia Leonardo
Actions on the academy use Marco Bianchi’s permissions.
How it works

How you work

  1. 1

    Create the key

    Settings › API keys: name, expiration, key copied only once. It acts with the permissions of the context (academy or person).

  2. 2

    Subscribe to events

    Settings › Webhooks: URL, events, instant test. The secret signs every delivery; the log shows outcome and attempts.

  3. 3

    Connect the assistants

    Settings › MCP: enable the server, pick the scopes, paste the configuration into Claude, ChatGPT or Cursor.

What’s inside

Keys per context
The same page serves the profile and the academy: the session decides. No scopes to invent: roles apply.
apikey header
One key, one header. No OAuth to configure for internal integrations.
Event catalogue
Events grouped by category (courses, organization, calendar, payments, chat, social) with search.
Retries and logs
Five attempts with exponential backoff; per-webhook log with success/failed filter and response code.
OpenAPI
Specification generated from the gateway: the same DTOs as the app, always aligned.
Developer permission
Keys and webhooks require the Developer role (owner and admin inherit it); actions are in the Activity log.

Frequently asked questions

Build your Academy. Find your Academy.

Join 194,000+ learners and hundreds of teachers and organizations already on Aladia.