Developers
REST reference
Send your key as a bearer token. Request bodies are JSON. Tender references in a path can be the short form shown on Bekom, such as P173394.
curl https://api.bekom.io/v1 -H "Authorization: Bearer $BEKOM_API_KEY"
# → who the key is, its scopes, and every route it may callTenders
/v1/tendersThe tender board, filtered
Scope: tenders:read · Query: countryprovincecategorybuyerclosingqsizefrom · Realtime event: listOrgTenders
/v1/tenders?closing=open&province=Gauteng/v1/tenders/fitTenders that fit your organisation, with a verdict on each (Qualify plan)
Scope: assessments:read · Query: bucketclosingqsizefrom · Realtime event: listOrgTenders
/v1/tenders/fit?bucket=qualify/v1/tenders/:tenderIdOne tender, with its documents
Scope: tenders:read · Realtime event: getTender
/v1/tenders/P173394/v1/tenders/:tenderId/assessmentWhat Bekom makes of one tender for you (Qualify plan)
Scope: assessments:read · Realtime event: getAssessment
/v1/tenders/P173394/assessment/v1/tenders/:tenderId/documents/:refA five-minute download link for one tender document
Scope: tenders:read · Realtime event: getTenderDocument
/v1/tenders/P173394/documents/81386e2e-…/v1/briefingsCompulsory briefings in the next few weeks
Scope: tenders:read · Query: withinDays · Realtime event: listBriefings
/v1/briefings?withinDays=14Notices
/v1/noticesYour organisation's notices
Scope: notices:read · Realtime event: listMyNotices
/v1/notices/v1/notices/:noticeIdOne notice
Scope: notices:read · Realtime event: getNotice
/v1/notices/0170771c-…/v1/noticesDraft a notice
Scope: notices:write · Realtime event: createNotice
{ "reference": "RFQ-14", "title": "…", "closingAt": "2026-11-20T09:00:00Z", "eSubmission": "true", "returnables": [{ "label": "Tax clearance", "required": true }] }/v1/notices/:noticeIdChange a draft
Scope: notices:write · Realtime event: updateNotice
{ "title": "…" }/v1/notices/:noticeId/publishPublish a draft (verified buyers)
Scope: notices:write · Realtime event: publishNotice
/v1/notices/:noticeId/withdrawWithdraw a notice, with a reason
Scope: notices:write · Realtime event: withdrawNotice
{ "reason": "…" }Bids received
/v1/notices/:noticeId/bidsBids on a notice: a sealed count before closing, the bids after
Scope: bids:read · Realtime event: listNoticeSubmissions
/v1/notices/0170771c-…/bids/v1/bids/:submissionIdOne opened bid: sections, files, versions, comments, signature
Scope: bids:read · Realtime event: getNoticeSubmission
/v1/bids/a1c01330-…/v1/files/:fileId/reviewAccept, reject, or ask for a new version
Scope: bids:review · Realtime event: reviewSubmissionFile
{ "review": "resubmit", "note": "The S3 data sheet, please." }Files
/v1/files/:fileId/linkA five-minute link to one version of a bid file
Scope: bids:readsubmissions:write · Query: version · Realtime event: getSubmissionFileLink
/v1/files/…/link?version=1/v1/files/:fileId/commentsComment on a bid file
Scope: bids:reviewsubmissions:write · Realtime event: commentOnSubmissionFile
{ "body": "…" }Your bids
/v1/notices/:noticeId/my-bidYour bid on a notice, by section
Scope: submissions:write · Realtime event: getMySubmission
/v1/notices/0170771c-…/my-bid/v1/notices/:noticeId/uploadsA five-minute upload link for one file
Scope: submissions:write · Realtime event: requestSubmissionUpload
{ "fileName": "tax.pdf", "contentType": "application/pdf", "size": 120332 }/v1/notices/:noticeId/filesAdd an uploaded file under a section, with a label and description
Scope: submissions:write · Realtime event: addSubmissionFile
{ "uploadKey": "…", "fileName": "tax.pdf", "contentType": "application/pdf", "section": "tax", "label": "SARS tax compliance status" }/v1/notices/:noticeId/files/:fileId/versionsA new version of a file
Scope: submissions:write · Realtime event: addSubmissionFileVersion
{ "uploadKey": "…", "fileName": "tax-oct.pdf", "contentType": "application/pdf" }/v1/notices/:noticeId/files/:fileIdRemove a file before closing (its versions stay in the history)
Scope: submissions:write · Realtime event: removeSubmissionFile
Account
/v1/notificationsYour organisation's notifications
Scope: notifications:read · Query: limit · Realtime event: listNotifications
/v1/notifications?limit=20/v1/planYour plan, seats, and what it unlocks
Scope: any key · Realtime event: getMyPlan
/v1/plan