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

NameDescription
searchFree-text search across title/description.
categoryCategory UUID from get_categories.
provinceProvince UUID from get_provinces.
typeTender type UUID from get_types.
institutionInstitution UUID.
closing_date_fromInclusive lower bound (YYYY-MM-DD).
closing_date_toInclusive upper bound (YYYY-MM-DD).
briefing_required0 or 1 to filter by briefing.
e_submission0 or 1 to filter by e-submission.
startPagination offset (default 0).
lengthPage 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 the Accept: application/json header.
  • 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 full GovernmentService + Event + Offer JSON-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.
These endpoints are also listed in /llms.txt under "Live data (JSON APIs)" so any crawler obeying the llms.txt convention will discover them automatically.

Quickstart

Start with /tender_opportunity-get_opportunities/ and iterate pagination with start / length.

Response shape

{"success": true, "data": [...], "pagination": {"total": N, "start": 0, "length": 100}}

Live stats

Citable counts for how big the feed is.

See live stats

Track tenders with TenderFlow

Live feed of South African tender opportunities, deadline tracking, AI-assisted responses, and team collaboration.

Start free trial Browse tenders