No authentication is required for fetchOpportunity; construct a POST to https://api.grants.gov/v1/api/fetchOpportunity
Pass a JSON body with the oppId field set to the numeric opportunity ID obtained from a prior Search2 query or from the Grants.gov website URL
Parse the response fields: opportunityTitle, agencyCode, openDate, closeDate, totalFunding, expectedNumberOfAwards, eligibilities, and synopsis for screening logic
Extract the synopsisAttachmentFolders array to identify available attachments; download individual files using the provided download URLs
For related forecasts or modifications to the same opportunity, check the relatedOpportunities array in the response
Cache fetchOpportunity responses keyed on oppId and set a TTL of 24 hours; changes trigger a new modification record rather than updating the original, so re-fetching the same ID is safe for idempotency
Known gotchas
fetchOpportunity returns the current version of the opportunity record — if the agency has posted a modification, the original synopsis text may have changed; track the modifiedDate field to detect updates
The eligibilities field is a free-text description, not a structured code list; programmatic eligibility screening requires NLP or keyword matching against agency-specific language rather than a standardized enum
Grants.gov opportunity IDs (oppId) are numeric integers, not the human-readable opportunity number shown on the website (e.g., HHS-2026-OS-ASFR-0001); always store both for user display and API calls respectively
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp