{
  "openapi": "3.1.0",
  "info": {
    "title": "ToolMint Bounty Finder",
    "version": "0.1.2",
    "description": "Live crypto bounties, grants, hackathons and bug bounties as one JSON shape. Pay per call with USDC on Base via x402. Facts are pulled live from each public source and linked back; ToolMint is not affiliated with any source. Payouts, deadlines and eligibility can change \u2014 always confirm on the source page before working. Not financial advice.",
    "x-guidance": "Use GET /search to list live paid work. Filter with kind=bounty,grant,hackathon,bug_bounty, token=USDC, stablecoin=true, minUsd=500, dueWithinDays=14, noKyc=true, q=solana. Each item has payout {amount, token, usdEstimate}, deadline, requirements and the source url. usdEstimate is null when it cannot be stated honestly (non-stable tokens, non-USD prizes). Unpaid calls get 402 with x402 requirements (USDC on Base). No matches (404) and upstream outages (502) are not charged. GET /sources is free.",
    "contact": {
      "email": "toolmint.dev@gmail.com",
      "name": "ToolMint"
    }
  },
  "paths": {
    "/health": {
      "get": {
        "operationId": "health",
        "summary": "Liveness",
        "security": [],
        "responses": {
          "200": {
            "description": "ok"
          }
        }
      }
    },
    "/sources": {
      "get": {
        "operationId": "bounty_sources",
        "summary": "Sources and terms notes (free)",
        "security": [],
        "responses": {
          "200": {
            "description": "Source list"
          }
        }
      }
    },
    "/search": {
      "get": {
        "operationId": "bounty_search",
        "summary": "Search live crypto bounties, grants, hackathons and bug bounties",
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.010000"
          },
          "protocols": [
            {
              "x402": {}
            }
          ],
          "network": "eip155:8453",
          "payTo": "0xfbF7413bcB3a604936775C96FDbe0b0C9c9E37F5",
          "asset": "USDC",
          "scheme": "exact",
          "amountAtomic": "10000"
        },
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma list of bounty, grant, hackathon, bug_bounty, or all (alias: type)"
          },
          {
            "name": "source",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Comma list of superteam_bounties, superteam_grants, immunefi, devpost"
          },
          {
            "name": "token",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9]{2,10}$"
            },
            "description": "Payout token, e.g. USDC"
          },
          {
            "name": "stablecoin",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Only stablecoin payouts"
          },
          {
            "name": "minUsd",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 0
            },
            "description": "Minimum USD estimate"
          },
          {
            "name": "dueWithinDays",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 365
            },
            "description": "Deadline within N days"
          },
          {
            "name": "noKyc",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "description": "Drop items that require KYC"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "open",
                "upcoming"
              ]
            },
            "description": "Default active (open + upcoming)"
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 80
            },
            "description": "Text match"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "deadline",
                "payout",
                "newest"
              ]
            },
            "description": "Default deadline (soonest first, rolling last)"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100
            },
            "description": "Default 25"
          }
        ],
        "responses": {
          "200": {
            "description": "Items JSON (partial:true if a source failed)"
          },
          "400": {
            "description": "Bad input, code bad_input (no charge; rejected before payment)"
          },
          "402": {
            "description": "Payment Required"
          },
          "404": {
            "description": "No matches, code no_matches (not charged)"
          },
          "500": {
            "description": "Internal error, code internal (not charged)"
          },
          "502": {
            "description": "All selected sources unavailable, code upstream_error (not charged; a failed source is retried after 60 s)"
          },
          "503": {
            "description": "Payment init down, code payment_unavailable, Retry-After (not charged)"
          }
        }
      }
    }
  }
}