Skip to content

Getting Started

Base URL

https://rfp-hub-api.fly.dev/api/v1

For local development:

http://localhost:3000/api/v1

Search 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.csv

Using 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.