---
title: "Search Rfps"
method: POST
path: "/api/v3/rfps/search"
tags: ["RFPs"]
---

# Search Rfps

`POST /api/v3/rfps/search`

Search for RFPs with extensive filtering on both RFP and institution fields.

Performs efficient database-level JOIN between RFPs and Institutions.
All filters are passed in the request body.

**Text Search:**
- include_words: Keywords to search in title/description
- exclude_words: Keywords to exclude from results
- keyword_logic: "AND" (all words match) or "OR" (any word matches)

**RFP Status & Dates:**
- status: "active", "expired", or "no_due_date"
- start_date/end_date: Filter by due date range
- min_days_remaining/max_days_remaining: Filter by days until due

**Institution Filters:**
- institution_name: Partial match on institution name
- selected_states: Filter by state codes (e.g., ["CA", "TX"])
- selected_counties: Filter by county names
- selected_cities: Filter by cities (format: "state-city")
- selected_institution_types: Filter by type (e.g., "higher_education")
- selected_labels: Filter by institution labels
- min_population/max_population: Filter by population range

**Pagination:**
- offset: Starting position (default: 0)
- limit: Results per page (default: 100, max: 10000)

## Request body

- RFPRequestFilters — Request model for RFP search with all filters.
  - `include_words` string[], nullable
  - `exclude_words` string[], nullable
  - `keyword_logic` string, nullable
  - `status` string, nullable
  - `start_date` string, date-time, nullable
  - `end_date` string, date-time, nullable
  - `min_days_remaining` integer, nullable
  - `max_days_remaining` integer, nullable
  - `institution_name` string, nullable
  - `institutions_include` string[], nullable
  - `selected_states` string[], nullable
  - `selected_counties` string[], nullable
  - `selected_cities` string[], nullable
  - `selected_institution_types` string[], nullable
  - `selected_labels` string[], nullable
  - `min_population` integer, nullable
  - `max_population` integer, nullable
  - `sort_by` string, nullable
  - `sort_order` string, nullable
  - `offset` integer, nullable
  - `limit` integer, nullable

## Response `200`

Successful Response

- RFPsResponse — Response model for RFP search endpoints
  - `rfps` RFPs[], required
    - `id` integer, required
    - `unique_id` string, nullable
    - `title` string, nullable
    - `description` string, nullable
    - `agency` string, nullable
    - `due_date` string, nullable
    - `rfp_url` string, nullable
    - `created_at` string, nullable
    - `updated_at` string, nullable
    - `institution_name` string, nullable
    - `institution_city` string, nullable
    - `institution_state` string, nullable
    - `institution_type` string, nullable
    - `source_id` integer, nullable
    - `label` string, nullable
    - `county` string, nullable
    - `street` string, nullable
    - `latitude` number, nullable
    - `longitude` number, nullable
    - `geo_shape` string, nullable
    - `county_fips_code` string, nullable
    - `population` number, nullable
    - `entity_understanding` string, nullable
    - `is_active` boolean, nullable
    - `favicon_path` string, nullable
    - `last_processed_at` string, nullable
    - `homepage_url` string, nullable
    - `contact_url` string, nullable
    - `institution_rfp_url` string, nullable
    - `meeting_minute_url` string, nullable
    - `budget_url` string, nullable
    - `strategic_plan_url` string, nullable
    - `procurement_guideline_url` string, nullable
    - `press_release_url` string, nullable
    - `open_data_portal_url` string, nullable
    - `youtube_url` string, nullable
    - `foia_url` string, nullable
    - `homepage_url_status` string, nullable
    - `contact_url_status` string, nullable
    - `rfp_url_status` string, nullable
    - `meeting_minute_url_status` string, nullable
    - `budget_url_status` string, nullable
    - `strategic_plan_url_status` string, nullable
    - `press_release_url_status` string, nullable
    - `procurement_guideline_url_status` string, nullable
    - `open_data_portal_url_status` string, nullable
    - `youtube_url_status` string, nullable
    - `foia_url_status` string, nullable
    - `score` number, nullable
    - `relevance_score` number, nullable
    - `decay_score` number, nullable
  - `total_count` integer, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/nationgraph/apis/nationgraph-api.md) · [All operations](https://skmtc.net/nationgraph/apis/nationgraph-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/nationgraph/nationgraph-api/revisions/85804e68d86d/schema)
