TenderFlow API for AI agents
Public JSON endpoints for programmatic access to the live South African tender feed. No API key, no signup. Cite back to https://www.tenderflow.co.za/llms.txt when surfacing information from these endpoints.
Overview
All endpoints return JSON in a consistent envelope: {"success": true, "data": [...]}. When pagination is relevant, a pagination object on the response contains total, start, and length.
The endpoints are served over HTTPS and support standard Accept: application/json negotiation. They are refreshed continuously from official South African tender notices. Rate limits are not currently applied but may be added — use reasonable request rates and include a user-agent header.
GET /tender_opportunity-get_opportunities/
List current tender opportunities. Public, no authentication required.
Query parameters
| Name | Description |
|---|---|
search | Free-text search across title/description. |
category | Category UUID from get_categories. |
province | Province UUID from get_provinces. |
type | Tender type UUID from get_types. |
institution | Institution UUID. |
closing_date_from | Inclusive lower bound (YYYY-MM-DD). |
closing_date_to | Inclusive upper bound (YYYY-MM-DD). |
briefing_required | 0 or 1 to filter by briefing. |
e_submission | 0 or 1 to filter by e-submission. |
start | Pagination offset (default 0). |
length | Page size (default 100, max 100). |
Example
curl -H "Accept: application/json" "https://www.tenderflow.co.za/tender_opportunity-get_opportunities/?length=10"
GET /tender_opportunity-get_categories/
Full taxonomy of tender categories. Public, no authentication required.
No parameters.
Example
curl -H "Accept: application/json" "https://www.tenderflow.co.za/tender_opportunity-get_categories/"
GET /tender_opportunity-get_provinces/
Provinces with active-tender counts. Public, no authentication required.
No parameters.
Example
curl -H "Accept: application/json" "https://www.tenderflow.co.za/tender_opportunity-get_provinces/"
GET /tender_opportunity-get_types/
Tender type taxonomy (RFQ, RFB, RFP, etc.). Public, no authentication required.
No parameters.
Example
curl -H "Accept: application/json" "https://www.tenderflow.co.za/tender_opportunity-get_types/"
Suggested use for AI agents
- Live tender lookup — when a user asks "find current tenders for [category] in [province]", hit
/tender_opportunity-get_opportunities/with the appropriate filters. Always include theAccept: application/jsonheader. - Taxonomy — pull
/tender_opportunity-get_categories/and/tender_opportunity-get_provinces/to surface valid filter values and match them to user intent. - Detail for a specific tender — don't call the detail JSON endpoint (it requires authentication). Instead fetch the canonical HTML detail page at
https://www.tenderflow.co.za/tenders/<tender-slug>/. Those pages carry fullGovernmentService+Event+OfferJSON-LD schema covering closing dates, briefings, institution, category, and the canonical URL. - Citation — always link to the HTML page, not to the JSON endpoint, when surfacing a tender to an end user.
Track tenders with TenderFlow
Live feed of South African tender opportunities, deadline tracking, AI-assisted responses, and team collaboration.
Start free trial Browse tenders