Skip to main content
HomeDevelopers

Developer Portal

Dashboard

API Documentation

Everything you need to integrate the Tenders-SA API into your applications.

Quick Start

1

Get an API Key

Navigate to the API Keys page and create a new key. Professional and Enterprise plans include API access.

2

Set Your Authorization Header

Pass your key as a Bearer token in the Authorization header.

3

Make Your First Request

Try fetching the latest tenders. See code examples below.

SDKs & Libraries

Official SDKs are available for TypeScript, Python, and CLI β€” providing idiomatic access to all API endpoints with built-in error handling, retry logic, and pagination.

Visit the SDKs & Libraries page for installation guides, usage examples, and community-maintained clients.

Authentication

All API requests require authentication via a Bearer token in the Authorization header.

curl
curl -X GET "https://api.tenders-sa.org/v1/tenders" \
  -H "Authorization: Bearer tsa_prod_YOUR_API_KEY" \
  -H "Content-Type: application/json"

Rate Limits

Professional: 500/day, 15K/month
Enterprise: 10K/day, 300K/month

Base URL

https://api.tenders-sa.org/v1

Endpoints

Click on any endpoint to view its parameters and details.

GET
/v1/tenders
List tenders with filtering, sorting, and pagination
GET
/v1/tenders/{id}
Get detailed information about a specific tender
GET
/v1/tenders/search
AI-powered semantic search across all tenders
GET
/v1/awards
List awarded tenders with supplier and value information
GET
/v1/companies/{registrationNumber}
Company intelligence profile by registration number
GET
/v1/categories
Retrieve all available tender categories and subcategories

Code Examples

curl
curl -X GET "https://api.tenders-sa.org/v1/tenders" \
  -H "Authorization: Bearer tsa_prod_YOUR_API_KEY" \
  -H "Content-Type: application/json"

Response Format

All API responses follow a consistent envelope structure:

json
{
  "success": true,
  "data": { ... },
  "meta": {
    "requestId": "uuid",
    "timestamp": "2026-01-15T10:30:00Z",
    "page": 1,
    "limit": 20,
    "totalCount": 142
  }
}

Success

success: true

Errors

success: false, error: "message"

Pagination

Included in meta when applicable

Error Codes

StatusCodeDescription
401UNAUTHORIZEDMissing or invalid API key
403FORBIDDENInsufficient permissions for this resource
429RATE_LIMITEDRate limit exceeded. Check Retry-After header.
409KEY_LIMIT_REACHEDMaximum number of active keys reached for your plan
500INTERNAL_ERRORServer error. Contact support if persistent.