Data Services
Every public notice on EdBid is available as JSON through a free API. You don't need a key. Responses are cached for 30 seconds.
Quick start
curl "https://api.edbid.org/v1/opportunities?q=janitorial&state=MO¬ice_type=rfq,ifb&limit=5"
Base URL: https://api.edbid.org · OpenAPI specification
Public endpoints
| GET | Returns |
|---|---|
| /v1/opportunities | Search opportunities. Filters: q, status (active, inactive, all), notice_type, preference, state, naics, category, institution, posted_from, due_before, sort (-updated, due, -published), page, limit (max 100). |
| /v1/opportunities/{id} | One opportunity with attachments, version history, and interested-vendor count. |
| /v1/opportunities/{id}/versions/{n} | The full notice as it was at version n. |
| /v1/opportunities/{id}/interested | The interested vendors list. |
| /v1/institutions | Top of the directory. Use parent, q, state, or email_domain to filter. |
| /v1/institutions/{id} | One institution with its path, sub-units, and active opportunity count. |
| /v1/vendors | Search registered vendors by q, state, naics, or preference. |
| /v1/vendors/{id} | One vendor by EdBid Vendor ID. |
| /v1/awards | The 100 most recent award notices. |
| /v1/openapi.json | OpenAPI 3.1 description of the public API. |
Embed your institution's notices
Show your open notices on your own “Bids & RFPs” page. Replace the institution ID with yours from the directory. The script only reads public data.
<div id="edbid"></div>
<script>
fetch("https://api.edbid.org/v1/opportunities?institution=YOUR_ID&limit=10")
.then(r => r.json()).then(({ data }) => {
const ul = document.createElement("ul");
for (const o of data) {
const li = document.createElement("li"), a = document.createElement("a");
a.href = "https://edbid.org/opp/" + o.id;
a.textContent = o.title + " (due " + new Date(o.responseDue).toLocaleDateString() + ")";
li.append(a); ul.append(li);
}
document.getElementById("edbid").append(ul);
});
</script>Terms
- Public notice data is free to use, republish, and build on. Link back to the notice page when you can.
- Please keep to about 10 requests per second. Heavier use may be rate-limited.
- Notices can change. Use
versionandupdatedAtto detect amendments.