MirrorMingo Exam API (1.0.0)

Download OpenAPI specification:

MirrorMingo Developer Support: developers@mirrormingo.com URL: https://developers.mirrormingo.com License: Proprietary

Verified African exam content & timed mock-exam engine.

The MirrorMingo Exam API is the public, developer-facing surface for MirrorMingo's verified exam-prep platform. It exposes:

  • A registry of supported exams (JAMB, WAEC, NECO, IELTS, SAT, and more), each with official section specs, scoring rubrics and verified source links.
  • A library of real, never-fabricated past-question papers, grouped by year.
  • A timed mock-exam engine: open a paper, page through questions, submit answers, and receive scored feedback.

All content is curriculum-grounded and verified against official exam-board sources. This API never returns AI-fabricated questions.

Authentication

Every request must include a MirrorMingo API key as a bearer token:

Authorization: Bearer mirrormingo_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Create and manage keys from the Developer dashboard. Keys are shown only once at creation time — store them securely and never embed them in client-side code.

Versioning

The API is versioned in the path (/v1). Breaking changes ship under a new major version; additive changes (new fields, new endpoints) may appear within v1 without notice, so clients should ignore unknown fields.

Rate limits

Requests are rate limited per API key. The current allowance is returned on every response via the RateLimit-* headers. On exhaustion the API responds with 429 Too Many Requests and a Retry-After header.

Exams

Discover supported exams and their official specifications.

List supported exams

Returns the catalog of exams MirrorMingo supports, optionally filtered by country. Each entry carries enough metadata to render a picker.

Authorizations:
apiKey
query Parameters
country
string

Full country name to prioritise locally relevant exams (e.g. Nigeria).

country_code
string = 2 characters

ISO 3166-1 alpha-2 country code (e.g. NG).

Responses

Response samples

Content type
application/json
{
  • "exams": [
    ]
}

Get exam overview

Full specification for one exam — sections, timing, question types and scoring.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

Responses

Response samples

Content type
application/json
{
  • "exam_key": "string",
  • "name": "string",
  • "category": "string",
  • "country": "string",
  • "duration_min": 0,
  • "sections": [
    ],
  • "scoring": { }
}

Get verified exam resources

Official exam-board sites and verified past-question sources for the exam.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

Responses

Response samples

Content type
application/json
{}

Get a recommended study path

A suggested week-by-week study path for the exam.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

Responses

Response samples

Content type
application/json
{
  • "exam_key": "string",
  • "study_weeks": 0,
  • "study_hours_total": 0,
  • "study_path": [
    ]
}

Mock Exams

Open verified past-question papers and run timed attempts.

List available past-question papers

Lists the verified past-question papers available for an exam, grouped by year. Use a paper_id from this response to open a mock attempt.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

Responses

Response samples

Content type
application/json
{
  • "exam_key": "string",
  • "total_papers": 0,
  • "years": [
    ]
}

Open a paper into a timed attempt

Opens a verified paper into a new timed mock-exam attempt and returns the first page of questions. The returned attempt_id is used to page through questions and to submit answers.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

Request Body schema: application/json
required
paper_id
required
string [ 6 .. 160 ] characters

A paper_id from the mock-exam catalog.

question_offset
integer >= 0
Default: 0
question_limit
integer [ 1 .. 20 ]
Default: 9

Responses

Request samples

Content type
application/json
{
  • "paper_id": "string",
  • "question_offset": 0,
  • "question_limit": 9
}

Response samples

Content type
application/json
{
  • "attempt_id": "string",
  • "paper_id": "string",
  • "question_count": 0,
  • "questions": [
    ]
}

Load a page of questions

Loads one page of questions for a paper, for paging through long papers.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

Request Body schema: application/json
required
paper_id
required
string [ 6 .. 160 ] characters
question_offset
integer >= 0
Default: 0
question_limit
integer [ 1 .. 20 ]
Default: 9

Responses

Request samples

Content type
application/json
{
  • "paper_id": "string",
  • "question_offset": 0,
  • "question_limit": 9
}

Response samples

Content type
application/json
{
  • "questions": [
    ],
  • "total": 0
}

Submit a mock attempt

Submits learner answers for an attempt and returns scored feedback.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

Request Body schema: application/json
required
attempt_id
required
string [ 6 .. 160 ] characters
required
object

Map of question number (as string) to chosen option letter.

status
string
Default: "submitted"
Enum: "submitted" "expired" "abandoned"

Responses

Request samples

Content type
application/json
{
  • "attempt_id": "string",
  • "answers": {
    },
  • "status": "submitted"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "feedback": { }
}

List past attempts

Lists prior mock-exam attempts for the authenticated key, newest first.

Authorizations:
apiKey
path Parameters
exam_key
required
string non-empty

The exam identifier (e.g. jamb, waec, ielts).

query Parameters
limit
integer [ 1 .. 50 ]
Default: 10
offset
integer >= 0
Default: 0

Responses

Response samples

Content type
application/json
{
  • "attempts": [
    ],
  • "total": 0
}