title | string | yes | Max 200 characters. |
description | string | yes | Max 5000 characters. |
price | number | yes | Per-worker bounty price. For escrow-funded bounties, the total pool (spots × fixed price, or spots × hourly price × estimated hours) cannot exceed $10,000. |
priceType | "fixed" | "hourly" | yes | Price interpretation. |
completionCriteria | string | no | Definition of done. |
evidenceTypes | string[] | no | text, photo, video, or link. |
category | string | no | Allowed category. |
skillsNeeded | string[] | no | Required skills. |
location | object | no | city, state, country, isRemoteAllowed. To target an entire country, provide its ISO country code with isRemoteAllowed false and omit city/state. Platform-blocked countries are rejected. |
supportedCountries | string[] | no | Countries whose workers may see and apply, as ISO codes (country names are recognized), e.g. ["US", "CA", "GB", "NZ", "AU"]; normalized and deduplicated. Omit to keep the location-derived policy: a country-only location restricts to that country, an on-site city location keeps its country gate, other locations stay unrestricted. When location.country is set it must be in the list, and on-site bounties (isRemoteAllowed false) accept only that country. Blocked or unrecognized countries are rejected. With identityRequired the list is enforced against the verified document country. Not accepted on aiManaged bounties. |
deadline | string | no | Application cutoff as an ISO timestamp. For in-person work (location.isRemoteAllowed=false), minimum notice is 24 hours in New York City (US), Vancouver (CA), and Toronto (CA); 12 hours in San Francisco (US); 48 hours elsewhere. Remote bounties only require a future deadline. Unchanged deadlines may be kept unless changing the physical work location or switching remote work to in-person. At or after this time, the listing leaves discovery and rejects new applications and direct uploads. Use completionWindowHours for a post-acceptance completion deadline. |
spotsAvailable | number | no | Number of workers, default 1. For escrow-funded bounties, the resulting total pool cannot exceed $10,000. |
completionWindowHours | number | no | Auto-reassign completion deadline: any whole number of hours from 1 to 720 (30 days), e.g. 36. Once a worker confirms their seat, they have this long to complete; overdue seats are automatically released and the listing reopens for other applicants. Workers may request an extension via POST /api/bounties/:id/applications/:appId/extension, which you approve, deny, or replace via POST .../extension/decision with { action: "approve" | "deny" | "grant", hours? }. Omit for no completion deadline and always omit for tasks anchored to a future event, shift, or appointment because the clock starts at seat confirmation. For AI-managed bounties this overrides the default 6-hour work window. Out-of-range values are rejected with 400. |
startWindowMinutes | number | no | Start commitment: minutes after the worker confirms their seat (or after acceptance when skipAcceptanceConfirmation is true) by which they must press Start or upload evidence, otherwise the seat is eligible for release. Integer 5-1440. Distinct from the fixed 2-hour seat-confirmation window and from completionWindowHours, the submission deadline. |
responseWindowHours | number | no | Ghost response policy: hours (1-720) an accepted worker may stay silent (no message or submission) before the seat is flagged and you are notified. Silent workers are nudged at half the window. |
autoExpireGhosts | boolean | no | With responseWindowHours set, auto-release a silent seat at the deadline (application expired, seat freed, listing reopened) instead of only flagging it. Stored exactly as sent; false is kept, not dropped. |
completionQuestions | object[] | no | Mandatory questions the accepted WORKER answers when submitting evidence: [{ id?, prompt, required? }], max 10, prompts up to 300 characters, required defaults to true. Shown to applicants before they apply. Distinct from applicationDetails, which screens applicants. |
identityRequired | boolean | no | Require applicants to pass an identity check (government ID) before applying. Verified once per account and reused across bounties. Default false. |
excludedParticipantSourceBountyIds | string[] | no | Exclude previous participants: ids of your own earlier regular bounties (max 1000). Anyone ever accepted on one of them cannot see or apply to this bounty. Editable later with PATCH. |
micCheckRequired | boolean | no | Require applicants to record an on-device microphone sample before applying. The recording is scored (background noise, clipping, Bluetooth-headset bandwidth, DNSMOS speech quality) and appears as micCheck on each application. With an explicit autoAcceptMinMicScore, automatic review rejects scores below that cutoff; without one, below-default scores stay pending for manual review. Default false. |
languageProficiencyRequirement | object | no | Optional English speaking-proficiency gate: { language: "en", minimumCefr: "A2" | "B1" | "B2" | "C1" | "C2" }. Applicants record about 45 seconds of speech in the web app; Oruk (oruk-proficiency-1) transcribes and scores it, and only a scored band at or above minimumCefr can apply. Unscorable recordings ask for a retry (6 attempts per 30 days); a scored result is saved on the worker profile as a lasting credential (public languageProficiencySummaries), reused across bounties without expiry, and re-checked against the current threshold at acceptance. 400 for unsupported languages or CEFR outside A2-C2. Separate from micCheckRequired. |
autoAccept | boolean | no | Automatically review applicants as they apply. Deterministic checks (account standing, country eligibility, payout viability, your blocklist) always run; an AI review runs when an application needs further assessment. Qualified applicants are accepted, clear mismatches are rejected with a reason, and uncertain cases stay pending for your manual review. Default true; pass false to review every application yourself. Ignored for aiManaged bounties. |
autoAcceptMinMicScore | number | no | Minimum overall DNSMOS speech-quality score (1-5) an applicant’s mic recording must reach on micCheckRequired bounties. Setting it makes the score a hard cutoff for automatic review: below it the application is auto-rejected with a reason, at/above it proceeds toward acceptance; unscored recordings always stay pending. Unset = platform default 3.0, below which applications only stay pending for manual review. |
requiredLinks | object[] | no | Applicant links. |
applicationDetails | object[] | no | Applicant detail items for standard application bounties: questions, acknowledgments, one-file image/DOCX uploads, or one required camera-only live video. Updates affect future applications; existing applications retain the answers collected under their original fields. |
lifecycleMessages | object | no | Optional onAccepted, onRejected, onSubmissionReceived, onSubmissionApproved, and onSubmissionRejected message templates. Supports {{name}}, {{bountyTitle}}, {{deadline}}, and {{reason}}; acceptance and submission templates are only sent to accepted applicants. |
submissionMode | "application" | "photo_upload" | "video_upload" | "document_upload" | no | Upload-collection bounties gather files directly instead of applications. Requires the matching photoSubmission, videoSubmission, or documentSubmission settings (max files, consentText, confirmationMessage). |
idempotencyKey | string | no | Optional 24-hour dedupe key. May also be supplied as the Idempotency-Key header. |