Build on Uganda’s tender data

A JSON API over every notice we publish, the taxonomies behind the filters, and the member endpoints our own apps use. Version 1.0.0, described in OpenAPI 3.1.

Base URL

https://www.tenderboard.buildal.net/api/v1

Authentication

Send Authorization: Bearer <token>. Open endpoints work without one; gated tender fields need a token whose account has unlocked the notice.

Rate limits

60 requests a minute without a token, 300 with one. Amounts are UGX integers; timestamps are UTC in ISO 8601.

Tenders

GET/tenders

List tenders

Open notices by default. Gated fields are absent unless the caller is entitled to them.

q
Full-text search across title, reference and buyer
sector
Sector slug
district
District slug
region
Region slug
entity
Buyer slug
category
supplies, services, works or consultancy
notice_type
Notice type slug
closing
today, week or month
status
open (default), closed or all
sort
closing, newest or value
per_page
1 to 100, default 20
page
Page number
GET/tenders/{slug}

Read one tender

The full notice. `access.locked` is true when the caller has not unlocked it; the gated fields are then simply not in the payload.

slug *
The tender slug
GET/sectors

List sectors

With live open counts.

GET/districts

List districts

All 136 districts with their region and open counts.

GET/entities

List buyers

Procuring entities with open counts.

GET/plans

List plans

Live prices in UGX. Never cache these client-side for longer than a day.

GET/openapi.json

This document

The machine-readable contract.

Awards

GET/awards

List contract awards

Best Evaluated Bidder notices: who won, for how much. Free, like the pages.

entity
Buyer slug
provider
Winning supplier slug
per_page
1 to 100, default 20
GET/awards/{slug}

Read one award

The full notice, including every losing bid and why it was dropped.

slug *
The award slug

Auth

POST/auth/token

Issue a device token

Trades an email and password for a personal access token. Five attempts a minute.

DELETE/auth/tokenToken required

Revoke the calling token

Signs this one device out; other devices keep working.

Me

GET/meToken required

The signed-in member

Identity plus subscription state and unlocks left.

GET/me/watchlistToken required

The team watchlist

Open items first, then closed, both by deadline.

POST/me/watchlist/{tender}Token required

Watch a tender

Idempotent. Needs the me:write ability.

tender *
Tender id
DELETE/me/watchlist/{tender}Token required

Stop watching a tender

Idempotent. Needs the me:write ability.

tender *
Tender id
GET/me/alertsToken required

The team alerts

Saved searches with their delivery channels.

GET/me/unlocksToken required

What the team has unlocked

Newest first.

A first request

curl -s "https://www.tenderboard.buildal.net/api/v1/tenders?sector=construction&closing=week" \
  -H "Accept: application/json"