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()