Bellwork
SchoolsSchoolidRfps

Get school RFPs

The bids in the RFP corpus linked to this school (beta inference from the portal owner or the buyer name; each row's `entities` says how). The same read as `GET /rfps?school_id=`, with the same filters, pagination and gate: open with the `rfp_feed` module or on a paid plan, opened by a follow of the `project_id`'s project on free, and otherwise the teaser `{ data: [], gated: true, gated_count }` counting all of the school's linked bids.

GET
/schools/{schoolId}/rfps

The bids in the RFP corpus linked to this school (beta inference from the portal owner or the buyer name; each row's entities says how). The same read as GET /rfps?school_id=, with the same filters, pagination and gate: open with the rfp_feed module or on a paid plan, opened by a follow of the project_id's project on free, and otherwise the teaser { data: [], gated: true, gated_count } counting all of the school's linked bids.

AuthorizationBearer <token>

API key (sk_live_... prefix). Generate keys in the UI under Settings > API Keys, then send it as Authorization: Bearer sk_live_...

In: header

Path Parameters

schoolId*string
Formatuuid

Query Parameters

state?string

Comma-separated two-letter buyer state codes

status?string

Comma-separated statuses: open, closed, unknown, cancelled, awarded

posted_after?string

Only opportunities first seen on/after this ISO date (first_seen_at). Date-only values compare as midnight UTC.

posted_before?string

Only opportunities first seen on/before this ISO date (first_seen_at). Date-only values compare as midnight UTC.

closing_after?string

Only opportunities due on/after this ISO date (due_at). Date-only values compare as midnight UTC.

closing_before?string

Only opportunities due on/before this ISO date (due_at). Date-only values compare as midnight UTC.

q?string

Keyword search on the opportunity title

k12?string

true = only opportunities from K-12 district portals and purchasing cooperatives (a source-level filter)

Value in"true" | "false"
sort?string

newest (first seen, newest first) or closing_soon (due date ascending; excludes past due dates)

Default"newest"
Value in"newest" | "closing_soon"
project_id?string

Project whose follows the district_id / school_id gate should see (must belong to your organization). Ignored without an entity filter.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
limit?integer
Default25
Range1 <= value <= 100
offset?integer
Default0
Range0 <= value <= 9007199254740991

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://loading/api/v1/schools/497f6eca-6276-4993-bfeb-53cbbbba6f08/rfps"
{
  "data": [
    {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "title": "string",
      "buyer_name": "string",
      "buyer_state": "string",
      "solicitation_id": "string",
      "status": "open",
      "source_url": "string",
      "detail_url": "string",
      "due_at": "string",
      "due_date": "string",
      "first_seen_at": "string",
      "last_seen_at": "string",
      "confidence": 0,
      "entities": [
        {
          "entity_type": "district",
          "entity_id": "8161163a-f227-466f-bc01-090a01e80165",
          "name": "string",
          "state": "string",
          "student_count": 0,
          "method": "string",
          "confidence": 0
        }
      ]
    }
  ],
  "pagination": {
    "total": -9007199254740991,
    "limit": -9007199254740991,
    "offset": -9007199254740991,
    "has_more": true
  }
}
{
  "error": "string",
  "message": "string",
  "statusCode": -9007199254740991
}
{
  "error": "string",
  "message": "string",
  "statusCode": -9007199254740991
}
{
  "error": "string",
  "message": "string",
  "statusCode": -9007199254740991
}
{
  "error": "string",
  "message": "string",
  "statusCode": -9007199254740991
}