API and MCP
REST
JSON over HTTPS, no key, CORS open. Amounts in USDC are decimal numbers; times are UTC ISO 8601.
| Endpoint | Returns |
|---|---|
GET /api/v1/bounties | Every bounty with program, escrow, USDC, backers and status |
GET /api/v1/bounties/:id | One bounty with its snapshot, corpus, deposits, submissions and verdicts |
GET /api/v1/verdicts/:id | One verdict with its hashes and the replayer report |
GET /api/v1/teardown/:program | The teardown kit of a snapshotted program |
List bounties
SITE=https://www.decompilebounty.com curl -s "$SITE/api/v1/bounties"
{
"bounties": []
}One bounty
SITE=https://www.decompilebounty.com curl -s "$SITE/api/v1/bounties/0001"
{
"error": "not found"
}One verdict
SITE=https://www.decompilebounty.com curl -s "$SITE/api/v1/verdicts/0001"
{
"id": "0001",
"verdict": "PASS",
"program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
"bounty": null,
"calibration": true,
"label": "Calibration: SPL Memo v3, rebuilt source",
"matched": 10985,
"total": 10985,
"cases": 11000,
"budget_bound": 15,
"real_matched": 1000,
"real_total": 1000,
"ok_path": 7107,
"report_sha256": "4b029ffbe428ca3d614c609b9bd56e5379afb1193b9ed341e56ded470f0dab03",
"source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
"candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
"corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
"after_winner": false,
"created_at": "2026-11-02T15:44:27.485Z",
"memo": {
"status": "pending",
"text": "decomp:proof:calibration:mvzfiv4jc190a923:ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2:4b029ffbe4..."
},
"report": {
"format": "decomp-verdict/1",
"verdict": "PASS",
"reason": "all 10985 compared cases match, 7107 on the success path",
"program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
"loader": "BPFLoader2111111111111111111111111111111111",
"original_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
"candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
"corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
"source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
"corpus_elf_sha256_matches_original": true,
"cases_total": 11000,
"compared": 10985,
"budget_bound": 15,
"matched": 10985,
"real_total": 1000,
"real_matched": 1000,
"fuzz_total": 9985,
"fuzz_matched": 9985,
"fuzz_seed": "c34cf12a2e0f0762",
"ok_path_original": 7107,
"ok_path_minimum": 100,
"mismatches_total": 0,
"mismatches": [],
"original_outcomes_sha256": "6979bdf2202d5b907d406e66d14d0f28267055d5e2bc8ede07d6eb7f9217476f",
"candidate_outcomes_sha256": "32b9ede4837dc8ae0e3fd18eac7bf32d2b5df72d53e803d6003970c9103e0ead",
"rules": {
"replayer": "decomp-replayer 1.0.0",
"litesvm": "0.17.0",
"feature_set": "litesvm mainnet feature set",
"compared": "result and error, logs line by line, return data, lamports owner and data of every writable account",
"stripped": "lines 'Program <id> consumed N of M compute units'; cases where the original exhausts its compute budget are counted ..."
}
}
}Teardown kit
SITE=https://www.decompilebounty.com curl -s "$SITE/api/v1/teardown/MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
{
"program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
"label": "SPL Memo v3",
"status": "ready",
"snapshot": {
"program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
"loader": "BPFLoader2111111111111111111111111111111111",
"slot": 464547082,
"upgradeable": false,
"upgrade_authority": null,
"programdata": null,
"last_deploy_slot": null,
"elf_size": 74800,
"elf_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
"onchain_hash": "68d9bbae7023f8f51d32d0f6ff8a7003921c97c99e77921ccd0f51adcf6295db",
"verification": {
"checked": true,
"is_verified": false,
"message": "On chain program not verified",
"repo_url": "",
"onchain_hash": "68d9bbae7023f8f51d32d0f6ff8a7003921c97c99e77921ccd0f51adcf6295db"
},
"taken_at": "2026-11-02T15:33:26.117Z"
},
"corpus": {
"sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
"bytes": 337987,
"real_instructions": 1000,
"ok_transactions": 220,
"first_slot": 464547025,
"last_slot": 464547084,
"accounts": 15,
"programs": []
},
"kit": {
"format": "decomp-teardown/1",
"elf_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
"elf_size": 74800,
"sbpf_version": "V0",
"text_bytes": 57864,
"rodata_bytes": 68080,
"instruction_count": 7024,
"function_count": 237,
"functions": [
{
"pc": 0,
"name": "fn_00000",
"instructions": 2
},
{
"pc": 2,
"name": "fn_00002",
"instructions": 2
}
],
"syscalls": [
{
"name": "abort",
"calls": 67
},
{
"name": "sol_log_",
"calls": 5
}
],
"strings": [
{
"offset": 9516,
"text": "El)9ya"
},
{
"offset": 58112,
"text": " (bytes Some <= None"
}
],
"disassembly_sha256": "429744d001ba19f7b8fbb888da0208bef2bd98c364ed5a3d16bc1c7ccda9c551",
"disassembly_lines": 7498,
"corpus": {
"sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
"real_instructions": 1000,
"discriminators": {
"1": [
{
"prefix": "52",
"count": 33
},
{
"prefix": "38",
"count": 32
}
],
"4": [
{
"prefix": "29737461",
"count": 24
},
{
"prefix": "686f6c64",
"count": 22
}
],
"8": [
{
"prefix": "297374616b655f76",
"count": 24
},
{
"prefix": "686f6c6465722d6e",
"count": 22
}
]
},
"group_width": 8,
"patterns": [
{
"discriminator": "297374616b655f76",
"width": 8,
"count": 24,
"accounts_min": 1,
"accounts_max": 1,
"data_len_min": 42,
"data_len_max": 42,
"pattern": "sw",
"pattern_share": 1
},
{
"discriminator": "686f6c6465722d6e",
"width": 8,
"count": 22,
"accounts_min": 0,
"accounts_max": 0,
"data_len_min": 81,
"data_len_max": 81,
"pattern": "",
"pattern_share": 1
}
],
"account_owners": [
{
"owner": "11111111111111111111111111111111",
"accounts": 15,
"sizes": [
{
"size": 0,
"count": 15
}
]
}
],
"cpi_targets": [],
"cpi_programs_loaded": []
}
},
"downloads": {
"elf": "/api/v1/teardown/MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr/elf",
"disassembly": "/api/v1/teardown/MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr/disasm",
"corpus": "/api/v1/corpus/731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858"
}
}MCP server
The MCP server lives at /api/mcp: JSON-RPC 2.0 over HTTP POST (streamable HTTP, JSON responses). Point any MCP client at that URL.
| Tool | Arguments | Returns |
|---|---|---|
list_bounties | status (optional) | Bounties with program, USDC, backers and status |
get_teardown | program | The teardown kit of a program |
get_verdict | id | A verdict with its hashes and the first mismatches |
submit_status | submission | The job state of a submission: queued, building, replaying, done |
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/mcp" -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2025-06-18",
"capabilities": {
"tools": {
"listChanged": false
}
},
"serverInfo": {
"name": "decompile-bounty",
"version": "1.0.0"
},
"instructions": "Read bounties on closed Solana programs, their teardown kits, the replay judge's verdicts and submission status."
}
}SITE=https://www.decompilebounty.com
curl -s "$SITE/api/mcp" -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{
"name": "list_bounties",
"description": "Every bounty: program id and label, USDC in escrow (read from the chain), backers, days left, status, the Memo that f...",
"inputSchema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "optional filter: open, awaiting_funds, won, paid, refunding"
}
}
}
},
{
"name": "get_teardown",
"description": "The teardown kit of a program: snapshot (loader, upgrade authority, deploy slot, ELF hash), functions, syscalls, roda...",
"inputSchema": {
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "Solana program id"
}
},
"required": [
"program"
]
}
}
]
}
}SITE=https://www.decompilebounty.com
curl -s "$SITE/api/mcp" -H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_verdict","arguments":{"id":"0001"}}}'{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [
{
"type": "text",
"text": "(the same JSON as structuredContent)"
}
],
"structuredContent": {
"id": "0001",
"verdict": "PASS",
"program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
"bounty": null,
"calibration": true,
"label": "Calibration: SPL Memo v3, rebuilt source",
"matched": 10985,
"total": 10985,
"cases": 11000,
"budget_bound": 15,
"real_matched": 1000,
"real_total": 1000,
"ok_path": 7107,
"report_sha256": "4b029ffbe428ca3d614c609b9bd56e5379afb1193b9ed341e56ded470f0dab03",
"source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
"candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
"corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
"after_winner": false,
"created_at": "2026-11-02T15:44:27.485Z",
"memo": {
"status": "pending",
"text": "decomp:proof:calibration:mvzfiv4jc190a923:ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2:4b029ffbe4..."
},
"report": {
"format": "decomp-verdict/1",
"verdict": "PASS",
"reason": "all 10985 compared cases match, 7107 on the success path",
"program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
"loader": "BPFLoader2111111111111111111111111111111111",
"original_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
"candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
"corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
"source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
"corpus_elf_sha256_matches_original": true,
"cases_total": 11000,
"compared": 10985,
"budget_bound": 15,
"matched": 10985,
"real_total": 1000,
"real_matched": 1000,
"fuzz_total": 9985,
"fuzz_matched": 9985,
"fuzz_seed": "c34cf12a2e0f0762",
"ok_path_original": 7107,
"ok_path_minimum": 100,
"mismatches_total": 0,
"mismatches": [],
"original_outcomes_sha256": "6979bdf2202d5b907d406e66d14d0f28267055d5e2bc8ede07d6eb7f9217476f",
"candidate_outcomes_sha256": "32b9ede4837dc8ae0e3fd18eac7bf32d2b5df72d53e803d6003970c9103e0ead",
"rules": {
"replayer": "decomp-replayer 1.0.0",
"litesvm": "0.17.0",
"feature_set": "litesvm mainnet feature set",
"compared": "result and error, logs line by line, return data, lamports owner and data of every writable account",
"stripped": "lines 'Program <id> consumed N of M compute units'; cases where the original exhausts its compute budget are counted ..."
}
},
"page": "https://<site>/verdicts/0001"
},
"isError": false
}
}