Server definition
- Hash
- sha256:1d9234dffef3131050ee4030e7d3b32466dbbb2f7d63efb63542c2157ecb2ebd
- What it is
- What a remote MCP server returned when asked what it offers: 11 tools
The blob, as servednamed by its sha256
{
"instructions": "BotGigs lets you hire people for real-world tasks. Flow: create_bounty -> deposit into the escrow contract -> fund_bounty -> wait for a submission (webhook or get_bounty) -> review_submission. Prompts cover the standard workflows: post_a_job, check_my_jobs, review_a_submission, wire_webhooks, refund_a_job. Only BNB Smart Chain is live.",
"tools": [
{
"description": "Cancels a job that no worker is actively claiming and refunds the full amount plus the fee from the contract to your refund address. It only works before a live claim or an submitted proof — once work is in, review it instead. The refund is on-chain and needs no permission from BotGigs.",
"inputSchema": {
"properties": {
"bounty_id": {
"description": "Job id",
"type": "string"
},
"refund_address": {
"description": "Wallet to refund (defaults to the depositing wallet)",
"type": "string"
}
},
"required": [
"bounty_id"
],
"type": "object"
},
"name": "cancel_bounty",
"outputSchema": {
"additionalProperties": true,
"description": "The job cancelled and the money on its way back.",
"properties": {
"bounty_status": {
"description": "cancelled.",
"type": "string"
},
"refund": {
"additionalProperties": true,
"description": "The refund transfer, or absent if the job was never funded.",
"properties": {
"amount_units": {
"description": "Amount in the token's smallest units.",
"type": "string"
},
"attempts": {
"description": "Broadcast attempts so far.",
"type": "number"
},
"bounty_id": {
"description": "The job this payout belongs to.",
"type": "string"
},
"chain": {
"description": "Network the transfer was sent on.",
"type": "string"
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"id": {
"description": "Payout id (uuid).",
"type": "string"
},
"kind": {
"description": "payout pays a worker; refund returns the money to the funding wallet.",
"type": "string"
},
"last_error": {
"description": "Why the last attempt failed, or null.",
"type": [
"string",
"null"
]
},
"status": {
"description": "pending | sent | confirmed | failed. failed can be retried with retry_payout.",
"type": "string"
},
"submission_id": {
"description": "The submission that triggered it, or null for a refund.",
"type": [
"string",
"null"
]
},
"to_address": {
"description": "Wallet that receives the money.",
"type": "string"
},
"tx_hash": {
"description": "0x hash of the on-chain transfer, or null until broadcast.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "Creates a real-world job listing and returns exact funding instructions. The job stays invisible to workers until the deposit lands on-chain and fund_bounty confirms it. Every listing is safety-screened at creation and cannot be skipped: violent, exploitative or illegal tasks are refused with HTTP 422 and the reason. Follow up with get_bounty to watch submissions, and review_submission to pay.",
"inputSchema": {
"properties": {
"amount": {
"description": "Decimal amount, e.g. \"5.00\"",
"type": "string"
},
"chain": {
"default": "bsc",
"description": "Network. Only BNB Smart Chain (bsc) is live.",
"enum": [
"bsc"
],
"type": "string"
},
"deadline": {
"description": "ISO time after which the job expires and is refundable",
"format": "date-time",
"type": "string"
},
"description": {
"description": "Full instructions for the worker",
"type": "string"
},
"lat": {
"description": "Job latitude (enables map pin and location check)",
"type": "number"
},
"lng": {
"description": "Job longitude",
"type": "number"
},
"location_text": {
"description": "Human-readable place, e.g. \"123 Main St, Denver\"",
"type": "string"
},
"min_completed": {
"description": "Only workers with at least this many completed jobs can claim",
"type": "number"
},
"nearby_first_minutes": {
"description": "Offer to nearby workers only for this many minutes after funding",
"type": "number"
},
"photo_steps": {
"description": "1-8 proof steps. A string is a photo step; or {type:'photo'|'text'|'checkbox', label}.",
"items": {
"anyOf": [
{
"type": "string"
},
{
"properties": {
"label": {
"type": "string"
},
"type": {
"enum": [
"photo",
"text",
"checkbox"
],
"type": "string"
}
},
"required": [
"type",
"label"
],
"type": "object"
}
]
},
"type": "array"
},
"radius_m": {
"description": "Allowed distance from lat/lng for the location check (default 250)",
"type": "number"
},
"title": {
"description": "Short job title shown to workers, e.g. \"Photo of the menu board at Cafe Luna\"",
"type": "string"
},
"token": {
"description": "Payment token; NATIVE = BNB",
"enum": [
"USDT",
"USDC",
"NATIVE"
],
"type": "string"
}
},
"required": [
"title",
"amount",
"photo_steps"
],
"type": "object"
},
"name": "create_bounty",
"outputSchema": {
"additionalProperties": true,
"description": "The new job plus the exact steps to fund it.",
"properties": {
"bounty": {
"additionalProperties": true,
"description": "A job listing and its live state.",
"properties": {
"amount": {
"description": "Pay in decimal form, e.g. \"5.00\".",
"type": "string"
},
"amount_units": {
"description": "Pay in the token's smallest units.",
"type": "string"
},
"chain": {
"description": "Network key, e.g. bsc.",
"type": "string"
},
"claim_expires_at": {
"description": "ISO time an unsubmitted claim lapses and the job reopens.",
"type": [
"string",
"null"
]
},
"claimed_at": {
"description": "ISO time the job was claimed.",
"type": [
"string",
"null"
]
},
"claimed_by": {
"description": "Wallet of the worker holding the claim, or null.",
"type": [
"string",
"null"
]
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"deadline": {
"description": "ISO time when the job expires and becomes refundable.",
"type": [
"string",
"null"
]
},
"description": {
"description": "Full instructions for the worker.",
"type": "string"
},
"escrow_contract": {
"description": "Contract holding the funds, or null if not contract-funded.",
"type": [
"string",
"null"
]
},
"funding_tx": {
"description": "0x hash of the deposit that funded this job, or null until funded.",
"type": [
"string",
"null"
]
},
"id": {
"description": "Job id (uuid). Pass to fund_bounty, get_bounty and cancel_bounty.",
"type": "string"
},
"lat": {
"description": "Job latitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"lng": {
"description": "Job longitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"location_text": {
"description": "Human-readable place, e.g. \"123 Main St, Denver\".",
"type": [
"string",
"null"
]
},
"min_completed": {
"description": "Completed jobs a worker needs before they can claim this one.",
"type": "number"
},
"moderation_summary": {
"description": "Short reason from the safety screen.",
"type": [
"string",
"null"
]
},
"moderation_verdict": {
"description": "Safety screen result: ok, caution, or pending.",
"type": "string"
},
"nearby_until": {
"description": "ISO time until only nearby workers can claim, or null if not set.",
"type": [
"string",
"null"
]
},
"photo_steps": {
"description": "Proof steps the worker must satisfy.",
"type": "array"
},
"radius_m": {
"description": "Metres from lat/lng a worker may be to claim or to submit.",
"type": [
"number",
"null"
]
},
"status": {
"description": "awaiting_funding | open | claimed | submitted | paying | completed | payout_failed | cancelled | expired.",
"type": "string"
},
"title": {
"description": "Job title shown to workers.",
"type": "string"
},
"token_address": {
"description": "Token contract address, or null when paid in native BNB.",
"type": [
"string",
"null"
]
},
"token_decimals": {
"description": "Decimals used to convert amount into amount_units.",
"type": "number"
},
"token_symbol": {
"description": "Payment token: USDT, USDC, or BNB for native.",
"type": "string"
},
"updated_at": {
"description": "ISO time of the last change.",
"type": "string"
}
},
"type": "object"
},
"funding": {
"additionalProperties": true,
"description": "Exactly how to pay the job into escrow, then confirm it.",
"properties": {
"amount": {
"description": "Job pay in decimal form.",
"type": "string"
},
"amount_units": {
"description": "Job pay in the token's smallest units, excluding the fee.",
"type": "string"
},
"call": {
"additionalProperties": true,
"description": "The deposit() arguments, ready to use.",
"properties": {
"amount": {
"description": "Job pay in the smallest units.",
"type": "string"
},
"deadline": {
"description": "Unix seconds after which the job is refundable.",
"type": "number"
},
"function": {
"description": "Full function signature.",
"type": "string"
},
"id": {
"description": "bytes32 job id derived from the job uuid.",
"type": "string"
},
"maxFeeBps": {
"description": "Fee ceiling you accept for this job.",
"type": "number"
},
"refundTo": {
"description": "Your refund address — put your own wallet here.",
"type": "string"
},
"token": {
"description": "Token address to pass, or the zero address for native BNB.",
"type": "string"
},
"value": {
"description": "Wei to send with the call (0 when paying in a token).",
"type": "string"
}
},
"type": "object"
},
"chain": {
"description": "Network key to send on.",
"type": "string"
},
"chain_id": {
"description": "Numeric network id, e.g. 56 for BNB Smart Chain.",
"type": "number"
},
"escrow_contract": {
"description": "Contract to call deposit() on.",
"type": [
"string",
"null"
]
},
"method": {
"description": "contract when the job is held by the escrow contract.",
"type": "string"
},
"next": {
"description": "What to call once the money is on-chain.",
"type": "string"
},
"platform_fee": {
"additionalProperties": true,
"description": "The fee the job was funded at. The bot pays it on top; the worker always receives the full amount.",
"properties": {
"fee_units": {
"description": "Fee in the token's smallest units.",
"type": "string"
},
"paid_by": {
"description": "Who pays the fee.",
"type": "string"
},
"rate_bps": {
"description": "Fee in basis points, e.g. 250 = 2.5%.",
"type": "number"
},
"rate_percent": {
"description": "Fee as a percent.",
"type": "number"
},
"refunded_if_job_expires": {
"description": "True: an expired job returns the fee too.",
"type": "boolean"
},
"total_units": {
"description": "Job pay plus fee in the smallest units — this is what you send.",
"type": "string"
}
},
"type": "object"
},
"safety": {
"description": "Plain-language note on what can and cannot happen to the locked funds.",
"type": "string"
},
"send_to": {
"description": "Wallet to send to on networks without the contract deployed.",
"type": [
"string",
"null"
]
},
"steps": {
"description": "Ordered instructions to follow.",
"type": "array"
},
"token": {
"description": "Token symbol to pay in.",
"type": "string"
},
"token_address": {
"description": "Token contract address, or null for native BNB.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "Confirms funding by submitting the on-chain transaction hash that paid the escrow. Once accepted the job goes live, workers can claim it, and any nearby-first window starts here. The transaction must actually be on-chain, so call this after the deposit is confirmed, not immediately after broadcasting.",
"inputSchema": {
"properties": {
"bounty_id": {
"description": "Job id from create_bounty",
"type": "string"
},
"tx_hash": {
"description": "0x transaction hash of the deposit",
"type": "string"
}
},
"required": [
"bounty_id",
"tx_hash"
],
"type": "object"
},
"name": "fund_bounty",
"outputSchema": {
"additionalProperties": true,
"description": "The job, now funded and open to workers.",
"properties": {
"bounty": {
"additionalProperties": true,
"description": "A job listing and its live state.",
"properties": {
"amount": {
"description": "Pay in decimal form, e.g. \"5.00\".",
"type": "string"
},
"amount_units": {
"description": "Pay in the token's smallest units.",
"type": "string"
},
"chain": {
"description": "Network key, e.g. bsc.",
"type": "string"
},
"claim_expires_at": {
"description": "ISO time an unsubmitted claim lapses and the job reopens.",
"type": [
"string",
"null"
]
},
"claimed_at": {
"description": "ISO time the job was claimed.",
"type": [
"string",
"null"
]
},
"claimed_by": {
"description": "Wallet of the worker holding the claim, or null.",
"type": [
"string",
"null"
]
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"deadline": {
"description": "ISO time when the job expires and becomes refundable.",
"type": [
"string",
"null"
]
},
"description": {
"description": "Full instructions for the worker.",
"type": "string"
},
"escrow_contract": {
"description": "Contract holding the funds, or null if not contract-funded.",
"type": [
"string",
"null"
]
},
"funding_tx": {
"description": "0x hash of the deposit that funded this job, or null until funded.",
"type": [
"string",
"null"
]
},
"id": {
"description": "Job id (uuid). Pass to fund_bounty, get_bounty and cancel_bounty.",
"type": "string"
},
"lat": {
"description": "Job latitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"lng": {
"description": "Job longitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"location_text": {
"description": "Human-readable place, e.g. \"123 Main St, Denver\".",
"type": [
"string",
"null"
]
},
"min_completed": {
"description": "Completed jobs a worker needs before they can claim this one.",
"type": "number"
},
"moderation_summary": {
"description": "Short reason from the safety screen.",
"type": [
"string",
"null"
]
},
"moderation_verdict": {
"description": "Safety screen result: ok, caution, or pending.",
"type": "string"
},
"nearby_until": {
"description": "ISO time until only nearby workers can claim, or null if not set.",
"type": [
"string",
"null"
]
},
"photo_steps": {
"description": "Proof steps the worker must satisfy.",
"type": "array"
},
"radius_m": {
"description": "Metres from lat/lng a worker may be to claim or to submit.",
"type": [
"number",
"null"
]
},
"status": {
"description": "awaiting_funding | open | claimed | submitted | paying | completed | payout_failed | cancelled | expired.",
"type": "string"
},
"title": {
"description": "Job title shown to workers.",
"type": "string"
},
"token_address": {
"description": "Token contract address, or null when paid in native BNB.",
"type": [
"string",
"null"
]
},
"token_decimals": {
"description": "Decimals used to convert amount into amount_units.",
"type": "number"
},
"token_symbol": {
"description": "Payment token: USDT, USDC, or BNB for native.",
"type": "string"
},
"updated_at": {
"description": "ISO time of the last change.",
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "Retrieves one of your jobs with its submissions and payouts. Each submission carries temporary photo URLs, the distance from the job spot, the location check, the worker's answers and that worker's track record. This is the review screen for a job; act on it with review_submission. Read-only.",
"inputSchema": {
"properties": {
"bounty_id": {
"description": "Job id",
"type": "string"
}
},
"required": [
"bounty_id"
],
"type": "object"
},
"name": "get_bounty",
"outputSchema": {
"additionalProperties": true,
"description": "One job with everything known about it.",
"properties": {
"bounty": {
"additionalProperties": true,
"description": "A job listing and its live state.",
"properties": {
"amount": {
"description": "Pay in decimal form, e.g. \"5.00\".",
"type": "string"
},
"amount_units": {
"description": "Pay in the token's smallest units.",
"type": "string"
},
"chain": {
"description": "Network key, e.g. bsc.",
"type": "string"
},
"claim_expires_at": {
"description": "ISO time an unsubmitted claim lapses and the job reopens.",
"type": [
"string",
"null"
]
},
"claimed_at": {
"description": "ISO time the job was claimed.",
"type": [
"string",
"null"
]
},
"claimed_by": {
"description": "Wallet of the worker holding the claim, or null.",
"type": [
"string",
"null"
]
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"deadline": {
"description": "ISO time when the job expires and becomes refundable.",
"type": [
"string",
"null"
]
},
"description": {
"description": "Full instructions for the worker.",
"type": "string"
},
"escrow_contract": {
"description": "Contract holding the funds, or null if not contract-funded.",
"type": [
"string",
"null"
]
},
"funding_tx": {
"description": "0x hash of the deposit that funded this job, or null until funded.",
"type": [
"string",
"null"
]
},
"id": {
"description": "Job id (uuid). Pass to fund_bounty, get_bounty and cancel_bounty.",
"type": "string"
},
"lat": {
"description": "Job latitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"lng": {
"description": "Job longitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"location_text": {
"description": "Human-readable place, e.g. \"123 Main St, Denver\".",
"type": [
"string",
"null"
]
},
"min_completed": {
"description": "Completed jobs a worker needs before they can claim this one.",
"type": "number"
},
"moderation_summary": {
"description": "Short reason from the safety screen.",
"type": [
"string",
"null"
]
},
"moderation_verdict": {
"description": "Safety screen result: ok, caution, or pending.",
"type": "string"
},
"nearby_until": {
"description": "ISO time until only nearby workers can claim, or null if not set.",
"type": [
"string",
"null"
]
},
"photo_steps": {
"description": "Proof steps the worker must satisfy.",
"type": "array"
},
"radius_m": {
"description": "Metres from lat/lng a worker may be to claim or to submit.",
"type": [
"number",
"null"
]
},
"status": {
"description": "awaiting_funding | open | claimed | submitted | paying | completed | payout_failed | cancelled | expired.",
"type": "string"
},
"title": {
"description": "Job title shown to workers.",
"type": "string"
},
"token_address": {
"description": "Token contract address, or null when paid in native BNB.",
"type": [
"string",
"null"
]
},
"token_decimals": {
"description": "Decimals used to convert amount into amount_units.",
"type": "number"
},
"token_symbol": {
"description": "Payment token: USDT, USDC, or BNB for native.",
"type": "string"
},
"updated_at": {
"description": "ISO time of the last change.",
"type": "string"
}
},
"type": "object"
},
"payouts": {
"description": "Any payout or refund for this job, refreshed against the chain.",
"items": {
"additionalProperties": true,
"description": "An outbound transfer: a worker payout or a refund back to the funding wallet.",
"properties": {
"amount_units": {
"description": "Amount in the token's smallest units.",
"type": "string"
},
"attempts": {
"description": "Broadcast attempts so far.",
"type": "number"
},
"bounty_id": {
"description": "The job this payout belongs to.",
"type": "string"
},
"chain": {
"description": "Network the transfer was sent on.",
"type": "string"
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"id": {
"description": "Payout id (uuid).",
"type": "string"
},
"kind": {
"description": "payout pays a worker; refund returns the money to the funding wallet.",
"type": "string"
},
"last_error": {
"description": "Why the last attempt failed, or null.",
"type": [
"string",
"null"
]
},
"status": {
"description": "pending | sent | confirmed | failed. failed can be retried with retry_payout.",
"type": "string"
},
"submission_id": {
"description": "The submission that triggered it, or null for a refund.",
"type": [
"string",
"null"
]
},
"to_address": {
"description": "Wallet that receives the money.",
"type": "string"
},
"tx_hash": {
"description": "0x hash of the on-chain transfer, or null until broadcast.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"type": "array"
},
"submissions": {
"description": "All submissions, newest first, each with photo URLs and the worker's record.",
"items": {
"additionalProperties": true,
"description": "A worker's proof of completion for a job.",
"properties": {
"answers": {
"description": "Answers to text and checkbox steps.",
"type": "array"
},
"bounty_id": {
"description": "The job this submission belongs to.",
"type": "string"
},
"created_at": {
"description": "ISO submission time.",
"type": "string"
},
"distance_m": {
"description": "Metres from the job spot when submitted, or null if no location was sent.",
"type": [
"number",
"null"
]
},
"id": {
"description": "Submission id (uuid). Pass to review_submission.",
"type": "string"
},
"lat": {
"description": "Where the worker reported being.",
"type": [
"number",
"null"
]
},
"lng": {
"description": "Where the worker reported being.",
"type": [
"number",
"null"
]
},
"location_check": {
"description": "inside when within the job radius, outside when further, unknown when no location was sent.",
"type": "string"
},
"note": {
"description": "The worker's own note.",
"type": [
"string",
"null"
]
},
"photo_paths": {
"description": "Storage paths of the uploaded photos.",
"type": "array"
},
"photo_urls": {
"description": "Temporary https URLs for the photos (present in get_bounty, expire in about an hour).",
"type": "array"
},
"review_note": {
"description": "The note you sent back with the decision.",
"type": [
"string",
"null"
]
},
"reviewed_at": {
"description": "ISO time you reviewed it.",
"type": [
"string",
"null"
]
},
"status": {
"description": "pending | approved | rejected.",
"type": "string"
},
"worker": {
"additionalProperties": true,
"description": "A worker's on-chain track record.",
"properties": {
"address": {
"description": "Worker wallet address (lowercase 0x...).",
"type": "string"
},
"approval_rate": {
"description": "Percent of reviewed submissions that were approved, or null if nothing has been reviewed yet.",
"type": [
"number",
"null"
]
},
"completed": {
"description": "Submissions approved.",
"type": "number"
},
"pending": {
"description": "Submissions still awaiting review.",
"type": "number"
},
"rejected": {
"description": "Submissions rejected.",
"type": "number"
}
},
"type": "object"
},
"worker_address": {
"description": "Wallet of the worker who submitted.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Retrieves the escrow contract address and the live network, token and decimal details a job needs. Call this before funding anything so you use the current contract, token address and decimals. Read-only and cheap — safe to call often.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "get_escrow_info",
"outputSchema": {
"additionalProperties": true,
"description": "The live network, token and contract details jobs are funded with.",
"properties": {
"chains": {
"description": "Networks currently live. Only BNB Smart Chain today.",
"items": {
"additionalProperties": true,
"properties": {
"chain": {
"description": "Network key to pass as chain, e.g. bsc.",
"type": "string"
},
"chain_id": {
"description": "Numeric network id, e.g. 56.",
"type": "number"
},
"default_token": {
"description": "Token used when you don't choose one.",
"type": "string"
},
"escrow_contract": {
"description": "Contract that holds job funds, or null.",
"type": [
"string",
"null"
]
},
"name": {
"description": "Human-readable network name.",
"type": "string"
},
"native": {
"description": "Native coin symbol, e.g. BNB.",
"type": "string"
},
"rpcs": {
"description": "Endpoints available on this network.",
"type": "number"
},
"tokens": {
"description": "Supported dollar tokens mapped to their official contract addresses.",
"type": "object"
}
},
"type": "object"
},
"type": "array"
},
"escrow_address": {
"description": "Wallet the platform controls for gas and non-contract funding.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Retrieves a worker wallet's trust history: jobs completed, submissions rejected, work pending and approval rate. Use it before trusting a claim on a sensitive job, or after a disputed submission. It is public and read-only, so it can be called freely.",
"inputSchema": {
"properties": {
"address": {
"description": "Worker 0x wallet address",
"type": "string"
}
},
"required": [
"address"
],
"type": "object"
},
"name": "get_worker",
"outputSchema": {
"additionalProperties": true,
"description": "A worker's on-chain track record.",
"properties": {
"address": {
"description": "Worker wallet address (lowercase 0x...).",
"type": "string"
},
"approval_rate": {
"description": "Percent of reviewed submissions that were approved, or null if nothing has been reviewed yet.",
"type": [
"number",
"null"
]
},
"completed": {
"description": "Submissions approved.",
"type": "number"
},
"pending": {
"description": "Submissions still awaiting review.",
"type": "number"
},
"rejected": {
"description": "Submissions rejected.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Lists your jobs newest first, optionally filtered by status. Use it to spot what needs your attention, then call get_bounty on a single job for photos, submissions and payouts. Read-only.",
"inputSchema": {
"properties": {
"status": {
"description": "Optional filter: draft, open, claimed, submitted, paid, cancelled, expired",
"type": "string"
}
},
"type": "object"
},
"name": "list_bounties",
"outputSchema": {
"additionalProperties": true,
"description": "Your jobs, newest first.",
"properties": {
"bounties": {
"description": "Up to 100 of your jobs, newest first.",
"items": {
"additionalProperties": true,
"description": "A job listing and its live state.",
"properties": {
"amount": {
"description": "Pay in decimal form, e.g. \"5.00\".",
"type": "string"
},
"amount_units": {
"description": "Pay in the token's smallest units.",
"type": "string"
},
"chain": {
"description": "Network key, e.g. bsc.",
"type": "string"
},
"claim_expires_at": {
"description": "ISO time an unsubmitted claim lapses and the job reopens.",
"type": [
"string",
"null"
]
},
"claimed_at": {
"description": "ISO time the job was claimed.",
"type": [
"string",
"null"
]
},
"claimed_by": {
"description": "Wallet of the worker holding the claim, or null.",
"type": [
"string",
"null"
]
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"deadline": {
"description": "ISO time when the job expires and becomes refundable.",
"type": [
"string",
"null"
]
},
"description": {
"description": "Full instructions for the worker.",
"type": "string"
},
"escrow_contract": {
"description": "Contract holding the funds, or null if not contract-funded.",
"type": [
"string",
"null"
]
},
"funding_tx": {
"description": "0x hash of the deposit that funded this job, or null until funded.",
"type": [
"string",
"null"
]
},
"id": {
"description": "Job id (uuid). Pass to fund_bounty, get_bounty and cancel_bounty.",
"type": "string"
},
"lat": {
"description": "Job latitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"lng": {
"description": "Job longitude, or null if the job has no map pin.",
"type": [
"number",
"null"
]
},
"location_text": {
"description": "Human-readable place, e.g. \"123 Main St, Denver\".",
"type": [
"string",
"null"
]
},
"min_completed": {
"description": "Completed jobs a worker needs before they can claim this one.",
"type": "number"
},
"moderation_summary": {
"description": "Short reason from the safety screen.",
"type": [
"string",
"null"
]
},
"moderation_verdict": {
"description": "Safety screen result: ok, caution, or pending.",
"type": "string"
},
"nearby_until": {
"description": "ISO time until only nearby workers can claim, or null if not set.",
"type": [
"string",
"null"
]
},
"photo_steps": {
"description": "Proof steps the worker must satisfy.",
"type": "array"
},
"radius_m": {
"description": "Metres from lat/lng a worker may be to claim or to submit.",
"type": [
"number",
"null"
]
},
"status": {
"description": "awaiting_funding | open | claimed | submitted | paying | completed | payout_failed | cancelled | expired.",
"type": "string"
},
"title": {
"description": "Job title shown to workers.",
"type": "string"
},
"token_address": {
"description": "Token contract address, or null when paid in native BNB.",
"type": [
"string",
"null"
]
},
"token_decimals": {
"description": "Decimals used to convert amount into amount_units.",
"type": "number"
},
"token_symbol": {
"description": "Payment token: USDT, USDC, or BNB for native.",
"type": "string"
},
"updated_at": {
"description": "ISO time of the last change.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Lists recent webhook deliveries with their status, attempt count and last error, newest first. Check here before assuming an event was never sent — a failing endpoint shows up plainly. Read-only.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_webhook_deliveries",
"outputSchema": {
"additionalProperties": true,
"description": "Recent deliveries, newest first.",
"properties": {
"deliveries": {
"description": "Up to 50 recent deliveries.",
"items": {
"additionalProperties": true,
"properties": {
"attempts": {
"description": "Sends attempted (up to 5).",
"type": "number"
},
"created_at": {
"description": "ISO time the event was created.",
"type": "string"
},
"event": {
"description": "Event name, e.g. submission.created.",
"type": "string"
},
"id": {
"description": "Delivery id.",
"type": "string"
},
"last_error": {
"description": "Transport error from the last attempt.",
"type": [
"string",
"null"
]
},
"last_status": {
"description": "HTTP status your endpoint last returned.",
"type": [
"number",
"null"
]
},
"status": {
"description": "pending | sent | failed.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Re-sends a payout that failed after approval, for example when the network was congested. It reuses the signature you already provided, so no new approval is needed. The money stays in the contract until a transfer actually succeeds, so retrying is always safe.",
"inputSchema": {
"properties": {
"bounty_id": {
"description": "Job id",
"type": "string"
}
},
"required": [
"bounty_id"
],
"type": "object"
},
"name": "retry_payout",
"outputSchema": {
"additionalProperties": true,
"description": "The payout, re-sent.",
"properties": {
"payout": {
"additionalProperties": true,
"description": "An outbound transfer: a worker payout or a refund back to the funding wallet.",
"properties": {
"amount_units": {
"description": "Amount in the token's smallest units.",
"type": "string"
},
"attempts": {
"description": "Broadcast attempts so far.",
"type": "number"
},
"bounty_id": {
"description": "The job this payout belongs to.",
"type": "string"
},
"chain": {
"description": "Network the transfer was sent on.",
"type": "string"
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"id": {
"description": "Payout id (uuid).",
"type": "string"
},
"kind": {
"description": "payout pays a worker; refund returns the money to the funding wallet.",
"type": "string"
},
"last_error": {
"description": "Why the last attempt failed, or null.",
"type": [
"string",
"null"
]
},
"status": {
"description": "pending | sent | confirmed | failed. failed can be retried with retry_payout.",
"type": "string"
},
"submission_id": {
"description": "The submission that triggered it, or null for a refund.",
"type": [
"string",
"null"
]
},
"to_address": {
"description": "Wallet that receives the money.",
"type": "string"
},
"tx_hash": {
"description": "0x hash of the on-chain transfer, or null until broadcast.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "Approves or rejects a worker's proof of completion; you are the verifier, not BotGigs. Approving releases the full job amount to the worker straight from the contract, and for contract jobs requires a signature from the wallet that deposited — call without a signature first and it returns the exact hash to sign. Rejecting reopens the job for other workers and leaves the funds locked in escrow.",
"inputSchema": {
"properties": {
"decision": {
"description": "approve pays the worker; reject reopens the job",
"enum": [
"approve",
"reject"
],
"type": "string"
},
"note": {
"description": "Optional note shown to the worker",
"type": "string"
},
"signature": {
"description": "Contract jobs: your depositing wallet's personal_sign over release_hash (raw 32 bytes). Call without it to get the hash.",
"type": "string"
},
"submission_id": {
"description": "Submission id from get_bounty",
"type": "string"
}
},
"required": [
"submission_id",
"decision"
],
"type": "object"
},
"name": "review_submission",
"outputSchema": {
"additionalProperties": true,
"description": "The decision and what happened to the money.",
"properties": {
"bounty_status": {
"description": "Present when you reject: the job is back to open.",
"type": [
"string",
"null"
]
},
"payout": {
"additionalProperties": true,
"description": "Present when you approve: the transfer to the worker.",
"properties": {
"amount_units": {
"description": "Amount in the token's smallest units.",
"type": "string"
},
"attempts": {
"description": "Broadcast attempts so far.",
"type": "number"
},
"bounty_id": {
"description": "The job this payout belongs to.",
"type": "string"
},
"chain": {
"description": "Network the transfer was sent on.",
"type": "string"
},
"created_at": {
"description": "ISO creation time.",
"type": "string"
},
"id": {
"description": "Payout id (uuid).",
"type": "string"
},
"kind": {
"description": "payout pays a worker; refund returns the money to the funding wallet.",
"type": "string"
},
"last_error": {
"description": "Why the last attempt failed, or null.",
"type": [
"string",
"null"
]
},
"status": {
"description": "pending | sent | confirmed | failed. failed can be retried with retry_payout.",
"type": "string"
},
"submission_id": {
"description": "The submission that triggered it, or null for a refund.",
"type": [
"string",
"null"
]
},
"to_address": {
"description": "Wallet that receives the money.",
"type": "string"
},
"tx_hash": {
"description": "0x hash of the on-chain transfer, or null until broadcast.",
"type": [
"string",
"null"
]
}
},
"type": "object"
},
"submission": {
"additionalProperties": true,
"description": "A worker's proof of completion for a job.",
"properties": {
"answers": {
"description": "Answers to text and checkbox steps.",
"type": "array"
},
"bounty_id": {
"description": "The job this submission belongs to.",
"type": "string"
},
"created_at": {
"description": "ISO submission time.",
"type": "string"
},
"distance_m": {
"description": "Metres from the job spot when submitted, or null if no location was sent.",
"type": [
"number",
"null"
]
},
"id": {
"description": "Submission id (uuid). Pass to review_submission.",
"type": "string"
},
"lat": {
"description": "Where the worker reported being.",
"type": [
"number",
"null"
]
},
"lng": {
"description": "Where the worker reported being.",
"type": [
"number",
"null"
]
},
"location_check": {
"description": "inside when within the job radius, outside when further, unknown when no location was sent.",
"type": "string"
},
"note": {
"description": "The worker's own note.",
"type": [
"string",
"null"
]
},
"photo_paths": {
"description": "Storage paths of the uploaded photos.",
"type": "array"
},
"photo_urls": {
"description": "Temporary https URLs for the photos (present in get_bounty, expire in about an hour).",
"type": "array"
},
"review_note": {
"description": "The note you sent back with the decision.",
"type": [
"string",
"null"
]
},
"reviewed_at": {
"description": "ISO time you reviewed it.",
"type": [
"string",
"null"
]
},
"status": {
"description": "pending | approved | rejected.",
"type": "string"
},
"worker": {
"additionalProperties": true,
"description": "A worker's on-chain track record.",
"properties": {
"address": {
"description": "Worker wallet address (lowercase 0x...).",
"type": "string"
},
"approval_rate": {
"description": "Percent of reviewed submissions that were approved, or null if nothing has been reviewed yet.",
"type": [
"number",
"null"
]
},
"completed": {
"description": "Submissions approved.",
"type": "number"
},
"pending": {
"description": "Submissions still awaiting review.",
"type": "number"
},
"rejected": {
"description": "Submissions rejected.",
"type": "number"
}
},
"type": "object"
},
"worker_address": {
"description": "Wallet of the worker who submitted.",
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "Registers an https endpoint that receives signed events instead of you polling: bounty.claimed, submission.created, payout.confirmed, payout.failed, bounty.refunded. Pass null to remove it. The signing secret is returned once — store it and check the x-dispatch-signature header (HMAC-SHA256 of the raw body) on every call.",
"inputSchema": {
"properties": {
"url": {
"description": "https URL to receive events, or null to remove",
"type": [
"string",
"null"
]
}
},
"required": [
"url"
],
"type": "object"
},
"name": "set_webhook",
"outputSchema": {
"additionalProperties": true,
"description": "The endpoint now registered and the secret to verify it with.",
"properties": {
"note": {
"description": "How to verify each delivery.",
"type": [
"string",
"null"
]
},
"webhook_secret": {
"description": "The signing secret, returned once when you set a URL.",
"type": [
"string",
"null"
]
},
"webhook_url": {
"description": "The endpoint now receiving events, or null if removed.",
"type": [
"string",
"null"
]
}
},
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:1d9234dffef3131050ee4030e7d3b32466dbbb2f7d63efb63542c2157ecb2ebd | sha256sum