gov.public-assistance
FEMA Public Assistance (PA) funded project details — the post-disaster grants FEMA obligates to state/local/tribal governments and eligible nonprofits to repair public infrastructure and cover emergency response (debris removal, emergency protective measures, roads, buildings, utilities, parks). Filter by state (2-letter) and/or disasterNumber (one of the two is required); optionally refine by incidentType. Returns the total matching worksheet count plus projects (disaster number, declaration date, incident type, project worksheet number, application title, applicant, damage category, project size, status, county, federal share obligated / total obligated / project amount in USD, obligation date), largest federal share first. Free, public-domain (OpenFEMA). Distinct from gov.hazard-mitigation (future-risk mitigation grants) and gov.nfip-claims (flood losses paid) — this is disaster recovery funding for public infrastructure.
/api/gov/public-assistancePAYMENT-SIGNATURE.Parameters
| Name | Type | Description |
|---|---|---|
state | string | 2-letter US state/territory code. min 2 chars · max 2 chars |
disasterNumber | integer | min 1 · max 100000 |
incidentType | string | min 1 chars · max 40 chars |
limit | integer | min 1 · max 50 |
Code samples
# 1. Probe with no auth → 402 envelope with PaymentRequirements curl -sS 'https://2s.io/api/gov/public-assistance?state=xx&disasterNumber=1&incidentType=example&limit=1' # 2. Sign + retry with PAYMENT-SIGNATURE: curl -sS 'https://2s.io/api/gov/public-assistance?state=xx&disasterNumber=1&incidentType=example&limit=1' \ -H 'PAYMENT-SIGNATURE: <base64-json-payload>' # Or use the canonical runner (handles probe → sign → retry): # EVM_PRIVATE_KEY=0x... node --env-file=.env.local \ # --experimental-strip-types scripts/x402-pay.ts \ # 'https://2s.io/api/gov/public-assistance?state=xx&disasterNumber=1&incidentType=example&limit=1'
import { TwoS } from '@2sio/sdk'
const client = new TwoS({
privateKey: process.env.EVM_PRIVATE_KEY as `0x${string}`,
})
const result = await client.gov.publicAssistance({
"state": "xx",
"disasterNumber": 1,
"incidentType": "example",
"limit": 1
})
console.log('endpoint:', result.endpoint)
console.log('cost:', result.costUsd, 'USDC')
console.log('tx:', result.settlement?.txHash)
console.log('data:', result.data)import os
from twosio import TwoS
client = TwoS(private_key=os.environ["EVM_PRIVATE_KEY"])
result = client.gov.public_assistance(state="xx", disasterNumber=1, incidentType="example", limit=1)
print("endpoint:", result.endpoint)
print("cost:", result.cost_usd, "USDC")
print("tx:", (result.settlement or {}).get("tx_hash"))
print("data:", result.data)// 1. Add @2sio/mcp to your MCP host config (Claude Desktop example below).
// EVM_PRIVATE_KEY funds x402 payments per call.
// claude_desktop_config.json
{
"mcpServers": {
"2sio": {
"command": "npx",
"args": ["-y", "@2sio/mcp"],
"env": { "EVM_PRIVATE_KEY": "0x..." }
}
}
}
// 2. Once the server is running, agents call this tool via standard MCP:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "gov.public-assistance",
"arguments": {
"state": "xx",
"disasterNumber": 1,
"incidentType": "example",
"limit": 1
}
}
}Response
| Field | Type | Description |
|---|---|---|
ok | boolean | one of: true |
items | array | |
total | integer | Total matching rows upstream; null when unknown. |
source | object |
{
"ok": true,
"items": [
{
"query": {
"state": "example",
"disasterNumber": 1,
"incidentType": "example",
"limit": 1
},
"totalProjects": 1,
"returned": 1,
"returnedSummary": {
"totalFederalShareUSD": 1,
"totalObligatedUSD": 1
},
"projects": [
{
"disasterNumber": 1,
"declarationDate": "example",
"incidentType": "example",
"pwNumber": "example",
"applicationTitle": "example",
"applicantId": "example",
"damageCategory": "example",
"damageCategoryCode": "example",
"projectSize": "example",
"projectStatus": "example",
"county": "example",
"countyCode": "example",
"state": "example",
"stateCode": "example",
"projectAmountUSD": 1,
"federalShareObligatedUSD": 1,
"totalObligatedUSD": 1,
"obligatedDate": "example"
}
],
"source": {
"provider": "example",
"url": "example",
"license": "example"
},
"note": "example"
}
],
"total": 1,
"source": {
"provider": "example",
"url": "example",
"license": "example"
}
}Discovery
- /api/directory — full catalog of every endpoint
- /openapi.json — OpenAPI 3.1 spec (per-op x-payment-info, x402Payment security)
- /.well-known/x402 — machine-readable service descriptor for x402-aware crawlers
- /.well-known/mcp/server-card.json — MCP SEP-1649 server card
- /llms.txt — plain-text manifest for LLM ingestion