Most developers have never heard of Opire. Fewer still know it has a fully public API that returns every active bounty in real-time — no authentication needed.
I spent a day building an automated scanner using that API. Here's what I found in 30 live bounties, how the claim mechanism works, and which ones are still up for grabs.
What Is Opire?
Opire is a platform that lets anyone — maintainers, sponsors, even random users — add cash bounties to GitHub issues. Unlike Algora or IssueHunt, Opire uses a comment-based flow directly on GitHub. You don't need a separate dashboard to participate.
The full flow:
- A sponsor drops
@opire-dev create $50as a comment on any GitHub issue - Opire's bot registers the reward
- Developers post
/tryto declare intent - After a merged PR: post
/claim #<issue-number>in the PR body - Payment goes out via Stripe
What makes it special: it's decentralized. Anyone can fund any issue. The bounty lives on GitHub, not behind a walled garden.
The Secret Weapon: Opire's Public API
Here's the thing nobody talks about: Opire exposes all active rewards at one endpoint with zero authentication:
curl -s "https://api.opire.dev/rewards"
That's it. A single GET request returns a JSON array of every active bounty on the platform. I wrote a script to pull this, cross-reference each issue against the GitHub Issues API, and rank them by value × competition × feasibility.
Here's a minimal version of that scanner:
const fetch = require('node-fetch');
async function scanOpireBounties() {
// Step 1: Fetch all rewards from Opire API
const res = await fetch('https://api.opire.dev/rewards');
const rewards = await res.json();
console.log(`Total bounties: ${rewards.length}`);
// Step 2: For each reward, check the GitHub issue status
for (const reward of rewards) {
const { issue_url, amount, currency } = reward;
// Parse owner/repo/issue_number from GitHub URL
const match = issue_url.match(/github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)/);
if (!match) continue;
const [, owner, repo, issue_number] = match;
// Check if issue is still open
const ghRes = await fetch(
`https://api.github.com/repos/${owner}/${repo}/issues/${issue_number}`,
{ headers: { 'User-Agent': 'bounty-scanner' } }
);
const issue = await ghRes.json();
if (issue.state === 'open') {
console.log(`✅ $${amount} | ${owner}/${repo} | ${issue.title}`);
} else {
console.log(`❌ CLOSED | $${amount} | ${owner}/${repo}`);
}
}
}
scanOpireBounties();
Running this on March 22, 2026, I found 30 total bounties — but 8 of them were on closed issues. That means 27% of the money listed on Opire is effectively stranded on work that's already done. Knowing this is itself an edge.
Real Data: What 30 Live Bounties Look Like
Here's the breakdown of the open bounties I found, ranked by value:
| Amount | Language | Repo | Claimers | Competition |
|---|---|---|---|---|
| $13,380 | C++ | godotengine/godot | 3 | HIGH |
| $1,500 | C | uswriting/zeroperl | 0 ⭐ | NONE |
| $1,000 | C | FalkorDB/FalkorDB | 3 | HIGH |
| $660 | JavaScript | hexgrad/kokoro | 2 | LOW-MEDIUM |
| $385 | Rust | zed-industries/zed | 1 | MEDIUM |
| $200 | C++/C/GLSL | secondlife/viewer | 1 | LOW |
| $180 | Python | autokey/autokey | 4 | MEDIUM-HIGH |
| $120 | TypeScript | typeorm/typeorm | 7 | HIGH |
| $100 | C | FalkorDB/FalkorDB | 1 | LOW |
| $70 | Rust | denoland/deno | 0 ⭐ | ZERO |
| $70 | TypeScript | trovu/trovu | 7 | VERY HIGH |
| $50 | PHP | sebastianbergmann/phpunit | 2 | LOW |
Key finding: The $70 Deno bounty (feat: view test coverage in editor, issue #18147) had zero claimers on the day I scanned it. It was also last updated that same day — a fresh, active issue with no one competing for it.
The /try Mechanism: How Claiming Works
When you find a bounty you want to attempt, the process on GitHub is:
# Step 1: Comment on the issue to declare intent
/try
# Step 2: Fork the repo, implement your fix
# Step 3: Open a PR and include this in the PR body
/claim #<issue-number>
# Step 4: Maintainer merges → Opire pays out
The /try comment is purely for signaling — it doesn't lock you out if others also comment it. But it tells the sponsor you're working on it, which sometimes prompts them to respond with guidance.
Important: Multiple developers can post /try and even open PRs. The maintainer picks which PR to merge. This is different from first-come-first-served platforms — quality of implementation wins, not speed.
What Closed Bounties Teach You
Out of 30 bounties in my scan, these 8 were on closed GitHub issues:
- $385 — zed-industries/zed Helix keymap (closed 2026-03-09)
- $200 — Leantime collaborators on task (closed 2025-11-15)
- $200 — keycloak IDP token refresh (closed 2026-01-02)
- $110 — storybookjs select control bug (closed 2026-01-18)
Opire doesn't auto-expire rewards when issues close. The money may be in limbo unless the sponsor explicitly cancels it. Always verify issue status on GitHub before investing time.
# Quick check: is this issue still open?
curl -s "https://api.github.com/repos/OWNER/REPO/issues/NUMBER" \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['state'], d['title'])"
Tips for Actually Winning Bounties
After analyzing all 30 bounties, here's what I learned:
1. Target issues with open PRs that have CHANGES_REQUESTED
The $120 TypeORM bounty has 4 open PRs — but none merged. Why? The maintainer wants a fix across ALL database drivers, not just one. Reading PR review comments reveals exactly what "done" looks like.
2. Low dollar ≠ low value
The $50 phpunit bounty (improve error message for empty coverage list) is probably a 2-hour fix in a well-documented PHP codebase. That's $25/hour for clean, beginner-friendly work.
3. Zero claimers is your biggest signal
When the competition count is 0, the bounty is essentially unclaimed territory. The Deno $70 and zeroperl $1,500 had zero claimers. The zeroperl one requires deep C systems work, but the Deno one is "just" an LSP integration.
4. Check language feasibility honestly
$13,380 on Godot sounds incredible until you realize it's a complex C++ rendering issue. Match the bounty to your actual skillset.
5. Comment /try early, even before you start
It signals intent, sometimes prompts the maintainer to add context, and establishes your claim date. Takes 5 seconds.
The Full Scanner
I've published the full bounty scanner — with GitHub cross-referencing, competition scoring, and Markdown report generation — on GitHub at @DeekRoumy.
If you want to see how I built the AI agent that runs this automatically (and wakes up to scan for bounties while I sleep), check out my first article: How I Built an AI Agent That Hunts GitHub Bounties While I Sleep.
Summary
- Opire's public API:
https://api.opire.dev/rewards— no auth needed - 30 live bounties totaling ~$18,000 on the day I scanned
- 8 were on closed issues (27% stranded money)
- The $70 Deno bounty had zero claimers
- Claim flow:
/tryon issue → PR →/claim #Nin PR body → maintainer merges → payout - Best strategy: find bounties where existing PRs have
CHANGES_REQUESTEDand understand why they were rejected
The platform is small enough that reading the GitHub discussions gives you a real edge. Most people won't do that homework. You just did.
Happy hunting. 🎯
Top comments (0)