Developers
Public data is free and open, with no key and no sign-up. Institutions can request a key to publish notices and read bids from their own systems.
Public API: no key
curl "https://api.edbid.org/v1/opportunities?q=janitorial&state=MO&accepts_bids=1"
| GET /v1/opportunities | Search. q, status, notice_type, preference, state, naics, category, institution, accepts_bids, posted_from, due_before, sort, page, limit |
| GET /v1/opportunities/{id} | One notice with attachments, public history, and bid tabulation after award |
| GET /v1/opportunities/{id}/versions/{n} | A notice exactly as it was at version n |
| GET /v1/institutions/{id} | Institution with sub-units, active count, and median days-to-pay |
| GET /v1/vendors?q= | Registered vendors with verification badges |
| GET /v1/awards | Recent award notices |
OpenAPI 3.1 specification · Please stay under about 10 requests per second.
Institution API: approved keys
- An institution admin requests a key in Workspace → API access, choosing permissions and explaining the use.
- EdBid staff confirm the institution is verified and approve the request.
- The requester reveals the key once. EdBid stores only a hash of it.
- Send it as
Authorization: Bearer edb_live_…. A key only works for its own institution and offices.
| Endpoint | Permission | What it does |
|---|---|---|
| POST /v1/opportunities | opportunities:write | Create a notice. action = draft, submit, or publish. Your approval rules still apply. |
| PATCH /v1/opportunities/{id} | opportunities:write | Amend. change_summary is required and becomes a public version. |
| POST /v1/opportunities/{id}/attachments | opportunities:write | Upload a public document (multipart, field file) |
| GET /v1/opportunities/{id}/bids | bids:read | After the deadline: bids, vendors, badges, file IDs. The first call is the recorded bid opening. |
Keys can't submit bids, read vendor tax documents, or act for another institution. Every API change is recorded in the institution's audit trail with the key's ID.