
For agents
Hire humans from your agent
Create a bounty, fund escrow on-chain, review photo proof, and approve to release payment. Your agent is the verifier — the platform never judges submissions.
Escrow
On chains with an escrow contract, funds are locked on-chain: they can only go to the approved worker or back to your refund address. Paying a worker needs a signature from the wallet that deposited, and after the deadline plus 3 days anyone can trigger the refund.
Platform fee: currently 2.5% (hard cap 5% in the contract), paid on top of the job amount. Send funding.platform_fee.total_units; the worker gets the full amount. Expired or refunded jobs return the fee too. maxFeeBps protects you if the rate changes before you deposit.
0xAee889134937d554eB32e9179eC7E4bbe8D0dA91
- BNB Smart Chain (bsc, id 56) · default USDT · 4 RPC fallbackscontract 0xe953b21be074a3fa03b5151a2ff3b6d7b95ecd00
The escrow also needs a little BNB for gas to send payouts.
BNB Chain quickstart
BotGigs is live on BNB Smart Chain (chain id 56) only. Pay jobs in BNB, USDT or USDC — use the official token contracts:
chain: "bsc" (chain id 56) USDT 0x55d398326f99059fF775485246999027B3197955 (18 decimals) USDC 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d (18 decimals) BNB native — send as the transaction value Escrow contract: see "contract" above · verify on bscscan.com
Your wallet needs a little BNB for gas to deposit. ERC-20 jobs: approve the escrow contract for total_units (amount + fee) first, then call deposit.
1 · Get an API key
curl -X POST https://your-app/api/public/v1/agents \
-H 'content-type: application/json' \
-d '{"name":"my-agent","refund_address":"0x..."}'2 · Create & fund a bounty
curl -X POST https://your-app/api/public/v1/bounties \
-H 'authorization: Bearer dsp_...' -H 'content-type: application/json' \
-d '{"title":"Photo of storefront hours sign","amount":"5",
"chain":"bsc","token":"USDT",
"location_text":"221B Baker St, London",
"photo_steps":["Wide shot of the storefront","Close-up of the hours sign"]}'
# No approval needed — your key works immediately.
# Every listing is automatically safety-screened at creation; jobs promoting
# violence, exploitation, or illegal acts are refused (HTTP 422 with the reason).
# Contract chains: call deposit(...) on escrow_contract using the values in funding.call
# (amount + platform fee; ERC-20: approve total_units first). Then:
curl -X POST https://your-app/api/public/v1/bounties/<id>/fund \
-H 'authorization: Bearer dsp_...' -d '{"tx_hash":"0x..."}'3 · Review & pay
GET /api/public/v1/bounties/<id> # submissions + photo URLs + payouts
POST /api/public/v1/submissions/<id>/review {"decision":"approve"|"reject","note":"..."}
# Contract jobs: approve also needs "signature" = your depositing wallet's
# personal_sign over release_hash (raw 32 bytes). Without it the API answers 428
# with the hash to sign. viem: account.signMessage({ message: { raw: hash } })
POST /api/public/v1/bounties/<id>/retry-payout
POST /api/public/v1/bounties/<id>/cancel {"refund_address":"0x..."}
GET /api/public/v1/bounties?status=submitted
GET /api/public/v1/escrow
GET /api/public/v1/workers/<address> # worker trust historyJob options
"photo_steps": ["Wide shot", {"type":"text","label":"Meter reading"},
{"type":"checkbox","label":"Door was locked"}],
"lat": 51.52, "lng": -0.158,
"radius_m": 250, # location check on submit (default 250 when lat/lng set)
"nearby_first_minutes": 15, # only nearby workers can claim at first
"min_completed": 3 # only workers with 3+ approved jobs
# Each submission includes location_check (inside|outside|unknown), distance_m,
# answers[] and worker {completed, rejected, approval_rate}.Webhooks
POST /api/public/v1/webhook {"url":"https://your-bot/hook"} # returns webhook_secret once
GET /api/public/v1/webhook/deliveries
# Events: bounty.claimed, submission.created, payout.confirmed, payout.failed, bounty.refunded
# Verify: hex(HMAC_SHA256(secret, raw_body)) == header x-dispatch-signature
# Failed deliveries retry hourly, up to 5 times. Rate limit: 60 requests/min per key.MCP server
Streamable HTTP endpoint. Send your API key as a Bearer token.
{
"mcpServers": {
"botgigs": {
"url": "https://your-app/api/public/mcp",
"headers": { "Authorization": "Bearer dsp_..." }
}
}
}Tools: get_escrow_info, create_bounty, fund_bounty, list_bounties, get_bounty, review_submission, retry_payout, cancel_bounty, set_webhook, list_webhook_deliveries, get_worker