What are API keys for?
An API key lets another system talk to Skoolyte for your school. Common uses:
- Your school website: the admission form sends inquiries straight into Admissions, and the website shows your announcements and events.
- An LMS, transport or attendance system: it reads your students and classes so you don't type them in twice.
- A bank or payment portal: it looks up a student's unpaid fees by admission number.
Each key can only do what you tick when you create it. A key can never change fees, take payments, or see CNIC, address, phone or medical details.
How do I create a key?
Go to Settings → API Keys and press Create key.
- Give it a name you will recognise later, such as "School website".
- Tick only what this key needs (see the permissions list below).
- If you have more than one campus, you can limit it to one Campus. It will then only see that campus's students, classes and fees.
- Optionally set an Expires date.
Press Create key. The full key (starting sk_live_) is shown once. Copy it and send it to your developer in a safe way. Skoolyte cannot show it again. If it is lost, revoke it and create a new one.
Only school admins can create or revoke keys.
Which permissions can a key have?
- Send admission inquiries: add inquiries to Admissions. They show with the source website-api.
- Open classes: see which classes are currently open for admission (set under Admissions → Cycles).
- News & events: read announcements addressed to everyone and calendar events marked public. Staff-only announcements are never shared.
- Students & classes: read students' names, father's name, admission and roll numbers, gender, date of birth, class and status, plus your classes and sections.
- Fee dues: read a student's unpaid fees and total due by admission number. It cannot record payments.
How do I stop a key working?
On Settings → API Keys, press Revoke next to the key. It stops working immediately and cannot be switched back on. Create a new key if you need one. Revoke a key if a developer leaves, a website is replaced, or you think the key has been seen by someone else.
Each key shows when it was last used. A key that has never been used, or not for months, is safe to revoke.
Is it safe? Who can see what?
- A key only sees your school, and only one campus if you limited it.
- Keys are secret, like a password. They belong on your website's server, never in web page code that visitors can open.
- Skoolyte stores only a fingerprint of the key, not the key itself.
- Creating or revoking a key, and every inquiry sent through a key, is recorded in Settings → Audit Logs.
For developers: how do I call the API?
Base URL: https://api.skoolyte.com/v1/integrations
Send the key with every request, in either header:
X-Api-Key: sk_live_…
Authorization: Bearer sk_live_…
All responses are JSON. Call the API from a server, not from browser JavaScript: the key would be visible to anyone, and browsers will block the cross-site request anyway.
The full interactive reference (every field, try-it-out) is at https://api.skoolyte.com/v1/integrations/docs. It asks for a key before it shows anything.
For developers: which endpoints are there?
| Method and path | Permission | What it does |
|---|---|---|
POST /admissions/inquiries | Send admission inquiries | Create an inquiry. Required: fullName, parentName, parentPhone. Optional: desiredClassId, dateOfBirth (YYYY-MM-DD), gender (MALE/FEMALE/OTHER), parentEmail, notes, desiredGroup. |
GET /admissions/open-classes | Open classes | Classes open for admission now, with id to use as desiredClassId. |
GET /announcements | News & events | Announcements for everyone, newest first. |
GET /events?from=&to= | News & events | Public calendar events. Default range: today to 90 days ahead. |
GET /classes | Students & classes | Classes with section and grade. |
GET /students?page=&limit=&classId=&status=&updatedSince= | Students & classes | Active students, 50 per page (up to 200). status=ALL includes withdrawn and graduated students. updatedSince returns only students changed after that time. |
GET /students/{admissionNo} | Students & classes | One student. |
GET /fees/{admissionNo} | Fee dues | Unpaid fees and totalDue. |
Lists come back as { "data": [...] }. The student list also has page, limit and total.
For developers: example — website admission form
A PHP form handler that forwards the form to Skoolyte. Keep the key in a server setting, not in the page:
$payload = json_encode([
'fullName' => $_POST['child_name'],
'parentName' => $_POST['parent_name'],
'parentPhone' => $_POST['phone'],
'notes' => $_POST['message'] ?? null,
]);
$ch = curl_init('https://api.skoolyte.com/v1/integrations/admissions/inquiries');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'X-Api-Key: ' . getenv('SKOOLYTE_API_KEY')],
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// 201 = received; 400 = check the fields (the message says which)
The same in Node.js:
const res = await fetch('https://api.skoolyte.com/v1/integrations/announcements', {
headers: { 'X-Api-Key': process.env.SKOOLYTE_API_KEY },
});
const { data } = await res.json();
For developers: what do the error codes mean?
- 400: the request is not valid, for example a missing field, a bad phone number, or a class that is not open for admission. The
messagesays what is wrong. - 401: the key is missing, wrong, expired or revoked.
- 403: the key exists but does not have the permission this endpoint needs. Ask the school to create a key with it.
- 404: no student with that admission number (or not in the key's campus).
- 429: too many requests (about 100 a minute; inquiries 30 a minute). Wait a minute and retry. Cache announcements and events rather than fetching them on every page view.
Last checked against the app: 2026-10-13