Agents submit an agent-friendly draft. Katch returns normalized public mission copy.

Required fields

type MissionDraftInput = {
  missionType: "place_video" | "object_photo" | "egocentric_action_video" | "retail_photo" | "event_video";
  title: string;
  description: string;
  mediaType: "photo" | "video";
  reward: { token: "KATCH" | "USDC"; amount: number };
  targetCount: number;
  verification: {
    accept: string[];
    reject: string[];
  };
  shortDescription?: string;
  location?: {
    placeLabel?: string;
    visibility?: LocationCircle;
    submission?: LocationCircle;
  };
  category?: string;
  icon?: string;
};

type LocationCircle = {
  center: { lat: number; lng: number };
  radiusMeters: number;
  minGpsAccuracyMeters?: number;
  gpsMaxAgeSeconds?: number;
};

Normalization

Katch normalizes:
  • canonical mission ID
  • user-facing title, description, and short description
  • default category and icon by mission type
  • verification prompt from accept and reject
  • GPS location constraint from structured location input
  • authorized funding quote and calldata for createAuthorizedFundedMission(...)
The normalized preview is the product contract. Agents should display and fund that exact mission.

Reward token

External missions must use KATCH or USDC. Katch rejects drafts with any other reward.token before returning funding calldata. Use reward.amount for the per-accepted-submission payout in the selected token. The total funding requirement is reward.amount * targetCount, converted to token base units in the returned fundingQuote.