---
title: "Search Grants"
method: POST
path: "/api/internal/grants/search"
tags: ["Grants"]
---

# Search Grants

`POST /api/internal/grants/search`

Search grants.

The ``query`` field accepts a websearch-style query string evaluated against
the grant search vector (title + description, english config, stemming on).
See GrantSearchFilters docstring for syntax.

All filters are optional. ~1.27M rows; fully unbounded queries are fine
for browsing (matches RFP endpoint behavior, differs from PO which
requires bounding filters).

## Request body

- AppInternalTypesGrantGrantSearchFilters — Search filters for grants. The ``query`` field accepts a websearch-style query string evaluated against the ``search_vector`` column (title + description, english config — stemming enabled). Same syntax as RFPs: bare words: "cybersecurity grant" implicit AND quoted phrase: '"emergency connectivity"' exact phrase OR: "ESSER OR ARP" literal OR keyword exclude: "covid -relief" prefix - to exclude combined: '"emergency connectivity" OR "school safety"' All filters are optional. The grants table is ~1.27M rows; fully unbounded queries are fine for browsing.
  - `query` string, nullable
  - `status` 'active' | 'expired' | 'no_period'
  - `period_start_after` string, date, nullable
  - `period_end_before` string, date, nullable
  - `min_amount` number, nullable
  - `max_amount` number, nullable
  - `funding_agencies` string[], nullable
  - `exclude_funding_agencies` string[], nullable
  - `institution_ids` string[], nullable
  - `states` string[], nullable
  - `source_tables` string[], nullable
  - `sort` 'last_modified_desc' | 'period_end_asc' | 'period_end_desc' | 'amount_desc' | 'relevance'
  - `offset` integer
  - `limit` integer

## Response `200`

Successful Response

- PaginatedResponseGrantResponse
  - `results` AppInternalTypesGrantGrantResponse[], required
    - `id` string, required
    - `external_grant_id` string, nullable
    - `title` string, nullable
    - `description` string, nullable
    - `funding_agency` string, nullable
    - `awardee_name` string, nullable
    - `awardee_state` string, nullable
    - `total_obligated_amount` number, nullable
    - `outlayed_amount` number, nullable
    - `period_of_performance_start_date` string, date, nullable
    - `period_of_performance_end_date` string, date, nullable
    - `last_modified_date` string, date, nullable
    - `grant_link` string, nullable
    - `transaction_count` integer, nullable
    - `source` string, nullable
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
    - `institution_id` string, nullable
    - `institution_name` string, nullable
    - `institution_state` string, nullable
    - `institution_type` string, nullable
    - `status` 'active' | 'expired' | 'no_period'
    - `days_until_end` integer, nullable
    - `relevance` number, nullable
  - `total` integer, required
  - `offset` integer, required
  - `limit` integer, required

## 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)
