Skip to main content
HomeDevelopers

Developer Portal

Dashboard
Back to Tutorials
BeginnerTendersSearchAI AnalysisFiltering

Find Matching Tenders by Category and Province

Learn how to search for active tenders in your industry and region, filter by closing date, and retrieve AI-powered analysis to assess fit.

4 stepsBeginner

Prerequisites

  • A valid Tenders-SA API key
  • curl or a programming language of your choice
1

Search for tenders in your category

Use the /v1/tenders endpoint to search for active tenders. Filter by category and province to narrow results to your industry and region.
curl
curl -H "Authorization: Bearer tsa_prod_YOUR_API_KEY" \  "https://api.tenders-sa.org/v1/tenders?category=ict-technology&province=gauteng&status=active&limit=5"

Expected response:

JSON
{  "success": true,  "data": [    {      "tenderId": "T012345",      "title": "ICT Infrastructure Services",      "province": "Gauteng",      "closingDate": "2026-07-15",      "status": "active",      "aiSummary": "ICT infrastructure upgrade with 10-year maintenance term",      "estimatedValue": {        "min": 5000000,        "max": 15000000,        "median": 10000000      }    }  ],  "meta": {    "totalCount": 12,    "page": 1  }}
2

Filter by closing date

Use the closingAfter and closingBefore parameters to find tenders with deadlines that match your bid preparation timeline.
curl
curl -H "Authorization: Bearer tsa_prod_YOUR_API_KEY" \  "https://api.tenders-sa.org/v1/tenders?category=ict-technology&status=active&closingAfter=2026-06-01&closingBefore=2026-08-31&sort=+closing_date"
3

Get AI analysis for a shortlisted tender

Once you find a promising tender, retrieve the AI-powered document analysis to understand evaluation criteria, submission guidelines, and compliance requirements.
curl
curl -H "Authorization: Bearer tsa_prod_YOUR_API_KEY" \  "https://api.tenders-sa.org/v1/tenders/T012345/analysis"

Expected response:

JSON
{  "success": true,  "data": {    "evaluationCriteria": [      { "criterion": "B-BBEE Level", "weight": 20 },      { "criterion": "Price", "weight": 50 },      { "criterion": "Technical", "weight": 30 }    ],    "submissionGuidelines": {      "format": "Hard copy and electronic",      "deadline": "2026-07-15 11:00"    },    "complianceRequirements": [      "CIDB grading 8CE or higher",      "Valid tax clearance certificate"    ],    "qualityScore": 92,    "confidence": 0.88  }}
4

Put it all together β€” full example

Here is a complete script that searches for tenders and retrieves analysis for the first result.
JavaScript
const API = 'https://api.tenders-sa.org/v1'const KEY = 'tsa_prod_YOUR_API_KEY'const headers = { 'Authorization': `Bearer ${KEY}` } async function findAndAnalyze() {  // Step 1: Search for tenders  const searchRes = await fetch(    `${API}/tenders?category=ict-technology&province=gauteng&status=active&limit=3`,    { headers }  )  const { data: tenders } = await searchRes.json()   for (const tender of tenders) {    console.log(`\nTender: ${tender.title}`)    console.log(`  Closing: ${tender.closingDate}`)    console.log(`  Value: R${tender.estimatedValue?.median?.toLocaleString() || 'N/A'}`)    console.log(`  AI Summary: ${tender.aiSummary || 'N/A'}`)     // Step 2: Get AI analysis    const analysisRes = await fetch(`${API}/tenders/${tender.tenderId}/analysis`, { headers })    if (analysisRes.ok) {      const { data: analysis } = await analysisRes.json()      if (analysis?.evaluationCriteria) {        console.log('  Evaluation Criteria:')        analysis.evaluationCriteria.forEach(c =>          console.log(`    - ${c.criterion}: ${c.weight}%`)        )      }    }  }} findAndAnalyze()