Back to Blog

Ghana WASSCE Question Bank for Developers

Building a WASSCE app for Ghana has two very different parts.

The first is the visible product: your CBT screen, timer, student accounts, mock exams and results.

The second is less visible but often harder: where do all the Ghana WASSCE questions actually come from, and how do you keep them structured?

A Ghana WASSCE question bank for developers solves that second problem. Instead of extracting questions from PDFs or manually maintaining thousands of records, developers can work with structured examination data.

SdashAPI now exposes Ghana-specific WASSCE data through its API, including country-specific endpoints for discovering available exams, subjects and years. SdashAPI

Start with Ghana, not a generic WAEC database

A common database design is:

Question
Subject
Year
Answer

For a West African WASSCE product, that's incomplete.

Country should be part of the structure:

Country
   ↓
Examination
   ↓
Subject
   ↓
Year
   ↓
Questions

For Ghana:

GH
 ↓
WASSCE
 ↓
Mathematics
 ↓
2024
 ↓
Questions

This matters because WAEC operates across multiple member countries. WAEC Ghana's current 2026 material also shows an active WASSCE examination cycle in Ghana, while the Council's March 2026 annual meeting brought together its five member countries: Ghana, Nigeria, Sierra Leone, Liberia and The Gambia. WAEC Ghana

So country should not be something you try to add to your database six months after launching.

SdashAPI already has a Ghana country code

The current SdashAPI countries endpoint is:

GET https://sdashapi.com/api/countries

Its documented response includes:

{
  "code": "GH",
  "name": "Ghana",
  "exams": ["waec", "wassce"]
}

SdashAPI currently documents five WASSCE countries: Nigeria (NG), Ghana (GH), Sierra Leone (SL), Liberia (LR) and The Gambia (GM). SdashAPI

That means a developer can treat Ghana as an actual data dimension rather than relying on text labels inside individual questions.

Find out what Ghana data is available

Here's something more useful than hard-coding a giant subject list.

SdashAPI exposes country-level discovery endpoints:

GET /api/countries/GH/exams
GET /api/countries/GH/subjects
GET /api/countries/GH/years
``` :chatgpt-content-reference{index="3"}


Your application can therefore ask SdashAPI what is available before showing options to the student.

For example:

```javascript
const response = await fetch(
  "https://sdashapi.com/api/countries/GH/subjects"
);

const result = await response.json();

You can use that result to populate:

Choose a Subject

Mathematics
English Language
Biology
Chemistry
Physics
...

The important difference is that the list comes from your actual data source.

Fetch real Ghana WASSCE questions

SdashAPI documents country filtering on its V4 question endpoint.

A Ghana Mathematics request is:

curl -X GET \
  "https://sdashapi.com/api/v4/q?type=wassce&country=GH&subject=mathematics" \
  -H "AccessToken: YOUR_ACCESS_TOKEN"
``` :chatgpt-content-reference{index="4"}


Breaking that down:

```text
type=wassce

selects WASSCE.

country=GH

restricts the request to Ghana.

subject=mathematics

selects Mathematics.

And:

AccessToken: YOUR_ACCESS_TOKEN

authenticates the request.

This is the actual documented SdashAPI request pattern, rather than a hypothetical endpoint.

What comes back?

At the basic question level, SdashAPI structures question records around fields such as:

{
  "id": 4821,
  "question": "Question text...",
  "section": null,
  "option": {
    "a": "Option A",
    "b": "Option B",
    "c": "Option C",
    "d": "Option D"
  },
  "answer": "a",
  "solution": "Worked solution...",
  "image": null,
  "examtype": "WASSCE",
  "examyear": "2024"
}

The public API documentation describes id, question text, sections, options, answers, solutions, images, examination type and examination year as part of the question structure. GitHub

That structure is much easier to use in software than this:

wassce-maths-past-questions-2024.pdf

A PDF is designed primarily for reading.

JSON is designed to be processed.

One question bank, several products

This is where developers can get more creative.

The same Ghana WASSCE data doesn't have to power only a "Past Questions" page.

You could build a traditional practice app:

WASSCE Ghana
     ↓
Mathematics
     ↓
2024
     ↓
Practice

Or a timed mock:

WASSCE Mathematics Mock

40 Questions
40 Minutes

[ Start ]

Or revision:

Questions You Got Wrong

12 questions

[ Practice Again ]

Or performance tracking:

MATHEMATICS

Algebra             72%
Geometry            61%
Statistics          83%
Probability         54%

Or an AI tutor that uses real examination records as grounding material rather than asking the model to invent every question.

SdashAPI itself now positions its structured metadata and explanations for RAG and AI-tutor applications in addition to conventional CBT software. SdashAPI

You don't necessarily need to copy the whole database

There are two approaches.

API-first architecture:

Your App
   ↓
Your Backend
   ↓
SdashAPI

Your backend requests the questions it needs.

This is suitable for many online applications because SdashAPI remains responsible for maintaining the underlying question infrastructure.

The other option is:

Own-database architecture:

Licensed Dataset
      ↓
Your PostgreSQL / MySQL / Firebase
      ↓
Your Backend
      ↓
Your App

This may make more sense when you're building something with substantial offline requirements or need to operate primarily from your own infrastructure.

SdashAPI currently advertises bulk dataset licensing in JSON, CSV and SQL formats for teams needing the complete dataset offline. SdashAPI

Those are different use cases. Don't build an application that downloads an API question bank permanently without first checking what your licence permits.

How much Ghana WASSCE data is there?

This is another place where developers should avoid making assumptions.

SdashAPI's public coverage page currently reports 368,868+ questions across its overall database, 26 subjects overall and an overall range of 1988–2026. For WASSCE specifically, it lists 23 subjects, a 1988–2026 overall range, images, and explanations on approximately 74% of its WASSCE data. Ghana is listed as an available WASSCE country. SdashAPI

That does not mean every Ghana subject contains questions for every year from 1988 through 2026.

That's why these endpoints matter:

GET /api/countries/GH/subjects
GET /api/countries/GH/years

Use live coverage information instead of advertising combinations you haven't checked.

A better Ghana WASSCE app would do this

When a student opens your application:

Country
Ghana

Then:

Examination
WASSCE

Then retrieve the supported subjects.

The student chooses:

Mathematics

Then retrieve relevant years.

They select:

2024

Only then do you prepare the question session.

That produces a cleaner user experience than presenting hundreds of buttons and returning "No Questions Found" after the student has already made several selections.

Keep your AccessToken away from the frontend

Don't do this in a public website:

const token = "sdash_my_real_production_key";

Anyone inspecting your application may be able to retrieve it.

A better structure is:

Browser / Mobile App
        ↓
Your Backend
        ↓
SdashAPI

Your backend stores:

SDASH_API_KEY=...

and makes the authenticated SdashAPI request.

The SdashAPI documentation requires the AccessToken header for authenticated question requests. SdashAPI

What happens when something goes wrong?

Your application should understand the API response instead of simply displaying "Error."

SdashAPI currently documents:

200  Request succeeded
400  Bad request
401  Missing/invalid AccessToken
403  Account suspended
404  No questions matched
405  Wrong HTTP method
429  Quota exceeded
``` :chatgpt-content-reference{index="10"}


So if Ghana Mathematics for a particular selection returns no matching questions, your student doesn't need to see:

```text
ERROR 404

Show:

No questions are currently available for this selection. Try another year.

Good API integration is partly about what happens when the API doesn't return what you expected.

Test the idea before paying for a large setup

SdashAPI's current Sandbox plan provides 2,000 free API credits for development and testing, with V1 access to UTME and WASSCE data. The current public pricing page also separates Sandbox, Pay As You Go and larger production plans. SdashAPI

So if you're thinking:

"I want to build a WASSCE app for Ghana, but I'm not even sure students will use it."

Don't begin by purchasing infrastructure for 100,000 students.

Build one good flow.

Ghana
  ↓
WASSCE
  ↓
One Subject
  ↓
Practice
  ↓
Results

Get that working.

Test it.

Then add mock exams, explanations, analytics, weak-topic practice and other subjects.

The SdashAPI documentation contains the live endpoints, coverage shows the current dataset scope, and pricing shows the available production options.

A Ghana WASSCE Question Bank for Developers becomes useful when it disappears into the background of the product. Students shouldn't care that your questions came through JSON or an API. They should simply open your app, choose Ghana WASSCE, pick what they want to practise and get a fast, useful learning experience backed by properly structured examination data.

Avatar

How can we help?

We reply immediately

Hello! 👋 How can we help you today?