Getting Started
Base URL
https://rfp-hub-api.fly.dev/api/v1For local development:
http://localhost:3000/api/v1Search Opportunities
# List all open opportunities
curl 'https://rfp-hub-api.fly.dev/api/v1/opportunities?status=open'
# Full-text search
curl 'https://rfp-hub-api.fly.dev/api/v1/opportunities?q=privacy+research'
# Filter by type and ecosystem
curl 'https://rfp-hub-api.fly.dev/api/v1/opportunities?type=grant&ecosystem=ethereum'
# Combine filters with pagination
curl 'https://rfp-hub-api.fly.dev/api/v1/opportunities?type=grant&status=open&ecosystem=optimism&page=1&limit=10'Get a Single Opportunity
curl 'https://rfp-hub-api.fly.dev/api/v1/opportunities/{id}'Submit a Community Opportunity
No authentication required. Submissions are queued for admin review.
curl -X POST 'https://rfp-hub-api.fly.dev/api/v1/submit' \
-H 'Content-Type: application/json' \
-d '{
"title": "Privacy Research Grant",
"description": "Funding for ZK privacy research on Ethereum L2s.",
"summary": "ZK privacy research grant",
"rfpType": "grant",
"applicationUrl": "https://example.com/apply",
"sourceUrl": "https://example.com/grants",
"ecosystems": ["ethereum"],
"categories": ["research", "privacy"],
"tags": []
}'Export Data
# JSON export (up to 10,000 records)
curl 'https://rfp-hub-api.fly.dev/api/v1/export?format=json&status=open'
# CSV export
curl 'https://rfp-hub-api.fly.dev/api/v1/export?format=csv' -o opportunities.csvUsing the TypeScript SDK
The SDK is a workspace package in the monorepo. It is not yet published to npm.
# Within the rfp-hub monorepo (npm workspaces)
import { RfpHubClient } from '@rfp-hub/sdk';import { RfpHubClient } from '@rfp-hub/sdk';
const client = new RfpHubClient({
baseUrl: 'https://rfp-hub-api.fly.dev',
});
// Search
const { data, meta } = await client.searchOpportunities({
q: 'defi',
type: 'grant',
ecosystem: 'ethereum',
});
console.log(`Found ${meta.total} opportunities`);
// Get single opportunity
const opp = await client.getOpportunity(data[0].id);See the SDK documentation for the full API reference.