Developers
Teacher Verification API
Programmatically verify any Nigerian teacher’s TRCN registration, certificate, and license status. Free public REST endpoint, no API key required.
Who this is for
The Teacher Verification API is for organisations that need to confirm a Nigerian teacher’s TRCN registration status programmatically. Typical consumers:
- Examination bodies (WAEC, NECO, JAMB) verifying invigilator and examiner credentials
- Schools and education employers running pre-hire HR checks
- Recruitment platforms validating teaching credentials at point of application
- Government agencies cross-referencing TRCN status against payroll, pension, or licensing data
For an interactive lookup that does not require any code, use the public Search the Register page.
Quick reference
Base URL
https://api.trcn.gov.ng
Endpoint
GET /teacher/verify-license
Authentication
None — public endpoint
Response format
JSON (UTF-8)
Cost
Free for reasonable use
Status
Quick start
The endpoint accepts a single query parameter, searchTerm, which can be a TRCN registration number, TID, NIN, email, or phone number.
curl "https://api.trcn.gov.ng/teacher/verify-license?searchTerm=TRCN%2FABJ%2F2024%2F123456"Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| searchTerm | string | Yes | Identifier to look up. Accepts:
|
Response
All responses use HTTP status 200 OK when the request itself is well-formed — including when no teacher matches the search term. Distinguish "no match" from "match" by reading the boolean found field, not the HTTP status code.
When a teacher is found
{
"found": true,
"name": "Adeyemi John Olumide",
"tId": "1234567",
"status": "Licensed",
"state": "Lagos",
"teacher": {
"name": "Adeyemi John Olumide",
"tId": "1234567",
"state": "Lagos",
"category": "Professional",
"photoUrl": "https://api.trcn.gov.ng/file/proxy/..."
},
"certificate": {
"status": "VERIFIED",
"regNo": "TRCN/ABJ/2024/123456",
"issueDate": "2024-01-15"
},
"license": {
"status": "VALID",
"issueDate": "2024-01-15",
"expiryDate": "2027-01-14",
"daysRemaining": 612
},
"verifiedAt": "2026-05-18T15:30:00.000Z"
}license.statusis one ofVALID,EXPIRED, orNOT_FOUND. Treat anything other thanVALIDas "not currently licensed".certificate.regNois the canonical TRCN registration number. Use it as the stable identifier in your records — TID, NIN, email, and phone are secondary search keys that can change.teacher.photoUrlmay be present but is not guaranteed; do not rely on it for identity confirmation in production flows.verifiedAtis the server timestamp when the lookup ran. Persist it alongside the result if you cache responses.
When no teacher matches
{
"found": false,
"verifiedAt": "2026-05-18T15:30:00.000Z"
}Error responses
400 Bad Request
Returned when the searchTerm parameter is missing, empty, or whitespace only. The error body is a NestJS-standard { "statusCode": 400, "message": "searchTerm query parameter is required" }.
5xx
Transient errors should be retried with exponential back-off (start at 1 second, max 3 retries). If the issue persists, check trcn.gov.ng/status for incident updates.
Code samples
JavaScript / TypeScript
const res = await fetch(
'https://api.trcn.gov.ng/teacher/verify-license?searchTerm=' + encodeURIComponent(searchTerm)
);
const data = await res.json();
if (data.found) {
console.log(data.teacher.name, '·', data.license.status);
} else {
console.log('No TRCN record for that search term');
}Python
import requests
resp = requests.get(
'https://api.trcn.gov.ng/teacher/verify-license',
params={'searchTerm': search_term},
timeout=10,
)
resp.raise_for_status()
data = resp.json()
if data['found']:
print(data['teacher']['name'], data['license']['status'])
else:
print('No TRCN record')Rate limits and fair use
The endpoint is rate-limited per source IP to protect availability for all consumers. Typical interactive use (one verification per user action) is well within the limit. For bulk verification volumes — periodic reconciliation against an entire staff register, for example — please contact us so we can provision a dedicated channel.
Caching is permitted and encouraged. License status changes infrequently; a 24-hour TTL is appropriate for most consumers. Always persist verifiedAt with any cached response so you can prove when the check was performed.
OpenAPI specification
The full endpoint contract is published as an OpenAPI 3.1 document. Use it to generate typed client libraries, drive contract tests, or import into Postman / Insomnia / Bruno.
For partner agencies (WAEC, NECO, JAMB, federal ministries, registered private sector employers) we offer a dedicated authenticated tier with audit logging, batch verification, and webhook callbacks for status changes.
Contact the integrations team