POST
/
api
/
external
/
missions
/
drafts
Create Draft
curl --request POST \
  --url https://api.example.com/api/external/missions/drafts
Creates an external_mission_drafts row with funding_status = pending_funding. The response includes calldata for MissionFactory.createAuthorizedFundedMission(...). External mission funding calldata is generated for KATCH and USDC rewards. Draft creation rejects any reward.token other than KATCH or USDC. SDK and CLI clients must send an Idempotency-Key header. Reusing the same key with the same normalized mission returns the existing draft. Reusing it with materially different mission input returns 409 idempotency_conflict.
POST /api/external/missions/drafts
Idempotency-Key: coffee-sf-2026-05-20
{
  "status": "pending_funding",
  "draftId": "draft_mabc1234_deadbeef",
  "missionId": "ext-film-a-cappuccino-at-ritual-coffee",
  "reviewStatus": "draft",
  "fundingStatus": "pending_funding",
  "nextAction": "send_create_funded_mission_transaction",
  "fundingQuote": {
    "chainId": 480,
    "factoryAddress": "0x...",
    "tokenAddress": "0x79A02482A880bCE3F13e09Da970dC34db4CD24d1",
    "rewardPerSubmissionBaseUnits": "10000000",
    "targetCount": 1,
    "totalBudgetBaseUnits": "10000000",
    "functionName": "createAuthorizedFundedMission",
    "authorization": {
      "signer": "0x...",
      "creator": "0x...",
      "nonce": "0x...",
      "deadline": 1770000000,
      "expiresAt": "2026-02-02T00:00:00.000Z",
      "signature": "0x..."
    },
    "calldata": "0x..."
  }
}
The transaction must be sent by the creator wallet named in the authorization, or through that creator wallet’s smart-account execution path. Do not alter the calldata; the authorization binds the mission ID, token, reward, target count, creator wallet, nonce, and deadline. Authorizations are short-lived. If the deadline passes before funding, create or fetch a fresh draft response before submitting the transaction.