Student Emails
Provision and manage student email accounts via the REST API.
All student email endpoints require a live API key (nxa_live_...). Test keys are rejected with HTTP 403.
Base URL: https://nexa-ed.com
Create a student email account
Provision a single student email account on your configured email tier.
Warning
Live key required. Test keys (nxa_test_...) cannot deliver real emails and will be rejected
with 403 Live API key required for email delivery.
Headers
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | nxa_live_... |
Content-Type | Yes | application/json |
Body
| Field | Type | Required | Description |
|---|---|---|---|
studentId | string | Yes | Your internal student identifier |
firstName | string | Yes | Student's first name |
lastName | string | Yes | Student's last name |
tier | string | Yes | "tier-1-nexa" | "tier-2-stalwart" | "tier-3-google" |
domain | string | Yes | Email domain, e.g. "loretto.edu.ng" |
email | string | No | Override auto-generated address |
gradeLevel | string | No | e.g. "JSS2", "SS3" |
recoveryEmail | string | No | Parent/guardian recovery address |
Response 200 OK
Example (cURL)
Example (Python)
Bulk provision accounts
Provision up to 500 student accounts in a single request. Processing happens asynchronously — poll /api/student-emails/status with the returned jobId.
Headers
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | nxa_live_... or nxa_test_... |
Content-Type | Yes | application/json |
Body
Response 202 Accepted
Poll the jobId using Get job status every 3–5 seconds until status is "completed" or "failed".
Get job status
Check the progress of a bulk provisioning job.
Headers
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | Your tenant API key |
Response 200 OK
status values: "pending" | "processing" | "completed" | "failed"
List accounts
List student email accounts for your tenant.
Headers
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | Your tenant API key |
Query params
| Param | Type | Default | Description |
|---|---|---|---|
status | string | — | Filter: "active" | "suspended" | "deleted" |
limit | number | 100 | Max results (1–500) |
Response 200 OK
Suspend an account
Disable a student's email login without deleting their mailbox.
Headers
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | Your tenant API key |
Content-Type | Yes | application/json |
Body
Response 200 OK
Restore an account
Re-enable a suspended student account.
Headers
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | Your tenant API key |
Content-Type | Yes | application/json |
Body
Response 200 OK
Reset password
Generate a new temporary password for a student account.
Headers
| Header | Required | Value |
|---|---|---|
x-api-key | Yes | Your tenant API key |
Content-Type | Yes | application/json |
Body
Response 200 OK
Share the temporary password securely with the student. They will be prompted to change it on first login.
Error responses
| Status | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid x-api-key |
403 | live-key-required | Test key used on an endpoint that requires a live key |
403 | live-key-not-activated | Live key exists but domain not yet verified |
404 | not-found | Email account does not exist |
409 | email-exists | An account with that address already exists |
422 | validation-error | Missing required fields |
429 | rate-limited | Too many requests — see Retry-After header |
What's next
- SDK — Student Emails — use the typed SDK instead of raw HTTP
- Domain setup — verify your domain to unlock the live key
- React components — drop-in provisioning UI