Back to Blog
WAEC past questions API

WAEC past questions API

Developers building WAEC/WASSCE preparation apps, CBT platforms, school examination software or EdTech products eventually face an important question: how do you get WAEC past questions into your application in a structured format that your software can actually use?

PDF past questions can be useful for students who simply want to read or print questions. They are much less convenient when you're building software.

Your application needs data it can understand.

It may need the question, options, correct answer, explanation, examination year, subject, passage, images and other information as individual fields.

This is where a WAEC past questions API becomes useful.

Instead of manually copying thousands of questions into your database, your application can request WASSCE question data programmatically and receive structured JSON that can be displayed, processed and incorporated into your own user experience.

Developers can use SdashAPI to work with structured WASSCE examination data alongside other supported examinations.

What is a WAEC past questions API?

A WAEC past questions API is an interface through which your application can request WASSCE question data.

Imagine you're developing an examination practice platform.

A student selects:

Examination: WASSCE
Subject: Biology
Year: 2023

Your application sends those requirements to the API.

The API returns questions matching the request.

Instead of receiving a PDF page, your application receives structured information that may look conceptually like this:

{
  "id": 57281,
  "question": "Which of the following is responsible for...",
  "option": {
    "a": "Option A",
    "b": "Option B",
    "c": "Option C",
    "d": "Option D"
  },
  "answer": "b",
  "solution": "The correct answer is B because...",
  "examtype": "WASSCE",
  "examyear": "2023",
  "image": null
}

Your application determines what happens next.

You could display it as a normal practice question, put it inside a timed examination, generate a mock test, create a revision session or use the information for learning analytics.

The API provides the data.

Your software provides the experience.

Why developers need structured WAEC questions

Consider what happens when you're building a serious WASSCE preparation platform.

You might need thousands of questions covering different subjects and years.

Every question potentially needs:

  • Question text
  • Answer options
  • Correct answer
  • Explanation
  • Examination year
  • Subject
  • Unique identifier
  • Passage
  • Image or diagram
  • Topic information
  • Difficulty information

If you obtain the questions as PDFs, your application cannot simply treat the PDF as a database.

Someone has to extract the questions.

Someone has to separate the options.

Someone has to identify the answers.

Someone has to connect passages to their questions.

Images must be handled separately.

The resulting information then has to be converted into a consistent structure.

Doing this for a few hundred questions is one thing.

Doing it across multiple WASSCE subjects and years becomes a separate data-engineering project.

A WAEC past questions API allows the development team to spend more time building the actual product.

WAEC and WASSCE terminology

There is an important distinction developers should understand.

WAEC is the West African Examinations Council, while WASSCE refers to the West African Senior School Certificate Examination.

This matters when designing your database and API requests.

Users commonly search for phrases such as:

WAEC past questions

while structured examination data may identify the examination as:

WASSCE

If your application supports multiple examinations, it is better to maintain consistent internal identifiers while still displaying terminology that students understand.

For example:

Display name: WAEC/WASSCE
Internal type: wassce

That prevents inconsistencies later.

WAEC is not only relevant to Nigeria

This is another important consideration when developing a WASSCE application.

WAEC operates across multiple West African countries, and examination requirements and question coverage can differ.

A developer building only for Nigerian students may not notice this immediately.

But suppose your platform eventually expands to Ghana.

You may now need to distinguish between questions relevant to different countries or examination contexts.

A scalable architecture could therefore support something similar to:

Exam: WASSCE
Country: Ghana
Subject: Mathematics
Year: 2024

rather than assuming every WAEC question belongs to one universal pool.

SdashAPI's current documentation includes country filtering for WASSCE and identifies supported country values for Nigeria, Ghana, Sierra Leone, Liberia and The Gambia.

Developers planning a regional product can check the currently available examination data through the SdashAPI Coverage Page.

How a WAEC past questions API fits into an application

A simple architecture could look like this:

Student
   ↓
Your CBT App
   ↓
Your Backend
   ↓
Question API
   ↓
Structured WASSCE Data
   ↓
Your Application

Suppose the student selects Mathematics.

Your application could request Mathematics questions.

If the student selects a particular year, you add the year filter.

If your product supports country-specific WASSCE data, the relevant country can also become part of the request.

Your frontend doesn't need to know how the entire question database is maintained.

It only needs a predictable response.

Example: Building a WAEC Biology practice session

Imagine you're creating a web application where students practise 30 Biology questions.

The student chooses:

WAEC/WASSCE

Biology

2023

30 Questions

Your backend requests the appropriate questions.

The response contains an array.

Conceptually:

{
  "status": "success",
  "data": [
    {
      "id": 101,
      "question": "Question one...",
      "option": {
        "a": "Option A",
        "b": "Option B",
        "c": "Option C",
        "d": "Option D"
      },
      "answer": "a"
    },
    {
      "id": 102,
      "question": "Question two...",
      "option": {
        "a": "Option A",
        "b": "Option B",
        "c": "Option C",
        "d": "Option D"
      },
      "answer": "c"
    }
  ]
}

Your application stores the session questions temporarily.

The student begins the test.

Your interface could display:

BIOLOGY

Question 7 of 30

[Question text]

A. ...
B. ...
C. ...
D. ...

Previous                 Next

Time Remaining: 21:43

Nothing about the API dictates how this page should look.

That remains your responsibility as the developer.

The question API should not become your entire application

This distinction matters.

Using a WAEC past questions API doesn't mean you're simply reselling an API.

Your application can still contain features such as:

  • Student accounts
  • Timed examinations
  • Practice mode
  • Mock examinations
  • Performance analytics
  • Topic recommendations
  • Bookmarks
  • Revision history
  • Leaderboards
  • Teacher dashboards
  • School accounts
  • Subscription systems
  • Offline sessions
  • AI tutoring
  • Weak-topic detection
  • Progress tracking

The API simply supplies one important component: examination data.

Your product determines what is done with that information.

Answers alone are not always enough

A basic CBT application can work with:

Question
Options
Correct Answer

But educational applications increasingly need more.

Suppose a student selects the wrong answer.

Showing:

Incorrect. Correct answer: C.

is useful for scoring, but it doesn't necessarily help the student understand the topic.

A better learning experience might show:

Correct answer: C.

followed by an explanation of the underlying concept.

That means developers should consider whether their WAEC question source includes explanations and solutions.

For a learning application, the difference between an answer database and an explanation database can become significant.

Passages need special handling

Some examination questions depend on passages.

Consider a comprehension section where questions 1–5 refer to the same passage.

Your data architecture should preserve that relationship.

A poor implementation might repeat the entire passage five times.

A better system might store:

{
  "passage": "Passage text...",
  "questions": [
    {},
    {},
    {},
    {},
    {}
  ]
}

or attach a passage identifier to each related question.

Whichever architecture you use, your application should know that those questions are connected.

This is one reason developers should inspect the structure of an API before integrating it deeply into their product.

Images and diagrams matter

Not every WASSCE question can be represented correctly with plain text.

Subjects such as:

  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Geography
  • Technical subjects

can contain diagrams, graphs, tables, illustrations or other visual information.

Suppose the original question says:

Study the diagram above and answer the question.

If your database contains only that sentence and the diagram is missing, the question is effectively unusable.

When evaluating a WAEC past questions API, developers should therefore ask:

Does the question contain an image field?

How are image URLs returned?

Are diagrams connected to the correct question?

What happens when no image exists?

A clean API might return:

{
  "question": "Study the diagram and identify X.",
  "image": "https://example.com/question-image.jpg"
}

and use:

"image": null

when the question doesn't require one.

Your frontend can then conditionally display the image.

Your application should support long questions

Another mistake is designing the CBT interface using only short dummy questions.

During development you might test with:

What is photosynthesis?

Then real examination data arrives containing a long passage or detailed scenario.

Suddenly the layout breaks.

Buttons move outside the screen.

The timer overlaps the question.

Options become difficult to read.

A real WAEC practice application should therefore be tested with:

  • Short questions
  • Long questions
  • Long options
  • Passages
  • Images
  • Mathematical expressions
  • Questions with four options
  • Questions with different content structures

Realistic testing matters.

Fetch only the data you need

Suppose your application needs 20 Chemistry questions.

You generally don't need to download every WASSCE question in your system before starting the test.

Request the appropriate batch.

For example, the logical request might contain:

exam = wassce
subject = chemistry
limit = 20

Your backend receives the questions and starts the examination session.

This is much more manageable than transferring an entire question database for every student session.

Use batching

Avoid making unnecessary requests.

If a student needs 40 questions, requesting one question forty times creates additional network overhead.

A better pattern is:

Request 40 questions
       ↓
Receive question array
       ↓
Start examination
       ↓
Navigate locally

Your application can then handle Next and Previous navigation without making another network request every time the student changes questions.

The exact batch limits depend on the API version and provider, so developers should check the current documentation before implementation.

Separate your API layer from your user interface

Avoid writing your entire application around one specific response object.

Instead of scattering API calls throughout your components, create a service layer.

For example:

async function getWassceQuestions({
  subject,
  year,
  country,
  limit
}) {
  // Request questions from your backend/API service.
}

Your interface can then call:

const questions = await getWassceQuestions({
  subject: "biology",
  year: 2023,
  country: "nigeria",
  limit: 30
});

This gives you cleaner code.

If your backend implementation changes later, you don't have to rewrite every examination screen.

Keep API credentials away from public frontend code

This is particularly important for web and mobile applications.

Avoid exposing production API credentials unnecessarily inside:

  • Public JavaScript
  • GitHub repositories
  • Mobile source code
  • Client-side environment files
  • Browser requests

A safer production architecture is often:

Student App
     ↓
Your Backend
     ↓
SdashAPI

Your backend authenticates the user, requests the necessary examination data and sends only the required response to the frontend.

That gives you more control over your credentials and usage.

Development should come before production spending

You shouldn't need to buy a huge question database just to find out whether your application architecture works.

During development, your priorities are different.

You need to determine whether you can:

  • Authenticate successfully
  • Request WASSCE questions
  • Parse the JSON
  • Display options correctly
  • Handle passages
  • Render images
  • Record answers
  • Calculate scores
  • Display explanations
  • Handle API errors

SdashAPI provides 2,000 free credits that developers can use while testing their integration.

Those 2,000 credits are useful because they allow you to develop against actual structured data instead of creating hundreds of dummy questions.

Your development flow can therefore be:

Create account
      ↓
Receive 2,000 free credits
      ↓
Generate development API key
      ↓
Build integration
      ↓
Test WASSCE questions
      ↓
Complete application
      ↓
Generate production API key
      ↓
Choose production plan

The point of the 2,000 free credits isn't to operate a large production platform indefinitely.

They're there to give you room to build and understand the API before committing your application to production.

Developers can begin from the SdashAPI Website.

Development and production keys should be separate

Once your application is ready for actual students, consider creating a new API key for production rather than continuing to use the same key you used throughout development.

For example:

Development

Local App
   ↓
Development API Key
   ↓
SdashAPI

and:

Production

Live Application
   ↓
Your Backend
   ↓
Production API Key
   ↓
SdashAPI

This makes access easier to manage.

If a development key is accidentally exposed, it can be revoked without necessarily disrupting your live application.

What happens after the free testing stage?

Once development is complete, you need to estimate actual usage.

Ask:

How many students will use the application?

How many questions will each student answer?

How often will they practise?

Will you cache permitted responses?

How many examinations will you support?

Are you launching publicly or with a small group?

Your answers should determine the plan you choose.

SdashAPI provides different options for different usage requirements. Developers can review the current plans and limits on the SdashAPI Pricing Page.

If you're launching gradually, a smaller or Pay As You Go arrangement may make more sense than immediately purchasing capacity intended for a much larger platform.

API access vs bulk WAEC question database

These are different requirements.

An API is suitable when your application requests data from an external service.

A bulk dataset is different.

With a bulk dataset, you may receive question data that you host and manage yourself under the relevant licensing terms.

For example:

API MODEL

Application
   ↓
API request
   ↓
Question provider
   ↓
Response

versus:

BULK DATA MODEL

Licensed Dataset
   ↓
Your Database
   ↓
Your Backend
   ↓
Your Application

Neither model is universally better.

If you're developing a normal online examination app, API access may be considerably easier.

If you're building something that requires extensive offline operation or your own permanent database infrastructure, bulk licensing may be worth discussing.

For requirements that go beyond standard API access, use the SdashAPI Contact Page.

Think beyond Nigeria when designing your database

If your product may eventually serve West Africa, don't hard-code everything around Nigeria.

Instead of:

{
  "exam": "waec"
}

consider an architecture capable of supporting:

{
  "exam": "wassce",
  "country": "ghana"
}

or:

{
  "exam": "wassce",
  "country": "sierra-leone"
}

even if you initially launch in one country.

That decision can save significant restructuring later.

The SdashAPI Coverage Page can be used to check currently available examination, country, subject and year coverage before you advertise a particular combination to your users.

Don't assume every year contains the same number of questions

Historical examination data isn't always perfectly symmetrical.

You might have:

Biology 2021 → X questions
Biology 2022 → Y questions
Biology 2023 → Z questions

Your application should handle this gracefully.

Don't write code that assumes every request must return exactly 50 questions.

If only 37 matching questions are available, decide how your application should respond.

You might:

  • Reduce the session size
  • Notify the student
  • Include another year
  • Ask the student to select a different year

Good software anticipates imperfect data conditions.

Add proper loading and error states

Your application shouldn't freeze while waiting for questions.

Display something meaningful:

Preparing your WASSCE Biology practice...

If the request fails:

We couldn't load the questions. Check your connection and try again.

If the requested combination doesn't exist:

We couldn't find questions matching this subject and year.

If authentication fails:

The examination service is temporarily unavailable.

The exact wording depends on your product, but the important point is that raw server errors should not become the student's user experience.

Store question IDs

Every question should have a reliable identifier.

This becomes useful for:

Reporting

A student can report Question #57281.

Bookmarks

The student can save a question.

Analytics

You can determine which questions students frequently fail.

Revision

You can create a “Questions I Got Wrong” feature.

Duplicate control

You can reduce unnecessary repetition.

Support

A developer can identify the exact problematic record instead of trying to locate it manually.

This small implementation detail becomes extremely valuable as your platform grows.

Question quality still needs feedback

No historical examination database should be treated as something that can never contain an issue.

Questions can have formatting problems.

An option can be incomplete.

An image can fail.

An explanation can need correction.

A mature educational platform should therefore have a reporting mechanism.

For example:

Was something wrong with this question?

[ Report Question ]

Then send the question ID and issue category.

SdashAPI users who encounter data or integration issues can use the SdashAPI Community or reach the team through the SdashAPI Contact Page.

WAEC past questions API for school CBT systems

The same infrastructure can also be useful for schools.

A school might want teachers to create mock examinations using historical WASSCE-style material.

The workflow could be:

Teacher Dashboard
      ↓
Select Subject
      ↓
Select Year(s)
      ↓
Choose Questions
      ↓
Create Mock Exam
      ↓
Students Write CBT
      ↓
Automatic Marking
      ↓
Results Dashboard

The school doesn't necessarily need to manually type every question into its CBT software.

The API becomes a data source while the school's software handles students, classes, examinations and results.

WAEC past questions API for AI learning applications

Structured question data can also be useful when building AI-assisted educational products.

For example, your application could identify the topic of questions a student repeatedly misses and use that information to recommend revision material.

A possible flow:

Student answers question incorrectly
        ↓
Application records topic
        ↓
Several mistakes occur in same topic
        ↓
System detects weakness
        ↓
Student receives targeted practice

Rich metadata such as topic, subtopic and difficulty can make features like this easier to implement.

This is why the structure and depth of the question data matter just as much as the raw number of questions.

Choosing a WAEC past questions API

Before integrating any provider into a production application, check:

Coverage

Does it contain the subjects, countries and years you need?

Structure

Is the JSON predictable?

Answers

Are correct answers included?

Explanations

Does your learning product require them?

Passages

Are comprehension questions properly connected?

Images

Are diagrams and illustrations supported?

Filtering

Can you request specific subjects and years?

Authentication

Can credentials be protected properly?

Error handling

Are response codes documented?

Usage limits

Can your application operate within the available quota?

Licensing

Does your intended commercial use fit the terms?

Support

Can you report technical or question-data problems?

These questions are more important than simply asking which provider advertises the largest number.

Is SdashAPI an official WAEC API?

No.

SdashAPI is an independent examination-data API for developers. It should not be presented as an official API operated by the West African Examinations Council.

If your application uses SdashAPI data, your branding should make that distinction clear.

Likewise, developers should avoid designing an independent preparation application in a way that could make students believe it is an official WAEC product when it is not.

A sensible way to start

If you're currently building a WAEC or WASSCE application, don't begin by trying to solve every possible problem.

Start small.

1. Create an account

2. Generate a development API key

3. Use the 2,000 free credits for testing

4. Fetch one WASSCE question

5. Display it correctly

6. Add answer options

7. Add scoring

8. Fetch multiple questions

9. Add subject filtering

10. Add year filtering

11. Add country filtering if required

12. Test passages and images

13. Add proper error handling

14. Complete your CBT interface

15. Create a production API key

16. Select an appropriate production plan

17. Launch

That gives you a working foundation before you begin adding more complicated features.

You can start through the SdashAPI Website, check available examination data through SdashAPI Coverage, compare production options on the SdashAPI Pricing Page, discuss implementation questions in the SdashAPI Developer Community, or contact the team through SdashAPI Support.

A WAEC past questions API ultimately solves one specific but substantial problem: turning examination questions into structured data that software can work with.

Once that layer is handled, you can spend more of your development time building the things students actually interact with: the CBT interface, revision experience, analytics, recommendations, performance tracking and other features that make your EdTech product useful.

Avatar

How can we help?

We reply immediately

Hello! 👋 How can we help you today?