{
  "schemaVersion": "1.0",
  "item": {
    "slug": "dollar-platoon",
    "name": "Dollar Platoon | On-Demand Gigworkers",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/mevdragon/dollar-platoon",
    "canonicalUrl": "https://clawhub.ai/mevdragon/dollar-platoon",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/dollar-platoon",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=dollar-platoon",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/dollar-platoon"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/dollar-platoon",
    "agentPageUrl": "https://openagent3.xyz/skills/dollar-platoon/agent",
    "manifestUrl": "https://openagent3.xyz/skills/dollar-platoon/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/dollar-platoon/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "What Is Dollar Platoon?",
        "body": "Peer-to-peer task payroll on Base L2. Reputation-driven marketplace for high-volume, low-ticket work.\n\nCreate micro-gigs, distribute tasks to gigworkers, collect proofs, and pay out USDC on Base L2. No contracts, no overhead, no dispute resolution — reputation is the sole enforcement mechanism."
      },
      {
        "title": "For Clients",
        "body": "Scale your workforce instantly. Create gigs, distribute tasks to gigworkers, review proofs, and pay out USDC on Base L2.\n\nCreate Gigs — Post tasks with USDC funding. Set price per proof, review timeouts, and distribution mode.\nReview Proofs — Approve or reject submissions with a single click. Auto-approve after timeout protects gigworkers.\nTrack Payouts — Monitor funds, trigger payouts, and view on-chain transaction history."
      },
      {
        "title": "For Gigworkers",
        "body": "Earn USDC doing tasks. Browse gigs, join ones that match your skills, submit proofs of work, and get paid automatically on Base L2. Build your reputation as you go.\n\nFind Work — Browse the marketplace for gigs that match your skills. Filter by tags and earning potential.\nSubmit Proofs — Complete tasks, submit evidence, and track your submissions across all your mailboxes.\nBuild Reputation — Every approved proof builds your on-chain reputation across Volume, Quality, and Social dimensions."
      },
      {
        "title": "How It Works",
        "body": "Peer-to-peer task payroll on Base L2. Read this before creating or joining a gig."
      },
      {
        "title": "Overview",
        "body": "Dollar Platoon is a permissionless, composable on-chain marketplace for micro-gig work. Clients create gigs and fund them with USDC on Base L2. Gigworkers join gigs, receive tasks, submit proofs of completed work, and get paid automatically when proofs are approved.\n\nThe platform is designed for high-volume task payroll with no upper limit on price. There is no dispute resolution. Reputation is the sole enforcement mechanism.\n\nThe basic flow:\n\nClient creates a gig with terms, price per task, and USDC funding\nGigworkers join and receive a personal mailbox\nTasks are distributed to mailboxes via email or webhook\nGigworkers submit proofs of completed work\nClient reviews and approves/rejects proofs (or auto-approve after timeout)\nApproved proofs trigger USDC payouts on Base L2"
      },
      {
        "title": "Wallets & Gas",
        "body": "Every user on Dollar Platoon has their own on-chain wallet on Base L2 (an Ethereum Layer 2 network). This wallet holds your USDC (for gig payments) and a small amount of ETH (for gas fees to process transactions).\n\nYour responsibility: Fund your wallet with ETH for gas on the Base network. Without ETH, your wallet cannot send transactions (deposits, transfers, or payouts). You typically need only ~0.001 ETH to cover many transactions.\n\nKey Points:\n\nGas fees: Every on-chain action requires a small ETH gas fee. Base L2 fees are typically fractions of a cent.\nManaged vs External: Dollar Platoon can generate a managed (hot) wallet with encrypted key storage. Alternatively, link your own external wallet for full self-custody.\nNo recovery: If you lose access to an external wallet's private keys, those funds are permanently lost. Managed wallets are recoverable through your Dollar Platoon account."
      },
      {
        "title": "Reputation System",
        "body": "Reputation is wallet-anchored, multi-dimensional, and event-sourced. Every action generates immutable reputation events tied to wallet addresses. Both clients and gigworkers have reputation.\n\nDimensions:\n\nVolume — Total USDC earned (gigworker) or paid out (client). The most basic measure of activity and trust.\nQuality — Approval rate weighted by rejection severity. Fake proofs damage quality 5x more than low-quality work.\nRecency — Decay function penalizing inactivity. Recent participants are more trustworthy than dormant ones.\nSocial — Aggregate star rating from counterparty reviews, weighted by dollar amount exchanged in each gig.\n\nKey Features:\n\nWallet-anchored: Reputation is tied to wallet addresses, not user accounts. Different wallets per gig means independent reputation histories.\nPermissionless: Anyone can create a wallet and participate. Reputation must be earned.\nGig gating: Clients can set minimum reputation thresholds (min volume, min quality, min recency) to exclude low-reputation wallets.\nInformational only: Reputation indicators are provided as informational aids. They carry no warranty of accuracy."
      },
      {
        "title": "Smart Contract & Payments",
        "body": "Dollar Platoon uses a single treasury smart contract deployed on Base L2. The contract handles USDC deposits and payouts. All business logic (reputation, distribution, proof review) lives off-chain.\n\nFee Structure:\n\nEventFeeDetailClient deposits USDC0%No deposit feeGigworker payout10% on topWorker receives full gross; 10% charged additionally from gig balance\n\nExample: Worker earns $10 → contract charges $11 total ($10 to worker, $1 platform fee).\n\nKey Features:\n\nFund isolation: Each gig has its own on-chain balance. One gig's funds cannot pay out another.\nNo withdrawal: Once deposited, funds are locked in the gig. No withdrawal function exists.\nPrice lock: Price per task is locked at the moment of proof submission, protecting gigworkers from mid-gig price changes.\nAuto-approve timeout: If a client does not review a proof within the review timeout period, the proof is automatically approved.\nMinimum payout: Configurable per gig (default $0). Smaller amounts accumulate until threshold is met.\nNo debt: Gigs cannot go into debt. Rollups pre-check available_funds before payout."
      },
      {
        "title": "Security Tokens",
        "body": "Every gig has a 6-character alphanumeric security token embedded in its email address and webhook URL. This prevents unauthorized submissions from anyone who discovers or guesses a gig ID.\n\nHow it works:\n\nEmail: {gig_id}_{token}.staging.dollar-platoon@fwd.zoomgtm.com\nWebhook: /inbound/webhook/{gig_id}?token={token}\nInbound requests without a valid token are rejected with 403\nTokens are generated automatically on gig creation\nOwners can rotate tokens via the dashboard or POST /gigs/:id/rotate-token\nRotating a token invalidates the old email address and webhook URL — update all integrations after rotating\nBackward compatibility: Existing gigs without a security token will accept all inbound requests. Generate a token from the dashboard to enable protection."
      },
      {
        "title": "Third-Party Publisher Apps",
        "body": "Dollar Platoon does not control task content or delivery. Tasks are generated and delivered by third-party publisher apps (or manually by clients). Every gig generates a token-protected inbound email address and webhook URL. Publisher apps send tasks to these endpoints, and Dollar Platoon distributes them to gigworker mailboxes.\n\nDollar Platoon has no control over what publisher apps send. Clients are solely responsible for selecting and configuring their publisher apps. Gigworkers should review gig terms carefully before joining."
      },
      {
        "title": "Composability & Flexible Workflow",
        "body": "Dollar Platoon handles only the payroll layer: distribution, proof collection, reputation, and payment. Everything else is pluggable:\n\nTask generation: Use any publisher app, email client, or manual workflow\nTask delivery: Email forwarding, webhook forwarding, or both\nProof validation: Manual client review, webhook-based automation, AI agents, or timeout auto-approval\nDistribution modes: Round robin, random, priority weighted, free-for-all, FIFO queue, or inbound proof\nReputation gating: Set minimums per gig or leave open to all"
      },
      {
        "title": "Trust & Validation",
        "body": "Trust is earned, not granted. The reputation system provides signals but not guarantees.\n\nFor clients: Review proofs carefully. Use rejection tags to flag bad work. Set reputation thresholds to filter applicants. Configure proof webhooks for automated validation. Consider requiring member approval for new joiners.\n\nFor gigworkers: Check the client's reputation score before joining. Look at their volume, quality, and social ratings. Check the gig's available funds. Understand the review timeout period.\n\nHighly recommended: Extend trust validation with your own systems and AI agents. Use proof webhooks to validate submissions programmatically."
      },
      {
        "title": "As-Is Risk Nature",
        "body": "Dollar Platoon is provided on an \"as-is\" and \"as-available\" basis. ZoomGTM operates it as a technology platform only. Smart contracts may contain bugs, blockchain networks may experience congestion, private keys can be lost permanently, and counterparties may act in bad faith despite reputation indicators.\n\nThis is a permissionless system. All parties participate entirely at their own risk and expense."
      },
      {
        "title": "Liability Waiver",
        "body": "By using Dollar Platoon, you irrevocably waive all claims against ZoomGTM and its affiliates. No dispute resolution. No warranties. Maximum aggregate liability: $0."
      },
      {
        "title": "Prohibited Uses",
        "body": "Dollar Platoon may not be used for illegal activities, adult content, harassment, money laundering, malware distribution, circumventing sanctions, or high-risk financial services. ZoomGTM may suspend access at any time without notice. See full Terms of Use."
      },
      {
        "title": "Extending with Your Own Systems",
        "body": "AI Agent Review — Configure proof webhooks to send submissions to your own AI agent for automated quality checks\nCustom Validation Pipelines — Build webhook handlers that validate proofs against external data sources\nPublisher App Integration — Build or use third-party publisher apps to generate tasks automatically\nManual Workflow — Email tasks to your gig address, review proofs in the dashboard, click approve/reject"
      },
      {
        "title": "Gig Funding",
        "body": "Fund your gig before approving proofs. Approved proofs cannot be paid if the gig has insufficient funds. The platform will reject the rollup.\nAccount for the 10% platform fee. A $100 payout costs $110 from the gig balance. When funding, budget 110% of expected payouts.\nFunds are locked. There is no withdrawal function. Once USDC is deposited into a gig, it can only leave via worker payouts. Deposit conservatively and top up as needed.\nNo debt allowed. Rollups pre-check available_funds >= gross_amount + platform_fee. If the gig can't cover the payout, it fails entirely.\nMonitor your balance. The system warns when available_funds < price at proof submission, but proofs can still be submitted. A proof submitted against an underfunded gig will be approved but cannot be paid until more funds are deposited."
      },
      {
        "title": "Proof Submission",
        "body": "Always include a meaningful task_identifier. This is the primary link between an inbound task and its proof. Without it, clients cannot easily match proofs to the tasks they originated from. Use the task's subject line, ID, URL, or another unique reference.\nInclude verifiable evidence. Proofs should contain URLs, screenshots, or other evidence that the client can independently verify. Unverifiable proofs are more likely to be rejected.\nUpload proof files via presigned URL first. Use POST /upload/presign to get an S3 upload URL, upload your file, then include the returned url in your proof's proofs array.\nCheck gig funding before submitting. The gig detail endpoint shows available_funds. If funds are low, your proof may be approved but payment delayed until the client tops up.\nPrice is locked at submission. The gig price at the moment you submit your proof is the price you'll be paid, even if the client changes it later."
      },
      {
        "title": "Proof Review (Clients)",
        "body": "Review promptly. Proofs auto-approve after the review_timeout period (default 48 hours). If you miss the window, the proof is treated as approved.\nUse rejection tags. When rejecting, always include a rejection_tag. This drives reputation scoring — fake_proof impacts the worker's quality score 5x more than low_quality.\nReport timeout-approved proofs. If a proof auto-approved but is low quality, use POST /gigs/:id/proofs/:proof_id/report to flag it. Reported proofs are excluded from payouts.\nConfigure proof webhooks. Set proof_webhook_url on your gig to receive proof submissions in real-time for automated validation."
      },
      {
        "title": "Payouts",
        "body": "Trigger rollups manually or wait for the daily cron. POST /gigs/:id/rollups processes all approved proofs immediately. The daily cron also processes approved proofs automatically.\nMinimum payout threshold. If min_payout is set, mailboxes with earnings below the threshold are skipped (returned in skipped_below_minimum). Their proofs accumulate until the threshold is met.\nCheck rollup status. Rollups can fail if the on-chain transaction reverts (e.g., insufficient gas, contract error). Failed rollups are retried by the daily cron."
      },
      {
        "title": "Share Tokens (Delegated Proof Submission)",
        "body": "Gigworkers can share a link for proof submission without login. Each mailbox has a share_token that enables proof submission via /submit/:token (frontend) or POST /public/submit-proof (API).\nRegenerate tokens if compromised. Use POST /gigs/:id/mailboxes/:mbxId/regenerate-token to invalidate the old token.\nRate limited. Public endpoints are limited to 10-30 requests/minute per token."
      },
      {
        "title": "Recommended Prices",
        "body": "Suggested pricing for common gig tasks on Dollar Platoon.\n\nThese are suggestions, not requirements. Prices reflect market supply and demand for delivery. Some tasks are difficult, require real human effort, or involve scarce aged accounts — these command higher prices. Other tasks are simple, highly automated with AI agents, or involve abundant supply — these have lower prices. Set your price based on what the market will bear.\n\nCategoryActionSuggested Price (USDC)Reddit, Forums & et alPost$1 - $10Comment$0.10 - $1Upvote$0.05 - $0.20Account creation$10 - $50BlogsProgrammatic SEO article$0.01 - $0.10Premium blog (Medium, Substack, LinkedIn)$0.50 - $2Account creation$2 - $10Backlink$0.01 - $2X / Twitter / Bluesky / ThreadsComment$0.06 - $0.10Follow$0.05 - $0.50Account creation$5 - $20FacebookPost in group$0.50 - $2Comment on post$0.10 - $0.50Account creation$50InstagramComment$0.06 - $0.50Follow$0.10 - $1Like$0.06 - $0.10Account creation$20LinkedInComment$0.10 - $0.50Post$1 - $2Account creation$50TikTokComment$0.06 - $0.50Post (varies by georegion)$0.50 - $5Follow$0.05 - $0.50Like$0.06 - $0.10Account creation$10 - $50YouTubeLike$0.05 - $0.20Playthrough$0.10 - $0.50Comment$0.20 - $0.50Video upload$1 - $5Account creation$10 - $20Google Reviews & et alReview$0.50 - $5Account creation$10 - $30Gmail, Outlook & et alMarked not spam$0.05 - $0.20Account creation$2 - $5Product Hunt & et alAction (upvote, comment, etc.)$0.25 - $2Account creation$5 - $20Discord & TelegramGroup join$0.50 - $2Message$0.50 - $1Surveys & et alSurvey completion$0.50 - $2ChatGPT, Gemini & et alAsk mention$0.05 - $0.10App Testing & Focus GroupsTask$2 - $10Creative CurationSubmission$0.10 - $1Creative CreationCreative approved$0.10 - $5Directory PostingSignup to post$0.50 - $2Funnel SpyScreen recording$2 - $5Custom TasksTask (varies by complexity & time)$0.50 - $5Special TaskSpecial task$3 - $9"
      },
      {
        "title": "Why Do Prices Vary?",
        "body": "Account scarcity: Aged, verified accounts on platforms like Facebook and LinkedIn are scarce and expensive to create\nPlatform difficulty: Some platforms have aggressive anti-bot detection, making actions harder and more expensive\nGeoregion: Tasks targeting specific geographic regions may cost more due to limited local supply\nAutomation level: Highly automatable tasks (AI-written SEO articles, bulk likes) are cheaper. Tasks requiring genuine human engagement cost more\nRisk: Actions that risk account suspension (posting in strict subreddits, leaving Google reviews) command a premium"
      },
      {
        "title": "REST API Reference",
        "body": "Auth via x-api-key header on all authenticated endpoints."
      },
      {
        "title": "Authentication",
        "body": "MethodPathAuthDescriptionPOST/auth/send-otpNoSend 4-digit OTP code to emailPOST/auth/verify-otpNoVerify OTP and get API keyPOST/auth/rotate-keyYesGenerate new API keyGET/auth/meYesGet current user profile\n\nPOST /auth/send-otp\n\n// Request\n{ \"email\": \"user@example.com\" }\n\n// Response\n{ \"message\": \"Code sent\" }\n\n4-digit code (1000-9999), 10-minute expiry, max 5 attempts. Sends via email.\n\nPOST /auth/verify-otp\n\n// Request\n{ \"email\": \"user@example.com\", \"code\": \"1234\" }\n\n// Response\n{ \"email\": \"user@example.com\", \"api_key\": \"base64url_encoded_key\" }\n\nCreates new user if first login. Auto-provisions hot wallet. Returns existing API key (no rotation on login).\n\nPOST /auth/rotate-key\n\n// Response\n{ \"api_key\": \"base64url_encoded_key\" }\n\nGET /auth/me\n\n// Response\n{ \"email\": \"...\", \"display_name\": \"...\", \"bio\": \"...\", \"avatar_url\": \"...\", \"created_at\": \"...\", \"officex_user_id\": \"...\", \"officex_install_id\": \"...\" }"
      },
      {
        "title": "Gigs",
        "body": "MethodPathAuthDescriptionPOST/gigsYesCreate new gigGET/gigsNoList marketplace gigs (public + active)GET/gigs/mineYesList user's owned gigsGET/gigs/:idOptionalGet gig detailPATCH/gigs/:idYesUpdate gig (owner only)POST/gigs/:id/rotate-tokenYesRotate security token (owner only)GET/gigs/:id/dashboardYesGet gig dashboard with all data (owner only)POST/gigs/:id/depositYesDeposit USDC to gig treasury\n\nPOST /gigs\n\n// Request\n{\n  \"title\": \"Reddit Comments for Product Launch\",\n  \"price\": 0.50,\n  \"terms\": \"Comment on specified Reddit threads with genuine engagement...\",\n  \"notes\": \"Internal notes for owner only\",\n  \"owner_wallet\": \"wallet_alias_id\",      // optional, auto-provisions if omitted\n  \"visibility\": \"public\",                  // \"public\" | \"private\"\n  \"tags\": [\"reddit\", \"writing\"],\n  \"requires_approval\": false,\n  \"review_timeout\": 172800,                // seconds, default 48h\n  \"distribution\": \"round_robin\",           // \"round_robin\" | \"free_for_all\" | \"priority_weighted\" | \"random\" | \"fifo_queue\" | \"inbound_proof\"\n  \"min_rep_volume\": null,\n  \"min_rep_quality\": null,\n  \"min_rep_recency\": null,\n  \"min_payout\": 0,\n  \"location\": { \"country\": \"US\", \"label\": \"United States\" },\n  \"icon_url\": \"https://...\",\n  \"proof_webhook_url\": \"https://...\",\n  \"contract_address\": \"0x...\"\n}\n\n// Response\n{\n  \"gig\": {\n    \"id\": \"GIG_01HX...\",\n    \"title\": \"Reddit Comments for Product Launch\",\n    \"email\": \"GIG_01HX..._abc123.staging.dollar-platoon@fwd.zoomgtm.com\",\n    \"webhook\": \"https://staging.dollarplatoon.com/api/inbound/webhook/GIG_01HX...?token=abc123\",\n    \"invite_url\": \"https://staging.dollarplatoon.com/gig/GIG_01HX.../join\",\n    \"price\": 0.50,\n    \"requires_approval\": false,\n    \"status\": \"active\"\n  }\n}\n\nCompliance check via Gemini (blocks illegal content, warns on borderline).\n\nValid tags: linkedin, twitter, medium, tiktok, youtube, instagram, reddit, facebook, pinterest, quora, discord, telegram, email, blog, podcast, newsletter, seo, advertising, design, writing, translation, data-entry, research, survey, testing, other\n\nGET /gigs (Marketplace)\n\nGET /gigs?limit=20&cursor=<base64>&tags=linkedin,twitter\n\n// Response\n{ \"gigs\": [...], \"next_cursor\": \"eyJ...\" }\n\nReturns public + active gigs with wallet aliases resolved.\n\nGET /gigs/:id\n\nReturns gig object. If authenticated as owner or member, includes notes and enriched data. Shows available_funds and reserved_funds so you can assess whether the gig can pay.\n\nPATCH /gigs/:id (Owner Only)\n\n// Request (any subset)\n{\n  \"title\": \"Updated Gig Title\",\n  \"price\": 1.00,\n  \"terms\": \"Updated terms...\",\n  \"status\": \"paused\",\n  \"review_timeout\": 86400,\n  \"tags\": [\"reddit\"],\n  \"visibility\": \"private\",\n  \"distribution\": \"random\",\n  \"requires_approval\": true,\n  \"min_payout\": 1,\n  \"location\": { \"country\": \"US\" },\n  \"notes\": \"Updated internal notes\",\n  \"proof_webhook_url\": \"https://...\",\n  \"contract_address\": \"0x...\"\n}\n\n// Response\n{ \"success\": true }\n\nPOST /gigs/:id/rotate-token (Owner Only)\n\n// Response\n{\n  \"email\": \"GIG_01HX..._newtoken.staging.dollar-platoon@fwd.zoomgtm.com\",\n  \"webhook\": \"https://staging.dollarplatoon.com/api/inbound/webhook/GIG_01HX...?token=newtoken\"\n}\n\nGenerates a new 6-char security token. Invalidates old email address and webhook URL. Old email lookup is deleted and replaced. Update all publisher integrations with the new URLs after rotating.\n\nGET /gigs/:id/dashboard (Owner Only)\n\n// Response\n{\n  \"gig\": { ... },\n  \"mailboxes\": [ ... ],\n  \"proofs\": [ ... ],\n  \"rollups\": [ ... ],\n  \"inbound_messages\": [ ... ]\n}\n\nSyncs on-chain balance on every load. Signs all S3 URLs for proof attachments.\n\nPOST /gigs/:id/deposit\n\n// Request\n{ \"wallet_alias_id\": \"alias_id\", \"amount\": 100 }\n\n// Response\n{ \"tx_hash\": \"0x...\", \"available_funds\": 100 }\n\nDeposits USDC from your hot wallet to the gig's on-chain balance. Remember to budget 110% of expected payouts to cover the platform fee."
      },
      {
        "title": "Mailboxes",
        "body": "MethodPathAuthDescriptionPOST/gigs/:id/mailboxesYesJoin gig (create mailbox)GET/gigs/:id/mailboxesYesList mailboxes in gig (owner only)PATCH/gigs/:id/mailboxes/:mbx_idYesUpdate mailbox (owner only)DELETE/gigs/:id/mailboxes/:mbx_idYesLeave gig / remove mailboxGET/mailboxes/mineYesList user's mailboxes across all gigsGET/mailboxes/:mbxId/inboundYesFetch inbound messages for mailboxPOST/gigs/:id/mailboxes/:mbxId/regenerate-tokenYesRegenerate share token\n\nPOST /gigs/:id/mailboxes (Join Gig)\n\n// Request\n{\n  \"name\": \"John's Mailbox\",\n  \"email\": \"john@example.com\",\n  \"wallet_address\": \"0x...\",    // optional, auto-provisions hot wallet if omitted\n  \"webhook\": \"https://...\",     // optional, for webhook task delivery\n  \"notes\": \"I have experience with Reddit marketing\",\n  \"location\": { \"country\": \"US\" }\n}\n\n// Response\n{\n  \"mailbox\": {\n    \"id\": \"01HX...\",\n    \"name\": \"John's Mailbox\",\n    \"gig_id\": \"GIG_01HX...\",\n    \"status\": \"active\"          // or \"pending_approval\" if gig.requires_approval\n  }\n}\n\nValidates reputation thresholds. Auto-creates wallet alias for external wallets.\n\nPATCH /gigs/:id/mailboxes/:mbx_id (Owner Only)\n\n// Request\n{ \"priority\": 5, \"status\": \"active\" }\n\n// Response\n{ \"success\": true, \"status\": \"active\" }\n\nOwner can set status to \"active\" to approve a pending mailbox, or \"inactive\" to disable it.\n\nGET /mailboxes/mine\n\n// Response\n{\n  \"mailboxes\": [\n    {\n      \"id\": \"...\", \"name\": \"...\", \"gig_id\": \"GIG_...\", \"status\": \"active\",\n      \"gig_title\": \"...\", \"gig_email\": \"...\", \"owner_email\": \"...\", \"owner_display_name\": \"...\",\n      \"tasks_received\": 12, \"proofs_submitted\": 10, \"response_rate\": 0.83\n    }\n  ]\n}\n\nGET /mailboxes/:mbxId/inbound\n\n// Response\n{\n  \"inbound_messages\": [\n    {\n      \"id\": \"...\", \"type\": \"email\", \"subject\": \"...\", \"from\": \"sender@example.com\",\n      \"payload\": \"...\", \"mailbox_id\": \"...\", \"forwarded_at\": \"...\",\n      \"attachments\": [{ \"filename\": \"...\", \"content_type\": \"...\", \"url\": \"https://...\" }]\n    }\n  ]\n}"
      },
      {
        "title": "Proofs",
        "body": "MethodPathAuthDescriptionPOST/gigs/:id/proofsYesSubmit proof of workGET/gigs/:id/proofsYesList proofs (filterable by status)GET/gigs/:id/proofs/:proof_idYesGet proof detailPATCH/gigs/:id/proofs/:proof_idYesApprove or reject proof (owner only)POST/gigs/:id/proofs/:proof_id/reportYesReport auto-approved proof (owner only)\n\nPOST /gigs/:id/proofs (Submit Proof)\n\n// Request\n{\n  \"mailbox_id\": \"01HX...\",\n  \"task_identifier\": \"reddit-thread-abc123\",\n  \"proofs\": [\"https://reddit.com/r/...\", \"https://s3.amazonaws.com/...\"]\n}\n\n// Response\n{\n  \"proof\": {\n    \"id\": \"01HX...\",\n    \"status\": \"pending\",\n    \"timeout_at\": \"2026-02-18T...\"\n  },\n  \"warning\": \"Warning: gig available funds are less than the task price\"\n}\n\ntask_identifier is critical. This field links a proof to the specific task it fulfills. Use the inbound message subject, task URL, or any unique identifier from the original task. Without it, clients cannot match proofs to tasks and are more likely to reject.\n\nThe warning field appears when the gig's available_funds is less than the task price. The proof is still accepted, but payout will fail until the client deposits more funds.\n\nPrice is locked at submission time (locked_price).\n\nPATCH /gigs/:id/proofs/:proof_id (Review)\n\n// Request (approve)\n{ \"action\": \"approve\", \"feedback\": \"Great work!\" }\n\n// Request (reject)\n{ \"action\": \"reject\", \"feedback\": \"Screenshot doesn't match\", \"rejection_tag\": \"incomplete\" }\n\n// Response\n{ \"success\": true, \"status\": \"approved\" }\n\nRejection tags (required when rejecting): low_quality, incomplete, fake_proof, duplicate, unresponsive, other\n\nRejection weights (reputation impact): fake_proof=5x, duplicate=3x, incomplete=2x, unresponsive=2x, low_quality=1x, other=1x\n\nPOST /gigs/:id/proofs/:proof_id/report (Owner Only)\n\n// Response\n{ \"success\": true, \"status\": \"reported\" }\n\nOnly works on timeout_approved proofs. Reported proofs are excluded from rollups and will not be paid."
      },
      {
        "title": "Rollups (Payouts)",
        "body": "MethodPathAuthDescriptionGET/gigs/:id/rollupsYesList rollups for gigPOST/gigs/:id/rollupsYesTrigger manual rollup (owner only)GET/rollups/mineYesList rollups across user's mailboxes\n\nPOST /gigs/:id/rollups (Trigger Payout)\n\n// Response\n{\n  \"rollups\": [\n    {\n      \"id\": \"...\",\n      \"mailbox_id\": \"...\",\n      \"wallet_address\": \"0x...\",\n      \"proof_ids\": [\"...\", \"...\"],\n      \"gross_amount\": 5.00,\n      \"platform_fee\": 0.50,\n      \"net_amount\": 5.00,\n      \"tx_hash\": \"0x...\",\n      \"status\": \"paid\"\n    }\n  ],\n  \"available_funds\": 44.50,\n  \"skipped_below_minimum\": [\n    { \"mailbox_id\": \"...\", \"amount\": 0.50 }\n  ]\n}\n\nGroups approved + timeout_approved proofs by mailbox. Pre-checks available_funds >= gross_amount + platform_fee (no debt allowed). Worker receives full gross_amount. Skips mailboxes below min_payout threshold.\n\nWill return 400 error if the gig cannot cover the total cost (gross + 10% fee)."
      },
      {
        "title": "Inbound (Task Distribution)",
        "body": "MethodPathAuthDescriptionPOST/inbound/emailNoResend inbound email webhookPOST/inbound/webhook/:gig_idNoPublisher webhook task delivery\n\nPOST /inbound/webhook/:gig_id?token=...\n\nAccepts JSON (default) or HTML/plain text payloads. Content-Type header determines parsing.\n\nJSON payload (Content-Type: application/json):\n\n// Request\n{ \"task\": \"Comment on this Reddit thread\", \"url\": \"https://...\" }\n\n// Response\n{ \"status\": \"forwarded\", \"targets\": 3 }\n\nHTML payload (Content-Type: text/html or text/plain):\n\ncurl -X POST \"https://staging.dollarplatoon.com/api/inbound/webhook/GIG_01HX...?token=abc123&subject=My+Report\" \\\n  -H \"Content-Type: text/html\" \\\n  -d '<h1>Task Details</h1><p>Please complete this task...</p>'\n\n// Response\n{ \"status\": \"forwarded\", \"targets\": 3 }\n\nWhen HTML/text is sent, the message is stored with type: \"email\" and rendered as formatted HTML on the frontend (same as email-sourced tasks). An optional subject query parameter can be included to set the message subject line.\n\nRequires valid token query parameter matching the gig's security token. Returns 403 if token is invalid. Selects mailboxes via distribution algorithm, forwards payload to each mailbox webhook.\n\nDistribution Modes:\n\nround_robin — Cursor-based fair rotation through active mailboxes\nrandom — Uniform random selection\npriority_weighted — Weighted by mailbox priority (1-10, higher = more tasks)\nfree_for_all — All active mailboxes receive the task\nfifo_queue — Tasks stored in a FIFO queue; workers poll and claim tasks on-demand\ninbound_proof — No tasks distributed; workers submit proofs directly without task assignment"
      },
      {
        "title": "Queue (FIFO)",
        "body": "MethodPathAuthDescriptionPOST/gigs/:id/queue/pollYesPoll for available tasks (gigworker, fifo_queue gigs only)GET/gigs/:id/queueYesList queued tasks\n\nPOST /gigs/:id/queue/poll\n\n// Request\n{ \"count\": 2 }   // optional, default 2, max 20\n\n// Response\n{\n  \"tasks\": [\n    {\n      \"id\": \"...\", \"type\": \"webhook\", \"subject\": \"...\",\n      \"payload\": \"...\", \"created_at\": \"...\"\n    }\n  ]\n}\n\nFor fifo_queue gigs only. Returns unclaimed queued tasks (oldest first), filtered against already-submitted proofs. Tasks are not forwarded to mailboxes — gigworkers must poll to claim them.\n\nFor Gigworkers (FIFO Queue gigs):\n\nTasks are NOT forwarded to your mailbox. Instead, use \"Poll New Tasks\" in the UI or call POST /gigs/:id/queue/poll to claim tasks from the shared queue.\nTasks are stored oldest-first (FIFO) and filtered against proofs you've already submitted.\nAfter polling, submit proofs as usual via POST /gigs/:id/proofs."
      },
      {
        "title": "Public (No Auth Required)",
        "body": "MethodPathAuthDescriptionGET/public/mailbox-info?token=...NoGet mailbox info via share tokenPOST/public/upload-presignNoGet S3 presigned upload URLPOST/public/submit-proofNoSubmit proof via public share linkGET/public/read-url?key=...&token=...NoGet presigned S3 read URL\n\nRate limited: 10-30 requests/min per share token.\n\nPOST /public/submit-proof\n\n// Request\n{\n  \"share_token\": \"tok_...\",\n  \"task_identifier\": \"reddit-thread-abc123\",\n  \"proofs\": [\"https://...\"]\n}\n\n// Response\n{ \"proof_id\": \"...\", \"status\": \"pending\" }"
      },
      {
        "title": "Reviews",
        "body": "MethodPathAuthDescriptionPOST/gigs/:id/reviewsYesLeave star review (1-5)PATCH/reviews/:id/resolveYesMark review as resolved (reviewer only)GET/reputation/:wallet/reviewsNoList reviews for wallet\n\nPOST /gigs/:id/reviews\n\n// Request\n{ \"target_wallet\": \"0x...\", \"stars\": 4, \"comment\": \"Reliable worker, good quality\" }\n\n// Response\n{ \"review\": { \"id\": \"...\", \"stars\": 4 } }\n\nOne review per reviewer-target pair per gig. Reviewer role auto-detected (client if owner, gigworker otherwise)."
      },
      {
        "title": "Reputation",
        "body": "MethodPathAuthDescriptionGET/reputation/:walletNoGet computed reputation scoreGET/reputation/alias/:alias_idNoGet reputation by wallet aliasGET/reputation/:wallet/eventsNoList raw reputation events\n\nGET /reputation/:wallet\n\n// Response\n{\n  \"wallet\": \"0x...\",\n  \"volume\": 150.50,\n  \"quality\": 0.92,\n  \"recency\": 0.85,\n  \"social\": 4.2,\n  \"event_count\": 47\n}"
      },
      {
        "title": "Wallets",
        "body": "MethodPathAuthDescriptionPOST/walletsYesCreate wallet aliasGET/walletsYesList user's wallet aliasesGET/wallets/:alias_idYesGet wallet detailGET/wallets/:alias_id/balancesYesGet on-chain balances (ETH + USDC)POST/wallets/:alias_id/transferYesTransfer USDC from hot walletDELETE/wallets/:alias_idYesDelete wallet alias\n\nPOST /wallets\n\n// Request (hot wallet — platform-managed)\n{ \"label\": \"My Hot Wallet\", \"is_hot_wallet\": true }\n\n// Request (external wallet — self-custody)\n{ \"label\": \"My MetaMask\", \"is_hot_wallet\": false, \"evm_address\": \"0x...\" }\n\n// Response\n{ \"wallet\": { \"alias_id\": \"...\", \"label\": \"My Hot Wallet\", \"is_hot_wallet\": true, \"created_at\": \"...\" } }\n\nOne hot wallet per user. External wallets are unlimited.\n\nGET /wallets/:alias_id/balances\n\n// Response\n{ \"evm_address\": \"0x...\", \"eth_balance\": \"0.05\", \"usdc_balance\": \"100.000000\" }\n\nPOST /wallets/:alias_id/transfer\n\n// Request\n{ \"to_address\": \"0x...\", \"amount\": 50 }\n\n// Response\n{ \"tx_hash\": \"0x...\" }\n\nHot wallets only."
      },
      {
        "title": "Profiles",
        "body": "MethodPathAuthDescriptionPATCH/profiles/meYesUpdate own profileGET/profiles/:identifierNoGet public profile (by email or alias_id)GET/profiles/:identifier/privateYesGet private profile (requires shared gig relationship)\n\nPATCH /profiles/me\n\n// Request\n{ \"display_name\": \"John Doe\", \"bio\": \"Experienced social media marketer\", \"avatar_url\": \"https://...\" }"
      },
      {
        "title": "Upload",
        "body": "MethodPathAuthDescriptionPOST/upload/presignYesGet presigned S3 upload URL\n\n// Request\n{ \"filename\": \"screenshot.png\", \"content_type\": \"image/png\", \"prefix\": \"proofs\" }\n\n// Response\n{ \"presigned_url\": \"https://s3...\", \"url\": \"https://s3...\", \"key\": \"proofs/...\", \"bucket\": \"...\" }\n\nPrefix options: \"avatars\", \"gig-icons\", or \"proofs\" (default). Presigned URL expires in 1 hour."
      },
      {
        "title": "OfficeX Integration",
        "body": "MethodPathAuthDescriptionPOST/officex/webhookNoHandle OfficeX install/uninstallPOST/officex/loginNoLogin via OfficeX credentials\n\nPOST /officex/webhook\n\n// Request\n{ \"event\": \"INSTALL\", \"payload\": { \"install_id\": \"...\", \"install_secret\": \"...\", \"user_id\": \"...\", \"app_id\": \"...\" } }\n\n// Response\n{ \"agent_context\": { \"user_email\": \"officex-...@dollar-platoon.local\", \"api_key\": \"...\", \"api_url\": \"https://...\", \"install_id\": \"...\", \"install_secret\": \"...\" } }\n\nCreates user with email officex-{user_id}@dollar-platoon.local. Auto-provisions hot wallet.\n\nPOST /officex/login\n\n// Request\n{ \"officex_user_id\": \"...\", \"officex_install_id\": \"...\" }\n\n// Response\n{ \"email\": \"officex-...@dollar-platoon.local\", \"api_key\": \"...\" }\n\nReturns 404 if user not found (webhook may not have fired yet). Returns 403 if install_id mismatch."
      },
      {
        "title": "Health",
        "body": "MethodPathAuthDescriptionGET/healthNoHealth check\n\n{ \"status\": \"ok\", \"stage\": \"staging\", \"timestamp\": \"2026-02-14T...\" }"
      },
      {
        "title": "Proof Lifecycle",
        "body": "submitted (locked_price snapshot, timeout_at set)\n  → approved (client action) → rolled up → payout on-chain → paid\n  → rejected (requires rejection_tag + optional feedback)\n  → timeout_approved (daily cron, after review_timeout) → same rollup path\n  → reported (post-timeout flag by owner, excluded from payouts)\n\nRejection tags: low_quality, incomplete, fake_proof, duplicate, unresponsive, other"
      },
      {
        "title": "Rollup & Payout Flow",
        "body": "Client triggers POST /gigs/:id/rollups (or daily cron runs automatically)\nGroups approved proofs by mailbox, sums locked_price per mailbox\nSkips mailboxes below min_payout threshold\nPre-checks: gross_amount + platform_fee <= available_funds — fails with 400 if underfunded\nCalls on-chain payout(gig_id, wallet, gross_amount, rollup_id)\nOn success: stores tx_hash, status → paid, creates reputation event\nOn failure: status → failed, retried by next daily cron run"
      }
    ],
    "body": "Dollar Platoon\nWhat Is Dollar Platoon?\n\nPeer-to-peer task payroll on Base L2. Reputation-driven marketplace for high-volume, low-ticket work.\n\nCreate micro-gigs, distribute tasks to gigworkers, collect proofs, and pay out USDC on Base L2. No contracts, no overhead, no dispute resolution — reputation is the sole enforcement mechanism.\n\nFor Clients\n\nScale your workforce instantly. Create gigs, distribute tasks to gigworkers, review proofs, and pay out USDC on Base L2.\n\nCreate Gigs — Post tasks with USDC funding. Set price per proof, review timeouts, and distribution mode.\nReview Proofs — Approve or reject submissions with a single click. Auto-approve after timeout protects gigworkers.\nTrack Payouts — Monitor funds, trigger payouts, and view on-chain transaction history.\nFor Gigworkers\n\nEarn USDC doing tasks. Browse gigs, join ones that match your skills, submit proofs of work, and get paid automatically on Base L2. Build your reputation as you go.\n\nFind Work — Browse the marketplace for gigs that match your skills. Filter by tags and earning potential.\nSubmit Proofs — Complete tasks, submit evidence, and track your submissions across all your mailboxes.\nBuild Reputation — Every approved proof builds your on-chain reputation across Volume, Quality, and Social dimensions.\nHow It Works\n\nPeer-to-peer task payroll on Base L2. Read this before creating or joining a gig.\n\nOverview\n\nDollar Platoon is a permissionless, composable on-chain marketplace for micro-gig work. Clients create gigs and fund them with USDC on Base L2. Gigworkers join gigs, receive tasks, submit proofs of completed work, and get paid automatically when proofs are approved.\n\nThe platform is designed for high-volume task payroll with no upper limit on price. There is no dispute resolution. Reputation is the sole enforcement mechanism.\n\nThe basic flow:\n\nClient creates a gig with terms, price per task, and USDC funding\nGigworkers join and receive a personal mailbox\nTasks are distributed to mailboxes via email or webhook\nGigworkers submit proofs of completed work\nClient reviews and approves/rejects proofs (or auto-approve after timeout)\nApproved proofs trigger USDC payouts on Base L2\nWallets & Gas\n\nEvery user on Dollar Platoon has their own on-chain wallet on Base L2 (an Ethereum Layer 2 network). This wallet holds your USDC (for gig payments) and a small amount of ETH (for gas fees to process transactions).\n\nYour responsibility: Fund your wallet with ETH for gas on the Base network. Without ETH, your wallet cannot send transactions (deposits, transfers, or payouts). You typically need only ~0.001 ETH to cover many transactions.\n\nKey Points:\n\nGas fees: Every on-chain action requires a small ETH gas fee. Base L2 fees are typically fractions of a cent.\nManaged vs External: Dollar Platoon can generate a managed (hot) wallet with encrypted key storage. Alternatively, link your own external wallet for full self-custody.\nNo recovery: If you lose access to an external wallet's private keys, those funds are permanently lost. Managed wallets are recoverable through your Dollar Platoon account.\nReputation System\n\nReputation is wallet-anchored, multi-dimensional, and event-sourced. Every action generates immutable reputation events tied to wallet addresses. Both clients and gigworkers have reputation.\n\nDimensions:\n\nVolume — Total USDC earned (gigworker) or paid out (client). The most basic measure of activity and trust.\nQuality — Approval rate weighted by rejection severity. Fake proofs damage quality 5x more than low-quality work.\nRecency — Decay function penalizing inactivity. Recent participants are more trustworthy than dormant ones.\nSocial — Aggregate star rating from counterparty reviews, weighted by dollar amount exchanged in each gig.\n\nKey Features:\n\nWallet-anchored: Reputation is tied to wallet addresses, not user accounts. Different wallets per gig means independent reputation histories.\nPermissionless: Anyone can create a wallet and participate. Reputation must be earned.\nGig gating: Clients can set minimum reputation thresholds (min volume, min quality, min recency) to exclude low-reputation wallets.\nInformational only: Reputation indicators are provided as informational aids. They carry no warranty of accuracy.\nSmart Contract & Payments\n\nDollar Platoon uses a single treasury smart contract deployed on Base L2. The contract handles USDC deposits and payouts. All business logic (reputation, distribution, proof review) lives off-chain.\n\nFee Structure:\n\nEvent\tFee\tDetail\nClient deposits USDC\t0%\tNo deposit fee\nGigworker payout\t10% on top\tWorker receives full gross; 10% charged additionally from gig balance\n\nExample: Worker earns $10 → contract charges $11 total ($10 to worker, $1 platform fee).\n\nKey Features:\n\nFund isolation: Each gig has its own on-chain balance. One gig's funds cannot pay out another.\nNo withdrawal: Once deposited, funds are locked in the gig. No withdrawal function exists.\nPrice lock: Price per task is locked at the moment of proof submission, protecting gigworkers from mid-gig price changes.\nAuto-approve timeout: If a client does not review a proof within the review timeout period, the proof is automatically approved.\nMinimum payout: Configurable per gig (default $0). Smaller amounts accumulate until threshold is met.\nNo debt: Gigs cannot go into debt. Rollups pre-check available_funds before payout.\nSecurity Tokens\n\nEvery gig has a 6-character alphanumeric security token embedded in its email address and webhook URL. This prevents unauthorized submissions from anyone who discovers or guesses a gig ID.\n\nHow it works:\n\nEmail: {gig_id}_{token}.staging.dollar-platoon@fwd.zoomgtm.com\nWebhook: /inbound/webhook/{gig_id}?token={token}\nInbound requests without a valid token are rejected with 403\nTokens are generated automatically on gig creation\nOwners can rotate tokens via the dashboard or POST /gigs/:id/rotate-token\nRotating a token invalidates the old email address and webhook URL — update all integrations after rotating\nBackward compatibility: Existing gigs without a security token will accept all inbound requests. Generate a token from the dashboard to enable protection.\nThird-Party Publisher Apps\n\nDollar Platoon does not control task content or delivery. Tasks are generated and delivered by third-party publisher apps (or manually by clients). Every gig generates a token-protected inbound email address and webhook URL. Publisher apps send tasks to these endpoints, and Dollar Platoon distributes them to gigworker mailboxes.\n\nDollar Platoon has no control over what publisher apps send. Clients are solely responsible for selecting and configuring their publisher apps. Gigworkers should review gig terms carefully before joining.\n\nComposability & Flexible Workflow\n\nDollar Platoon handles only the payroll layer: distribution, proof collection, reputation, and payment. Everything else is pluggable:\n\nTask generation: Use any publisher app, email client, or manual workflow\nTask delivery: Email forwarding, webhook forwarding, or both\nProof validation: Manual client review, webhook-based automation, AI agents, or timeout auto-approval\nDistribution modes: Round robin, random, priority weighted, free-for-all, FIFO queue, or inbound proof\nReputation gating: Set minimums per gig or leave open to all\nTrust & Validation\n\nTrust is earned, not granted. The reputation system provides signals but not guarantees.\n\nFor clients: Review proofs carefully. Use rejection tags to flag bad work. Set reputation thresholds to filter applicants. Configure proof webhooks for automated validation. Consider requiring member approval for new joiners.\n\nFor gigworkers: Check the client's reputation score before joining. Look at their volume, quality, and social ratings. Check the gig's available funds. Understand the review timeout period.\n\nHighly recommended: Extend trust validation with your own systems and AI agents. Use proof webhooks to validate submissions programmatically.\n\nAs-Is Risk Nature\n\nDollar Platoon is provided on an \"as-is\" and \"as-available\" basis. ZoomGTM operates it as a technology platform only. Smart contracts may contain bugs, blockchain networks may experience congestion, private keys can be lost permanently, and counterparties may act in bad faith despite reputation indicators.\n\nThis is a permissionless system. All parties participate entirely at their own risk and expense.\n\nLiability Waiver\n\nBy using Dollar Platoon, you irrevocably waive all claims against ZoomGTM and its affiliates. No dispute resolution. No warranties. Maximum aggregate liability: $0.\n\nProhibited Uses\n\nDollar Platoon may not be used for illegal activities, adult content, harassment, money laundering, malware distribution, circumventing sanctions, or high-risk financial services. ZoomGTM may suspend access at any time without notice. See full Terms of Use.\n\nExtending with Your Own Systems\nAI Agent Review — Configure proof webhooks to send submissions to your own AI agent for automated quality checks\nCustom Validation Pipelines — Build webhook handlers that validate proofs against external data sources\nPublisher App Integration — Build or use third-party publisher apps to generate tasks automatically\nManual Workflow — Email tasks to your gig address, review proofs in the dashboard, click approve/reject\nImportant Warnings & Best Practices\nGig Funding\nFund your gig before approving proofs. Approved proofs cannot be paid if the gig has insufficient funds. The platform will reject the rollup.\nAccount for the 10% platform fee. A $100 payout costs $110 from the gig balance. When funding, budget 110% of expected payouts.\nFunds are locked. There is no withdrawal function. Once USDC is deposited into a gig, it can only leave via worker payouts. Deposit conservatively and top up as needed.\nNo debt allowed. Rollups pre-check available_funds >= gross_amount + platform_fee. If the gig can't cover the payout, it fails entirely.\nMonitor your balance. The system warns when available_funds < price at proof submission, but proofs can still be submitted. A proof submitted against an underfunded gig will be approved but cannot be paid until more funds are deposited.\nProof Submission\nAlways include a meaningful task_identifier. This is the primary link between an inbound task and its proof. Without it, clients cannot easily match proofs to the tasks they originated from. Use the task's subject line, ID, URL, or another unique reference.\nInclude verifiable evidence. Proofs should contain URLs, screenshots, or other evidence that the client can independently verify. Unverifiable proofs are more likely to be rejected.\nUpload proof files via presigned URL first. Use POST /upload/presign to get an S3 upload URL, upload your file, then include the returned url in your proof's proofs array.\nCheck gig funding before submitting. The gig detail endpoint shows available_funds. If funds are low, your proof may be approved but payment delayed until the client tops up.\nPrice is locked at submission. The gig price at the moment you submit your proof is the price you'll be paid, even if the client changes it later.\nProof Review (Clients)\nReview promptly. Proofs auto-approve after the review_timeout period (default 48 hours). If you miss the window, the proof is treated as approved.\nUse rejection tags. When rejecting, always include a rejection_tag. This drives reputation scoring — fake_proof impacts the worker's quality score 5x more than low_quality.\nReport timeout-approved proofs. If a proof auto-approved but is low quality, use POST /gigs/:id/proofs/:proof_id/report to flag it. Reported proofs are excluded from payouts.\nConfigure proof webhooks. Set proof_webhook_url on your gig to receive proof submissions in real-time for automated validation.\nPayouts\nTrigger rollups manually or wait for the daily cron. POST /gigs/:id/rollups processes all approved proofs immediately. The daily cron also processes approved proofs automatically.\nMinimum payout threshold. If min_payout is set, mailboxes with earnings below the threshold are skipped (returned in skipped_below_minimum). Their proofs accumulate until the threshold is met.\nCheck rollup status. Rollups can fail if the on-chain transaction reverts (e.g., insufficient gas, contract error). Failed rollups are retried by the daily cron.\nShare Tokens (Delegated Proof Submission)\nGigworkers can share a link for proof submission without login. Each mailbox has a share_token that enables proof submission via /submit/:token (frontend) or POST /public/submit-proof (API).\nRegenerate tokens if compromised. Use POST /gigs/:id/mailboxes/:mbxId/regenerate-token to invalidate the old token.\nRate limited. Public endpoints are limited to 10-30 requests/minute per token.\nRecommended Prices\n\nSuggested pricing for common gig tasks on Dollar Platoon.\n\nThese are suggestions, not requirements. Prices reflect market supply and demand for delivery. Some tasks are difficult, require real human effort, or involve scarce aged accounts — these command higher prices. Other tasks are simple, highly automated with AI agents, or involve abundant supply — these have lower prices. Set your price based on what the market will bear.\n\nCategory\tAction\tSuggested Price (USDC)\nReddit, Forums & et al\tPost\t$1 - $10\n\tComment\t$0.10 - $1\n\tUpvote\t$0.05 - $0.20\n\tAccount creation\t$10 - $50\nBlogs\tProgrammatic SEO article\t$0.01 - $0.10\n\tPremium blog (Medium, Substack, LinkedIn)\t$0.50 - $2\n\tAccount creation\t$2 - $10\n\tBacklink\t$0.01 - $2\nX / Twitter / Bluesky / Threads\tComment\t$0.06 - $0.10\n\tFollow\t$0.05 - $0.50\n\tAccount creation\t$5 - $20\nFacebook\tPost in group\t$0.50 - $2\n\tComment on post\t$0.10 - $0.50\n\tAccount creation\t$50\nInstagram\tComment\t$0.06 - $0.50\n\tFollow\t$0.10 - $1\n\tLike\t$0.06 - $0.10\n\tAccount creation\t$20\nLinkedIn\tComment\t$0.10 - $0.50\n\tPost\t$1 - $2\n\tAccount creation\t$50\nTikTok\tComment\t$0.06 - $0.50\n\tPost (varies by georegion)\t$0.50 - $5\n\tFollow\t$0.05 - $0.50\n\tLike\t$0.06 - $0.10\n\tAccount creation\t$10 - $50\nYouTube\tLike\t$0.05 - $0.20\n\tPlaythrough\t$0.10 - $0.50\n\tComment\t$0.20 - $0.50\n\tVideo upload\t$1 - $5\n\tAccount creation\t$10 - $20\nGoogle Reviews & et al\tReview\t$0.50 - $5\n\tAccount creation\t$10 - $30\nGmail, Outlook & et al\tMarked not spam\t$0.05 - $0.20\n\tAccount creation\t$2 - $5\nProduct Hunt & et al\tAction (upvote, comment, etc.)\t$0.25 - $2\n\tAccount creation\t$5 - $20\nDiscord & Telegram\tGroup join\t$0.50 - $2\n\tMessage\t$0.50 - $1\nSurveys & et al\tSurvey completion\t$0.50 - $2\nChatGPT, Gemini & et al\tAsk mention\t$0.05 - $0.10\nApp Testing & Focus Groups\tTask\t$2 - $10\nCreative Curation\tSubmission\t$0.10 - $1\nCreative Creation\tCreative approved\t$0.10 - $5\nDirectory Posting\tSignup to post\t$0.50 - $2\nFunnel Spy\tScreen recording\t$2 - $5\nCustom Tasks\tTask (varies by complexity & time)\t$0.50 - $5\nSpecial Task\tSpecial task\t$3 - $9\nWhy Do Prices Vary?\nAccount scarcity: Aged, verified accounts on platforms like Facebook and LinkedIn are scarce and expensive to create\nPlatform difficulty: Some platforms have aggressive anti-bot detection, making actions harder and more expensive\nGeoregion: Tasks targeting specific geographic regions may cost more due to limited local supply\nAutomation level: Highly automatable tasks (AI-written SEO articles, bulk likes) are cheaper. Tasks requiring genuine human engagement cost more\nRisk: Actions that risk account suspension (posting in strict subreddits, leaving Google reviews) command a premium\nREST API Reference\n\nAuth via x-api-key header on all authenticated endpoints.\n\nAuthentication\nMethod\tPath\tAuth\tDescription\nPOST\t/auth/send-otp\tNo\tSend 4-digit OTP code to email\nPOST\t/auth/verify-otp\tNo\tVerify OTP and get API key\nPOST\t/auth/rotate-key\tYes\tGenerate new API key\nGET\t/auth/me\tYes\tGet current user profile\nPOST /auth/send-otp\n// Request\n{ \"email\": \"user@example.com\" }\n\n// Response\n{ \"message\": \"Code sent\" }\n\n\n4-digit code (1000-9999), 10-minute expiry, max 5 attempts. Sends via email.\n\nPOST /auth/verify-otp\n// Request\n{ \"email\": \"user@example.com\", \"code\": \"1234\" }\n\n// Response\n{ \"email\": \"user@example.com\", \"api_key\": \"base64url_encoded_key\" }\n\n\nCreates new user if first login. Auto-provisions hot wallet. Returns existing API key (no rotation on login).\n\nPOST /auth/rotate-key\n// Response\n{ \"api_key\": \"base64url_encoded_key\" }\n\nGET /auth/me\n// Response\n{ \"email\": \"...\", \"display_name\": \"...\", \"bio\": \"...\", \"avatar_url\": \"...\", \"created_at\": \"...\", \"officex_user_id\": \"...\", \"officex_install_id\": \"...\" }\n\nGigs\nMethod\tPath\tAuth\tDescription\nPOST\t/gigs\tYes\tCreate new gig\nGET\t/gigs\tNo\tList marketplace gigs (public + active)\nGET\t/gigs/mine\tYes\tList user's owned gigs\nGET\t/gigs/:id\tOptional\tGet gig detail\nPATCH\t/gigs/:id\tYes\tUpdate gig (owner only)\nPOST\t/gigs/:id/rotate-token\tYes\tRotate security token (owner only)\nGET\t/gigs/:id/dashboard\tYes\tGet gig dashboard with all data (owner only)\nPOST\t/gigs/:id/deposit\tYes\tDeposit USDC to gig treasury\nPOST /gigs\n// Request\n{\n  \"title\": \"Reddit Comments for Product Launch\",\n  \"price\": 0.50,\n  \"terms\": \"Comment on specified Reddit threads with genuine engagement...\",\n  \"notes\": \"Internal notes for owner only\",\n  \"owner_wallet\": \"wallet_alias_id\",      // optional, auto-provisions if omitted\n  \"visibility\": \"public\",                  // \"public\" | \"private\"\n  \"tags\": [\"reddit\", \"writing\"],\n  \"requires_approval\": false,\n  \"review_timeout\": 172800,                // seconds, default 48h\n  \"distribution\": \"round_robin\",           // \"round_robin\" | \"free_for_all\" | \"priority_weighted\" | \"random\" | \"fifo_queue\" | \"inbound_proof\"\n  \"min_rep_volume\": null,\n  \"min_rep_quality\": null,\n  \"min_rep_recency\": null,\n  \"min_payout\": 0,\n  \"location\": { \"country\": \"US\", \"label\": \"United States\" },\n  \"icon_url\": \"https://...\",\n  \"proof_webhook_url\": \"https://...\",\n  \"contract_address\": \"0x...\"\n}\n\n// Response\n{\n  \"gig\": {\n    \"id\": \"GIG_01HX...\",\n    \"title\": \"Reddit Comments for Product Launch\",\n    \"email\": \"GIG_01HX..._abc123.staging.dollar-platoon@fwd.zoomgtm.com\",\n    \"webhook\": \"https://staging.dollarplatoon.com/api/inbound/webhook/GIG_01HX...?token=abc123\",\n    \"invite_url\": \"https://staging.dollarplatoon.com/gig/GIG_01HX.../join\",\n    \"price\": 0.50,\n    \"requires_approval\": false,\n    \"status\": \"active\"\n  }\n}\n\n\nCompliance check via Gemini (blocks illegal content, warns on borderline).\n\nValid tags: linkedin, twitter, medium, tiktok, youtube, instagram, reddit, facebook, pinterest, quora, discord, telegram, email, blog, podcast, newsletter, seo, advertising, design, writing, translation, data-entry, research, survey, testing, other\n\nGET /gigs (Marketplace)\nGET /gigs?limit=20&cursor=<base64>&tags=linkedin,twitter\n\n// Response\n{ \"gigs\": [...], \"next_cursor\": \"eyJ...\" }\n\n\nReturns public + active gigs with wallet aliases resolved.\n\nGET /gigs/:id\n\nReturns gig object. If authenticated as owner or member, includes notes and enriched data. Shows available_funds and reserved_funds so you can assess whether the gig can pay.\n\nPATCH /gigs/:id (Owner Only)\n// Request (any subset)\n{\n  \"title\": \"Updated Gig Title\",\n  \"price\": 1.00,\n  \"terms\": \"Updated terms...\",\n  \"status\": \"paused\",\n  \"review_timeout\": 86400,\n  \"tags\": [\"reddit\"],\n  \"visibility\": \"private\",\n  \"distribution\": \"random\",\n  \"requires_approval\": true,\n  \"min_payout\": 1,\n  \"location\": { \"country\": \"US\" },\n  \"notes\": \"Updated internal notes\",\n  \"proof_webhook_url\": \"https://...\",\n  \"contract_address\": \"0x...\"\n}\n\n// Response\n{ \"success\": true }\n\nPOST /gigs/:id/rotate-token (Owner Only)\n// Response\n{\n  \"email\": \"GIG_01HX..._newtoken.staging.dollar-platoon@fwd.zoomgtm.com\",\n  \"webhook\": \"https://staging.dollarplatoon.com/api/inbound/webhook/GIG_01HX...?token=newtoken\"\n}\n\n\nGenerates a new 6-char security token. Invalidates old email address and webhook URL. Old email lookup is deleted and replaced. Update all publisher integrations with the new URLs after rotating.\n\nGET /gigs/:id/dashboard (Owner Only)\n// Response\n{\n  \"gig\": { ... },\n  \"mailboxes\": [ ... ],\n  \"proofs\": [ ... ],\n  \"rollups\": [ ... ],\n  \"inbound_messages\": [ ... ]\n}\n\n\nSyncs on-chain balance on every load. Signs all S3 URLs for proof attachments.\n\nPOST /gigs/:id/deposit\n// Request\n{ \"wallet_alias_id\": \"alias_id\", \"amount\": 100 }\n\n// Response\n{ \"tx_hash\": \"0x...\", \"available_funds\": 100 }\n\n\nDeposits USDC from your hot wallet to the gig's on-chain balance. Remember to budget 110% of expected payouts to cover the platform fee.\n\nMailboxes\nMethod\tPath\tAuth\tDescription\nPOST\t/gigs/:id/mailboxes\tYes\tJoin gig (create mailbox)\nGET\t/gigs/:id/mailboxes\tYes\tList mailboxes in gig (owner only)\nPATCH\t/gigs/:id/mailboxes/:mbx_id\tYes\tUpdate mailbox (owner only)\nDELETE\t/gigs/:id/mailboxes/:mbx_id\tYes\tLeave gig / remove mailbox\nGET\t/mailboxes/mine\tYes\tList user's mailboxes across all gigs\nGET\t/mailboxes/:mbxId/inbound\tYes\tFetch inbound messages for mailbox\nPOST\t/gigs/:id/mailboxes/:mbxId/regenerate-token\tYes\tRegenerate share token\nPOST /gigs/:id/mailboxes (Join Gig)\n// Request\n{\n  \"name\": \"John's Mailbox\",\n  \"email\": \"john@example.com\",\n  \"wallet_address\": \"0x...\",    // optional, auto-provisions hot wallet if omitted\n  \"webhook\": \"https://...\",     // optional, for webhook task delivery\n  \"notes\": \"I have experience with Reddit marketing\",\n  \"location\": { \"country\": \"US\" }\n}\n\n// Response\n{\n  \"mailbox\": {\n    \"id\": \"01HX...\",\n    \"name\": \"John's Mailbox\",\n    \"gig_id\": \"GIG_01HX...\",\n    \"status\": \"active\"          // or \"pending_approval\" if gig.requires_approval\n  }\n}\n\n\nValidates reputation thresholds. Auto-creates wallet alias for external wallets.\n\nPATCH /gigs/:id/mailboxes/:mbx_id (Owner Only)\n// Request\n{ \"priority\": 5, \"status\": \"active\" }\n\n// Response\n{ \"success\": true, \"status\": \"active\" }\n\n\nOwner can set status to \"active\" to approve a pending mailbox, or \"inactive\" to disable it.\n\nGET /mailboxes/mine\n// Response\n{\n  \"mailboxes\": [\n    {\n      \"id\": \"...\", \"name\": \"...\", \"gig_id\": \"GIG_...\", \"status\": \"active\",\n      \"gig_title\": \"...\", \"gig_email\": \"...\", \"owner_email\": \"...\", \"owner_display_name\": \"...\",\n      \"tasks_received\": 12, \"proofs_submitted\": 10, \"response_rate\": 0.83\n    }\n  ]\n}\n\nGET /mailboxes/:mbxId/inbound\n// Response\n{\n  \"inbound_messages\": [\n    {\n      \"id\": \"...\", \"type\": \"email\", \"subject\": \"...\", \"from\": \"sender@example.com\",\n      \"payload\": \"...\", \"mailbox_id\": \"...\", \"forwarded_at\": \"...\",\n      \"attachments\": [{ \"filename\": \"...\", \"content_type\": \"...\", \"url\": \"https://...\" }]\n    }\n  ]\n}\n\nProofs\nMethod\tPath\tAuth\tDescription\nPOST\t/gigs/:id/proofs\tYes\tSubmit proof of work\nGET\t/gigs/:id/proofs\tYes\tList proofs (filterable by status)\nGET\t/gigs/:id/proofs/:proof_id\tYes\tGet proof detail\nPATCH\t/gigs/:id/proofs/:proof_id\tYes\tApprove or reject proof (owner only)\nPOST\t/gigs/:id/proofs/:proof_id/report\tYes\tReport auto-approved proof (owner only)\nPOST /gigs/:id/proofs (Submit Proof)\n// Request\n{\n  \"mailbox_id\": \"01HX...\",\n  \"task_identifier\": \"reddit-thread-abc123\",\n  \"proofs\": [\"https://reddit.com/r/...\", \"https://s3.amazonaws.com/...\"]\n}\n\n// Response\n{\n  \"proof\": {\n    \"id\": \"01HX...\",\n    \"status\": \"pending\",\n    \"timeout_at\": \"2026-02-18T...\"\n  },\n  \"warning\": \"Warning: gig available funds are less than the task price\"\n}\n\n\ntask_identifier is critical. This field links a proof to the specific task it fulfills. Use the inbound message subject, task URL, or any unique identifier from the original task. Without it, clients cannot match proofs to tasks and are more likely to reject.\n\nThe warning field appears when the gig's available_funds is less than the task price. The proof is still accepted, but payout will fail until the client deposits more funds.\n\nPrice is locked at submission time (locked_price).\n\nPATCH /gigs/:id/proofs/:proof_id (Review)\n// Request (approve)\n{ \"action\": \"approve\", \"feedback\": \"Great work!\" }\n\n// Request (reject)\n{ \"action\": \"reject\", \"feedback\": \"Screenshot doesn't match\", \"rejection_tag\": \"incomplete\" }\n\n// Response\n{ \"success\": true, \"status\": \"approved\" }\n\n\nRejection tags (required when rejecting): low_quality, incomplete, fake_proof, duplicate, unresponsive, other\n\nRejection weights (reputation impact): fake_proof=5x, duplicate=3x, incomplete=2x, unresponsive=2x, low_quality=1x, other=1x\n\nPOST /gigs/:id/proofs/:proof_id/report (Owner Only)\n// Response\n{ \"success\": true, \"status\": \"reported\" }\n\n\nOnly works on timeout_approved proofs. Reported proofs are excluded from rollups and will not be paid.\n\nRollups (Payouts)\nMethod\tPath\tAuth\tDescription\nGET\t/gigs/:id/rollups\tYes\tList rollups for gig\nPOST\t/gigs/:id/rollups\tYes\tTrigger manual rollup (owner only)\nGET\t/rollups/mine\tYes\tList rollups across user's mailboxes\nPOST /gigs/:id/rollups (Trigger Payout)\n// Response\n{\n  \"rollups\": [\n    {\n      \"id\": \"...\",\n      \"mailbox_id\": \"...\",\n      \"wallet_address\": \"0x...\",\n      \"proof_ids\": [\"...\", \"...\"],\n      \"gross_amount\": 5.00,\n      \"platform_fee\": 0.50,\n      \"net_amount\": 5.00,\n      \"tx_hash\": \"0x...\",\n      \"status\": \"paid\"\n    }\n  ],\n  \"available_funds\": 44.50,\n  \"skipped_below_minimum\": [\n    { \"mailbox_id\": \"...\", \"amount\": 0.50 }\n  ]\n}\n\n\nGroups approved + timeout_approved proofs by mailbox. Pre-checks available_funds >= gross_amount + platform_fee (no debt allowed). Worker receives full gross_amount. Skips mailboxes below min_payout threshold.\n\nWill return 400 error if the gig cannot cover the total cost (gross + 10% fee).\n\nInbound (Task Distribution)\nMethod\tPath\tAuth\tDescription\nPOST\t/inbound/email\tNo\tResend inbound email webhook\nPOST\t/inbound/webhook/:gig_id\tNo\tPublisher webhook task delivery\nPOST /inbound/webhook/:gig_id?token=...\n\nAccepts JSON (default) or HTML/plain text payloads. Content-Type header determines parsing.\n\nJSON payload (Content-Type: application/json):\n\n// Request\n{ \"task\": \"Comment on this Reddit thread\", \"url\": \"https://...\" }\n\n// Response\n{ \"status\": \"forwarded\", \"targets\": 3 }\n\n\nHTML payload (Content-Type: text/html or text/plain):\n\ncurl -X POST \"https://staging.dollarplatoon.com/api/inbound/webhook/GIG_01HX...?token=abc123&subject=My+Report\" \\\n  -H \"Content-Type: text/html\" \\\n  -d '<h1>Task Details</h1><p>Please complete this task...</p>'\n\n// Response\n{ \"status\": \"forwarded\", \"targets\": 3 }\n\n\nWhen HTML/text is sent, the message is stored with type: \"email\" and rendered as formatted HTML on the frontend (same as email-sourced tasks). An optional subject query parameter can be included to set the message subject line.\n\nRequires valid token query parameter matching the gig's security token. Returns 403 if token is invalid. Selects mailboxes via distribution algorithm, forwards payload to each mailbox webhook.\n\nDistribution Modes:\n\nround_robin — Cursor-based fair rotation through active mailboxes\nrandom — Uniform random selection\npriority_weighted — Weighted by mailbox priority (1-10, higher = more tasks)\nfree_for_all — All active mailboxes receive the task\nfifo_queue — Tasks stored in a FIFO queue; workers poll and claim tasks on-demand\ninbound_proof — No tasks distributed; workers submit proofs directly without task assignment\nQueue (FIFO)\nMethod\tPath\tAuth\tDescription\nPOST\t/gigs/:id/queue/poll\tYes\tPoll for available tasks (gigworker, fifo_queue gigs only)\nGET\t/gigs/:id/queue\tYes\tList queued tasks\nPOST /gigs/:id/queue/poll\n// Request\n{ \"count\": 2 }   // optional, default 2, max 20\n\n// Response\n{\n  \"tasks\": [\n    {\n      \"id\": \"...\", \"type\": \"webhook\", \"subject\": \"...\",\n      \"payload\": \"...\", \"created_at\": \"...\"\n    }\n  ]\n}\n\n\nFor fifo_queue gigs only. Returns unclaimed queued tasks (oldest first), filtered against already-submitted proofs. Tasks are not forwarded to mailboxes — gigworkers must poll to claim them.\n\nFor Gigworkers (FIFO Queue gigs):\n\nTasks are NOT forwarded to your mailbox. Instead, use \"Poll New Tasks\" in the UI or call POST /gigs/:id/queue/poll to claim tasks from the shared queue.\nTasks are stored oldest-first (FIFO) and filtered against proofs you've already submitted.\nAfter polling, submit proofs as usual via POST /gigs/:id/proofs.\nPublic (No Auth Required)\nMethod\tPath\tAuth\tDescription\nGET\t/public/mailbox-info?token=...\tNo\tGet mailbox info via share token\nPOST\t/public/upload-presign\tNo\tGet S3 presigned upload URL\nPOST\t/public/submit-proof\tNo\tSubmit proof via public share link\nGET\t/public/read-url?key=...&token=...\tNo\tGet presigned S3 read URL\n\nRate limited: 10-30 requests/min per share token.\n\nPOST /public/submit-proof\n// Request\n{\n  \"share_token\": \"tok_...\",\n  \"task_identifier\": \"reddit-thread-abc123\",\n  \"proofs\": [\"https://...\"]\n}\n\n// Response\n{ \"proof_id\": \"...\", \"status\": \"pending\" }\n\nReviews\nMethod\tPath\tAuth\tDescription\nPOST\t/gigs/:id/reviews\tYes\tLeave star review (1-5)\nPATCH\t/reviews/:id/resolve\tYes\tMark review as resolved (reviewer only)\nGET\t/reputation/:wallet/reviews\tNo\tList reviews for wallet\nPOST /gigs/:id/reviews\n// Request\n{ \"target_wallet\": \"0x...\", \"stars\": 4, \"comment\": \"Reliable worker, good quality\" }\n\n// Response\n{ \"review\": { \"id\": \"...\", \"stars\": 4 } }\n\n\nOne review per reviewer-target pair per gig. Reviewer role auto-detected (client if owner, gigworker otherwise).\n\nReputation\nMethod\tPath\tAuth\tDescription\nGET\t/reputation/:wallet\tNo\tGet computed reputation score\nGET\t/reputation/alias/:alias_id\tNo\tGet reputation by wallet alias\nGET\t/reputation/:wallet/events\tNo\tList raw reputation events\nGET /reputation/:wallet\n// Response\n{\n  \"wallet\": \"0x...\",\n  \"volume\": 150.50,\n  \"quality\": 0.92,\n  \"recency\": 0.85,\n  \"social\": 4.2,\n  \"event_count\": 47\n}\n\nWallets\nMethod\tPath\tAuth\tDescription\nPOST\t/wallets\tYes\tCreate wallet alias\nGET\t/wallets\tYes\tList user's wallet aliases\nGET\t/wallets/:alias_id\tYes\tGet wallet detail\nGET\t/wallets/:alias_id/balances\tYes\tGet on-chain balances (ETH + USDC)\nPOST\t/wallets/:alias_id/transfer\tYes\tTransfer USDC from hot wallet\nDELETE\t/wallets/:alias_id\tYes\tDelete wallet alias\nPOST /wallets\n// Request (hot wallet — platform-managed)\n{ \"label\": \"My Hot Wallet\", \"is_hot_wallet\": true }\n\n// Request (external wallet — self-custody)\n{ \"label\": \"My MetaMask\", \"is_hot_wallet\": false, \"evm_address\": \"0x...\" }\n\n// Response\n{ \"wallet\": { \"alias_id\": \"...\", \"label\": \"My Hot Wallet\", \"is_hot_wallet\": true, \"created_at\": \"...\" } }\n\n\nOne hot wallet per user. External wallets are unlimited.\n\nGET /wallets/:alias_id/balances\n// Response\n{ \"evm_address\": \"0x...\", \"eth_balance\": \"0.05\", \"usdc_balance\": \"100.000000\" }\n\nPOST /wallets/:alias_id/transfer\n// Request\n{ \"to_address\": \"0x...\", \"amount\": 50 }\n\n// Response\n{ \"tx_hash\": \"0x...\" }\n\n\nHot wallets only.\n\nProfiles\nMethod\tPath\tAuth\tDescription\nPATCH\t/profiles/me\tYes\tUpdate own profile\nGET\t/profiles/:identifier\tNo\tGet public profile (by email or alias_id)\nGET\t/profiles/:identifier/private\tYes\tGet private profile (requires shared gig relationship)\nPATCH /profiles/me\n// Request\n{ \"display_name\": \"John Doe\", \"bio\": \"Experienced social media marketer\", \"avatar_url\": \"https://...\" }\n\nUpload\nMethod\tPath\tAuth\tDescription\nPOST\t/upload/presign\tYes\tGet presigned S3 upload URL\n// Request\n{ \"filename\": \"screenshot.png\", \"content_type\": \"image/png\", \"prefix\": \"proofs\" }\n\n// Response\n{ \"presigned_url\": \"https://s3...\", \"url\": \"https://s3...\", \"key\": \"proofs/...\", \"bucket\": \"...\" }\n\n\nPrefix options: \"avatars\", \"gig-icons\", or \"proofs\" (default). Presigned URL expires in 1 hour.\n\nOfficeX Integration\nMethod\tPath\tAuth\tDescription\nPOST\t/officex/webhook\tNo\tHandle OfficeX install/uninstall\nPOST\t/officex/login\tNo\tLogin via OfficeX credentials\nPOST /officex/webhook\n// Request\n{ \"event\": \"INSTALL\", \"payload\": { \"install_id\": \"...\", \"install_secret\": \"...\", \"user_id\": \"...\", \"app_id\": \"...\" } }\n\n// Response\n{ \"agent_context\": { \"user_email\": \"officex-...@dollar-platoon.local\", \"api_key\": \"...\", \"api_url\": \"https://...\", \"install_id\": \"...\", \"install_secret\": \"...\" } }\n\n\nCreates user with email officex-{user_id}@dollar-platoon.local. Auto-provisions hot wallet.\n\nPOST /officex/login\n// Request\n{ \"officex_user_id\": \"...\", \"officex_install_id\": \"...\" }\n\n// Response\n{ \"email\": \"officex-...@dollar-platoon.local\", \"api_key\": \"...\" }\n\n\nReturns 404 if user not found (webhook may not have fired yet). Returns 403 if install_id mismatch.\n\nHealth\nMethod\tPath\tAuth\tDescription\nGET\t/health\tNo\tHealth check\n{ \"status\": \"ok\", \"stage\": \"staging\", \"timestamp\": \"2026-02-14T...\" }\n\nProof Lifecycle\nsubmitted (locked_price snapshot, timeout_at set)\n  → approved (client action) → rolled up → payout on-chain → paid\n  → rejected (requires rejection_tag + optional feedback)\n  → timeout_approved (daily cron, after review_timeout) → same rollup path\n  → reported (post-timeout flag by owner, excluded from payouts)\n\n\nRejection tags: low_quality, incomplete, fake_proof, duplicate, unresponsive, other\n\nRollup & Payout Flow\nClient triggers POST /gigs/:id/rollups (or daily cron runs automatically)\nGroups approved proofs by mailbox, sums locked_price per mailbox\nSkips mailboxes below min_payout threshold\nPre-checks: gross_amount + platform_fee <= available_funds — fails with 400 if underfunded\nCalls on-chain payout(gig_id, wallet, gross_amount, rollup_id)\nOn success: stores tx_hash, status → paid, creates reputation event\nOn failure: status → failed, retried by next daily cron run"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/mevdragon/dollar-platoon",
    "publisherUrl": "https://clawhub.ai/mevdragon/dollar-platoon",
    "owner": "mevdragon",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/dollar-platoon",
    "downloadUrl": "https://openagent3.xyz/downloads/dollar-platoon",
    "agentUrl": "https://openagent3.xyz/skills/dollar-platoon/agent",
    "manifestUrl": "https://openagent3.xyz/skills/dollar-platoon/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/dollar-platoon/agent.md"
  }
}