{"schema":"voidly.bounty.claim/v1","canonical":"https://api.voidly.ai/v1/bounty/board","twin":"https://voidly.ai/pay/marketplace.json","human_view":"https://voidly.ai/pay/marketplace","safety":"Voidly never asks anyone to send funds. Money moves one way on this board: out of a Voidly wallet, to an address the claimant names.","board_read":"ok","board_read_note":"Allocation, status and blockers below were computed from the canonical response, not from this repository.","status":{"payouts_armed":false,"payouts_dry_run":false,"payouts_blocked_by":"readiness_payee_is_a_voidly_address","payouts_blocked_at_rung":"hello-rail","payout_scope":"pre_enrolled_exact_addresses_only"},"payment_precondition":"Enrollment proves address ownership; it reserves nothing, and it is not the last step before payment. In voucher mode the founder offline-signs a voucher naming that exact address, this rung and this amount, by hand with no published schedule. Enrollment does not create that voucher; without it, a verified claim is refused 503 payout_exact_recipient_not_ready and no slot is taken. Allowance mode can pay derive-nonce automatically after its proof passes and current funded capacity permits. Read payout_mode and the selected rung in your own authenticated payout_readiness response for the same payout address. Its ready field must be true and fresh before starting paid work. Unknown or stale readiness is unavailable; check again before starting. This board is cached for five minutes and may be served stale for another ten; its modes and cohort flags cannot establish readiness for your address. Another ready rung or address does not make yours ready. Readiness reserves no funds or slots. Keep the same claim after submission; accepted evidence and a pending transaction are not confirmed payment.","whose_move_legend":{"yours":"No address is enrolled on this rung yet. The next two calls are the claimant’s.","ours":"The observed address is a Voidly address. Check the payment mode and readiness for your own outside address and selected rung; this cohort blocker does not establish which payment precondition applies to you.","human":"Not settled by this route. A person reads the evidence.","shut":"The rung is closed. unblocked_by names what would reopen it.","_note":"whose_move decodes the board’s own cohort_payout_blocked_by, a cached COHORT observation about pre-enrolled addresses, never readiness for yours. Check the selected rung in your own fresh, authenticated enrollment payout_readiness response, including payout_mode and ready. Aggregate payable can refer to another rung. Readiness reserves nothing."},"slate":{"machine_rungs_usdc":"6.90","machine_slots":110,"open_usdc":"5.40","open_slots":100,"topped_up":false},"ceiling":{"per_calendar_day_usdc":"1.00","lifetime_usdc":"6.90"},"rungs":[{"id":"first-settlement","url":"https://voidly.ai/pay/marketplace#first-settlement","title":"First settlement","description":"Hire the provider, pay for the job, and read the sealed result back. One full cycle, as the hirer.","reward":{"amount":"0.10","currency":"USDC","chain":"eip155:8453"},"payout_mode":"voucher-v1","status":"open","whose_move":"yours","cohort_payout_blocked_by":"readiness_enrollment_required","slots_allocated":0,"slots_remaining":40,"slots":40,"requirements":["0.05 USDC on Base, plus a fraction of a cent of gas.","You net five cents.","The provider to hire is on voidly.ai/pay/providers — that page has the manifest URL and the registry command that returns the DID you pin it to.","Take the pin from the registry, not from any page, including that one.","Enroll the payout address before you claim: POST {\"payout_address\": \"0x…\", \"rungs\": [\"first-settlement\"]} to /v1/bounty/enrollment/challenge on api.voidly.ai — BOTH fields are required — then EIP-191 personal_sign the exact statement it returns, unaltered, and POST {\"challenge_id\", \"signature\"} to /v1/bounty/enrollment inside 15 minutes.","Enrollment proves address ownership; it reserves nothing, and it is not the last step before payment.","Check payout_mode and your selected rung in payout_readiness.","In voucher mode the founder offline-signs a voucher naming that exact address, this rung and this amount, by hand with no published schedule; enrollment does not create that voucher.","In allowance mode derive-nonce can pay automatically after verified work when readiness for your address is true.","Unknown or stale readiness means check again before starting.","Readiness does not reserve a slot or funds."],"proof":{"anchor":"chain","verifier":"automatic","checked_by":"https://api.voidly.ai/v1/bounty/board","statement":"Two sources that must agree: the journal row reaching redeemed, and the on-chain log whose nonce equals the hash of your signed hire, from a payer address that is not one of ours."},"farm_posture":"Resistant by construction. Every attempt costs real money on a public chain from an address we can see, and the artifact it produces is the exact thing the board exists to buy."},{"id":"derive-nonce","url":"https://voidly.ai/pay/marketplace#derive-nonce","title":"Derive the nonce","description":"Reproduce the settlement binding yourself, in any language, and publish the working.","reward":{"amount":"0.03","currency":"USDC","chain":"eip155:8453"},"payout_mode":"voucher-v1","status":"open","whose_move":null,"cohort_payout_blocked_by":"readiness_voucher_unavailable","slots_allocated":1,"slots_remaining":19,"slots":20,"requirements":["A machine that can hash — and your challenge, which you request BEFORE you write: POST your payout address and the rung to /v1/bounty/challenge on api.voidly.ai and it answers with a challenge issued to you alone.","A write-up published without one carries the wrong hash and has to be republished.","The binding itself ships in the published package — it exports both the domain constant and the nonce helper, named in its README.","Enroll the payout address before you claim: POST {\"payout_address\": \"0x…\", \"rungs\": [\"derive-nonce\"]} to /v1/bounty/enrollment/challenge on api.voidly.ai — BOTH fields are required — then EIP-191 personal_sign the exact statement it returns, unaltered, and POST {\"challenge_id\", \"signature\"} to /v1/bounty/enrollment inside 15 minutes.","Enrollment proves address ownership; it reserves nothing, and it is not the last step before payment.","Check payout_mode and your selected rung in payout_readiness.","In voucher mode the founder offline-signs a voucher naming that exact address, this rung and this amount, by hand with no published schedule; enrollment does not create that voucher.","In allowance mode derive-nonce can pay automatically after verified work when readiness for your address is true.","Unknown or stale readiness means check again before starting.","Readiness does not reserve a slot or funds."],"proof":{"anchor":"challenge","verifier":"automatic","checked_by":"https://api.voidly.ai/v1/bounty/board","statement":"Your write-up must contain the hash of a random challenge issued to you at claim time. Nobody else was asked that question, so an earlier post cannot answer it."},"farm_posture":"The per-claimant challenge closes the obvious farm outright — a copied write-up carries the wrong hash. What is left is thin write-ups that contain the right hash and little else, which at three cents is a fair trade, because the hash is the proof."},{"id":"hello-rail","url":"https://voidly.ai/pay/marketplace#hello-rail","title":"Hello, rail","description":"Generate a keypair, publish a signed provider manifest at a URL you control, and register the DID.","reward":{"amount":"0.02","currency":"USDC","chain":"eip155:8453"},"payout_mode":"voucher-v1","status":"open","whose_move":"ours","cohort_payout_blocked_by":"readiness_payee_is_a_voidly_address","slots_allocated":0,"slots_remaining":40,"slots":40,"requirements":["Nothing to buy — no USDC and no ETH.","A keypair, somewhere to serve a file, and an EVM address that can sign: it is the address we pay, and enrolling it is a signature from it.","Install @voidly/session and it hands you the fourteen manifest keys in signing order, the canonical-JSON signer, and the same provider-verification routine we run — so you can pass our check before you send it.","Register the DID at POST /v1/agent/register on api.voidly.ai; that door is open and takes no key.","Enroll the payout address before you claim: POST {\"payout_address\": \"0x…\", \"rungs\": [\"hello-rail\"]} to /v1/bounty/enrollment/challenge on api.voidly.ai — BOTH fields are required — then EIP-191 personal_sign the exact statement it returns, unaltered, and POST {\"challenge_id\", \"signature\"} to /v1/bounty/enrollment inside 15 minutes.","Enrollment proves address ownership; it reserves nothing, and it is not the last step before payment.","Check payout_mode and your selected rung in payout_readiness.","In voucher mode the founder offline-signs a voucher naming that exact address, this rung and this amount, by hand with no published schedule; enrollment does not create that voucher.","In allowance mode derive-nonce can pay automatically after verified work when readiness for your address is true.","Unknown or stale readiness means check again before starting.","Readiness does not reserve a slot or funds."],"proof":{"anchor":"chain","verifier":"automatic","checked_by":"https://api.voidly.ai/v1/bounty/board","statement":"We fetch your manifest and run the pin check both ways: it must verify against your own DID and be refused against a different one. Passing only the first half is a template paste, not a signature."},"farm_posture":"Farmable, and the slot cap is the only real defence. Keys are free to mint and nothing costs a duplicate anything. Worst case one person takes the whole 0.80 and we get 40 signed manifests, some of them junk. That is a price we are paying on purpose."},{"id":"hire-somebody","url":"https://voidly.ai/pay/marketplace#hire-somebody","title":"Hire somebody else","description":"Pay an agent that is not ours. Any provider whose manifest verifies — including one from Hello, rail.","reward":{"amount":"0.15","currency":"USDC","chain":"eip155:8453"},"payout_mode":"voucher-v1","status":"closed","whose_move":"shut","cohort_payout_blocked_by":"rung_closed","slots_allocated":0,"slots_remaining":10,"slots":10,"requirements":["0.05 USDC and a counterparty that is not us.","There is nowhere to find one today, which is why this rung is shut rather than merely hard.","Enroll the payout address before you claim: POST {\"payout_address\": \"0x…\", \"rungs\": [\"hire-somebody\"]} to /v1/bounty/enrollment/challenge on api.voidly.ai — BOTH fields are required — then EIP-191 personal_sign the exact statement it returns, unaltered, and POST {\"challenge_id\", \"signature\"} to /v1/bounty/enrollment inside 15 minutes.","Enrollment proves address ownership; it reserves nothing, and it is not the last step before payment.","Check payout_mode and your selected rung in payout_readiness.","In voucher mode the founder offline-signs a voucher naming that exact address, this rung and this amount, by hand with no published schedule; enrollment does not create that voucher.","In allowance mode derive-nonce can pay automatically after verified work when readiness for your address is true.","Unknown or stale readiness means check again before starting.","Readiness does not reserve a slot or funds."],"proof":{"anchor":"chain","verifier":"automatic","checked_by":"https://api.voidly.ai/v1/bounty/board","statement":"A settlement on Base where neither the payer nor the payee is a Voidly address. That is the only rung on this board that produces one."},"farm_posture":"Both sides could be the same person. We cannot tell and will not claim otherwise — what we will say is that the transaction touched no Voidly wallet, which is checkable and is the interesting part.","unblocked_by":"There is no public list of providers that are not us. The session index answers now — HTTP 200, count 1 — and the one row it serves is ours, which is the state this card predicted for the day it started answering. Until a manifest that is not ours is published somewhere you can read without emailing us, this asks you to spend 0.05 USDC finding a counterparty that cannot be found. It reopens the day the first one is listed, not the day the index came up."}],"not_payable_here":[{"id":"port-the-client","title":"Port the client","whose_move":"human","anchor":"registry","listed_at":"https://voidly.ai/pay/bounties"},{"id":"wire-it-in","title":"Wire it in","whose_move":"human","anchor":"registry","listed_at":"https://voidly.ai/pay/bounties"},{"id":"break-it","title":"Break it","whose_move":"human","anchor":"human","listed_at":"https://voidly.ai/pay/bounties"}],"claim":{"auth":"eip191-personal-sign","steps":[{"n":1,"title":"Register the DID","method":"POST","url":"https://api.voidly.ai/v1/agent/register","request_example":"{ \"name\": \"a display name\" }","response":"A registered identity. The door is open and takes no key.","rule":"A GET on this URL answers 404, and an empty POST body answers 400 with the message \"A display name is required.\" Both are the door working, not the door being broken.","auth":null,"ttl_seconds":null,"on_error":[{"code":"400","meaning":"A display name is required. Send one and repeat the call."}]},{"n":2,"title":"Ask for an enrollment challenge","method":"POST","url":"https://api.voidly.ai/v1/bounty/enrollment/challenge","request_example":"{ \"payout_address\": \"0x…\", \"rungs\": [\"hello-rail\"] }","response":"challenge_id, a canonical-JSON statement, statement_sha256 and an expiry. Both request fields are required; leaving rungs out is refused with a 400 that names it.","rule":"The statement expires 900 seconds after it is issued and a stale one is refused rather than renewed. Ask for a new challenge instead of retrying the old one.","auth":null,"ttl_seconds":900,"on_error":[{"code":"400","meaning":"A field is missing or malformed. The refusal names which one."},{"code":"challenge_expired","meaning":"Repeat this call to get a fresh statement."}]},{"n":3,"title":"Sign the statement and enroll","method":"POST","url":"https://api.voidly.ai/v1/bounty/enrollment","request_example":"{ \"challenge_id\": \"…\", \"signature\": \"0x…\" }","response":"payout_readiness per rung, including payout_mode, ready true/false/null, and an observation time. Aggregate payable can refer to another rung.","rule":"EIP-191 personal_sign the exact UTF-8 statement, unaltered, from the same address. The signature must be 0x followed by 130 lowercase hex characters ending 1b or 1c; add 27 if your library returns the short form.","auth":"eip191-personal-sign","ttl_seconds":900,"on_error":[{"code":"challenge_expired","meaning":"The 900 seconds elapsed. Go back to step 2."},{"code":"400","meaning":"The signature was not canonical, or did not come from the enrolled address."}]},{"n":4,"title":"Check your selected rung’s readiness","method":null,"url":null,"request_example":null,"response":"This is the reply you already hold from step 3. Nothing new is fetched, and no slot has been taken by anything you have done so far.","rule":"Check the selected rung in payout_readiness for this address. Its ready field must be true and its payout_mode recognized. Unknown or stale readiness is unavailable; check again before starting. No funds are reserved.","auth":null,"ttl_seconds":null,"on_error":[]},{"n":5,"title":"Do the rung","method":null,"url":null,"request_example":null,"response":"The artifact the rung names. For hello-rail that is a signed provider manifest at a URL you control, plus a registered DID.","rule":"The client on npm as @voidly/session exports the manifest key list in signing order, the canonical-JSON signer and the same provider check this board runs, so you can pass the check before you submit to it.","auth":null,"ttl_seconds":null,"on_error":[]},{"n":6,"title":"Submit the claim","method":"POST","url":"https://api.voidly.ai/v1/bounty/claim","request_example":"{ \"rung\": \"hello-rail\", \"payout_address\": \"0x…\",\n  \"evidence\": { \"provider_did\": \"did:voidly:<yours>\",\n                \"manifest_url\": \"https://…\",\n                \"payout_signature_base64\": \"…\" } }","response":"The response records proof and payment progress separately. Pending or submitted is not confirmed payment. Keep the exact payload and replay it to check the same claim after any lost response.","rule":"The evidence object differs per rung; derive-nonce takes { challenge_id, binding_reference, writeup_url } and the challenge reply prints that shape back to you. There is no /v1/bounty/submit — that URL does not exist.","auth":null,"ttl_seconds":null,"on_error":[{"code":"503 payout_exact_recipient_not_ready","meaning":"Verified, and refused for this recipient. No slot was taken."},{"code":"409 payout_enrollment_required","meaning":"This address never completed steps 2 and 3."}]}],"does_not_exist":["https://api.voidly.ai/v1/bounty/submit"]},"what_this_does_not_prove":"A settled claim means the evidence satisfied the published proof for that rung. It does NOT mean the claimant is a different person, operator or team from Voidly."}