find-opportunities
npx skills add https://github.com/show-karma/skills --skill find-opportunities
Agent 安装分布
Skill 文档
Funding Program Finder
Search the Karma Funding Map for funding programs via the public API.
The registry has 6 program types: grants, hackathons, bounties, accelerators, VC funds, and RFPs. Use “programs” / “opportunities” / “funding” â not just “grants”.
API
Base URL: https://gapapi.karmahq.xyz
Endpoint: GET /v2/program-registry/search
Auth: None (public)
Query Parameters
| Param | Type | Default | Notes |
|---|---|---|---|
page |
int | 1 | 1-indexed |
limit |
int | 12 | Max 100 |
name |
string | â | Text search on title (case-insensitive regex) |
type |
string | â | Comma-separated: grant,hackathon,bounty,accelerator,vc_fund,rfp |
isValid |
enum | accepted |
accepted / rejected / pending / all |
status |
enum | â | active / inactive (computed from deadline/endsAt) |
ecosystems |
string | â | Comma-separated: Ethereum,Optimism |
categories |
string | â | Comma-separated |
networks |
string | â | Comma-separated |
grantTypes |
string | â | Comma-separated |
communities |
string | â | Comma-separated community UIDs |
minGrantSize |
int | â | Min grant/reward size in USD |
maxGrantSize |
int | â | Max grant/reward size in USD |
sortField |
enum | updatedAt |
createdAt / updatedAt / startsAt / endsAt / name |
sortOrder |
enum | desc |
asc / desc |
onlyOnKarma |
bool | false | Only programs tracked on Karma |
communityUid |
string | â | Filter by community |
organization |
string | â | Filter by org name |
Program Types
| Value | Description |
|---|---|
grant |
Funding programs, ecosystem funds, retroactive/quadratic funding |
hackathon |
Time-bound building competitions with prizes and tracks |
bounty |
Task-based rewards with defined scope and payout |
accelerator |
Cohort programs with mentorship, often equity-based |
vc_fund |
Venture capital funds investing in web3 projects |
rfp |
Requests for proposals from DAOs/foundations with defined scope and budget |
Omitting type returns all types. Multiple types: type=grant,hackathon.
Response Shape
{
"programs": [{ "id", "programId", "type", "name", "isValid", "isActive", "isOnKarma", "deadline", "submissionUrl", "communities": [{ "uid", "name", "slug", "imageUrl" }], "createdAt", "updatedAt", "metadata": { "title", "description", "shortDescription", "status", "startsAt", "endsAt", "categories", "ecosystems", "networks", "grantTypes", "organizations", "minGrantSize", "maxGrantSize", "programBudget", "website", "projectTwitter", "anyoneCanJoin", "socialLinks": { "twitter", "discord", "website", "orgWebsite", "grantsSite" } } }],
"count", "totalPages", "currentPage", "hasNext", "hasPrevious"
}
Known Ecosystem Values
Ethereum, Optimism, Arbitrum, Base, Polygon, Solana, Cosmos,
Avalanche, Near, Polkadot, Sui, Aptos, Starknet, zkSync,
Scroll, Linea, Mantle, Celo, Gnosis, Fantom, Filecoin,
Internet Computer, Tezos, Algorand, Hedera, MultiversX,
TON, Sei, Injective, Osmosis, Celestia, Berachain, Monad
Known Category Values
Funding Opportunity, Grant, DAO Governance, Award,
Program Results, Upcoming Deadline, Retroactive Funding,
Quadratic Funding, Ecosystem Fund, Developer Grant,
Research, Tool
Natural Language â Query Parameters
| User says | Maps to |
|---|---|
| “Ethereum programs” | ecosystems=Ethereum (see Ecosystem Search Strategy below) |
| “hackathons” | type=hackathon |
| “hackathons on Ethereum” | type=hackathon&ecosystems=Ethereum (see Ecosystem Search Strategy below) |
| “bounties on Solana” | type=bounty&ecosystems=Solana (see Ecosystem Search Strategy below) |
| “bounties over $500” | type=bounty&minGrantSize=500 |
| “accelerator programs” | type=accelerator |
| “VCs investing in DeFi” | type=vc_fund&name=DeFi |
| “open RFPs from Optimism” | type=rfp&organization=Optimism |
| “grants and hackathons on Ethereum” | type=grant,hackathon&ecosystems=Ethereum |
| “DeFi funding on Optimism” | ecosystems=Optimism&name=DeFi |
| “programs over $50K” | minGrantSize=50000 |
| “funding under $100K” | maxGrantSize=100000 |
| “infrastructure” | name=infrastructure |
| “active programs” | status=active |
| “retroactive funding on Optimism” | ecosystems=Optimism&categories=Retroactive%20Funding |
| “programs on Karma” | onlyOnKarma=true |
| “what’s closing this week” | sortField=endsAt&sortOrder=asc&status=active |
| (no query) | Ask what they’re looking for |
Budget shorthand: Kâ000, Mâ000000 (e.g., $50K â 50000, $1M â 1000000).
URL encoding: Values with spaces or special characters must be percent-encoded when building curl URLs (e.g., categories=Retroactive%20Funding, not Retroactive Funding). Most HTTP clients handle this automatically, but manual URL construction requires explicit encoding.
Ecosystem Search Strategy
The ecosystems metadata field is often empty â many programs are linked to an ecosystem only via the communities field. When searching by ecosystem, run these queries in parallel and merge:
- Community UID lookup: fetch all communities from
GET /v2/communities?limit=100, find the best match for the user’s query by comparing against community names (case-insensitive, partial match), then query withcommunityUid={uid} ecosystems={name}â matches programs with populated ecosystem metadataname={name}â text search on title, universal fallback
Deduplicate all results by id before presenting.
Community UID Resolution
Slugs are not guessable (e.g., “GEN Ukraine” â gen-ukraine-community), so fetch the full list and match by name:
# Fetch all communities (~48) and find the matching UID
curl -s "https://gapapi.karmahq.xyz/v2/communities?limit=100"
# Response: { "payload": [{ "uid": "0x...", "details": { "name": "GEN Ukraine", "slug": "gen-ukraine-community" } }, ...] }
# Match user query "ukraine" against details.name (case-insensitive partial match)
# Use the matched uid in: communityUid={uid}
Query Defaults
Always include:
isValid=accepted&limit=10&sortField=updatedAt&sortOrder=desc
Override sortField and sortOrder when the user asks about deadlines â use sortField=endsAt&sortOrder=asc.
Making the Request
Use curl via Bash to call the API. Build the URL from the mapped parameters:
curl -s "https://gapapi.karmahq.xyz/v2/program-registry/search?isValid=accepted&limit=10&sortField=updatedAt&sortOrder=desc&ecosystems=Ethereum"
For ecosystem searches, run all three queries in parallel (community UID, ecosystems, name) and deduplicate by id before presenting results. See Ecosystem Search Strategy above.
Parse the JSON response and format results as described below.
Result Format
Include the program type in each result. Adapt the detail line based on type:
Found 42 programs (showing top 10):
1. **Optimism Grants** [grant] â Optimism
Retroactive and proactive funding for Optimism builders
Budget: $10M | Status: Active
Apply: https://app.charmverse.io/...
2. **ETHDenver 2026** [hackathon] â Ethereum
Annual Ethereum hackathon and conference
Dates: Mar 1â7, 2026 | Deadline: Feb 15, 2026
Apply: https://ethdenver.com/apply
3. **Rust Smart Contract Audit** [bounty] â Solana
Audit Solana program for vulnerabilities
Reward: $5,000 | Difficulty: Advanced
Apply: https://superteam.fun/...
Showing 10 of 42. Ask for more or narrow your search.
Field Mapping
- Name:
metadata.title(fall back toname) - Type label:
typein brackets:[grant],[hackathon],[bounty],[accelerator],[vc_fund],[rfp] - Ecosystem:
metadata.ecosystemsjoined with,(fall back tocommunities[0].name) - Description:
metadata.descriptiontruncated to ~120 chars
Type-Specific Detail Line
- grant:
Budget: {programBudget} | Status: {status} - hackathon:
Dates: {startsAt}â{endsAt} | Deadline: {deadline} - bounty:
Reward: {programBudget} | Difficulty: {difficulty if available} - accelerator:
Stage: {stage if available} | Deadline: {deadline} - vc_fund:
Check size: {minGrantSize}â{maxGrantSize} | Stage: {stage if available} - rfp:
Budget: {programBudget} | Org: {organizations[0]} | Deadline: {deadline} - fallback:
Budget: {programBudget} | Status: {status}
Common Fields
- Deadline:
deadline(top-level) formatted asMon DD, YYYY(or “Rolling” if null) - Apply link:
submissionUrl(top-level), fall back tometadata.socialLinks.grantsSiteormetadata.websiteormetadata.socialLinks.website(first non-empty)
Edge Cases
| Scenario | Response |
|---|---|
| No results | Try the ecosystem fallback query (see Ecosystem Search Strategy) before giving up. If still none: “No programs found matching your criteria. Try broadening â remove type, ecosystem, or budget filters.” |
| API error | “Could not reach the Karma API. Try again in a moment.” |
| No query | Ask: “What kind of funding are you looking for? I can search grants, hackathons, bounties, accelerators, VC funds, and RFPs â filtered by ecosystem, budget, category, or keywords.” |
| “more results” / “page 2” | Re-run with page=2 |