{"openapi":"3.1.0","info":{"title":"JustHandled Agent Gateway","version":"0.2.0","description":"16 small, deterministic preflights sold to software agents over x402. Each run costs $0.05 USDC and returns a versioned evidence receipt. Inputs are not persisted."},"servers":[{"url":"https://justhandled-agent-gateway.netlify.app"}],"externalDocs":{"description":"Gateway catalog and integration links","url":"https://justhandled-agent-gateway.netlify.app"},"paths":{"/api/catalog":{"get":{"operationId":"list_utilities","summary":"List utilities","responses":{"200":{"description":"Utility catalog"}}}},"/api/product-catalog":{"get":{"operationId":"get_product_catalog","summary":"Get machine-readable products and exact payment terms","responses":{"200":{"description":"Commerce catalog"}}}},"/sandbox/index.json":{"get":{"operationId":"get_sandbox_examples","summary":"Get free deterministic integration fixtures","responses":{"200":{"description":"Sandbox fixture catalog"}}}},"/api/run/shopify-product-csv-preflight":{"post":{"operationId":"shopify_product_csv_preflight","summary":"Shopify Product CSV Preflight","description":"Check normalized Shopify product rows for missing identity fields, duplicate SKUs, unsafe image URLs, and overwrite hazards. Price: $0.05 via x402.","tags":["Commerce"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["rows"],"properties":{"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":[],"additionalProperties":true}},"mode":{"enum":["new","overwrite"]},"existing_handles":{"type":"array","maxItems":1000,"items":{"type":"string"}},"overwrite_required_columns":{"type":"array","maxItems":100,"items":{"type":"string"}}},"additionalProperties":false},"example":{"rows":[{"Handle":"linen-shirt","Title":"Linen Shirt","Variant SKU":"LS-001","Image Src":"https://example.com/ls.jpg"}],"mode":"new"}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/image-to-sku-match-checker":{"post":{"operationId":"image_to_sku_match_checker","summary":"Image to SKU Match Checker","description":"Match supplied image paths to a SKU roster and flag missing, extra, unknown, or colliding assets. Price: $0.05 via x402.","tags":["Commerce"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["roster","files"],"properties":{"roster":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["sku"],"additionalProperties":true}},"files":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["path"],"additionalProperties":true}},"sku_pattern":{"type":"string","maxLength":300}},"additionalProperties":false},"example":{"roster":[{"sku":"LS-001","expected_count":1}],"files":[{"path":"images/LS-001-front.jpg"}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/utm-link-consistency-checker":{"post":{"operationId":"utm_link_consistency_checker","summary":"UTM Link Consistency Checker","description":"Check campaign links for missing UTMs, duplicates, case drift, policy violations, and possible PII. Price: $0.05 via x402.","tags":["Marketing"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["links"],"properties":{"links":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["id","url"],"additionalProperties":true}},"policy":{"type":"object","properties":{"required":{"type":"array","items":{"type":"string"}},"allowed_values":{"type":"object"}},"additionalProperties":false}},"additionalProperties":false},"example":{"links":[{"id":"hero","url":"https://example.com/?utm_source=newsletter&utm_medium=email&utm_campaign=launch"}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/gitignore-coverage-preflight":{"post":{"operationId":"gitignore_coverage_preflight","summary":"Gitignore Coverage Preflight","description":"Check supplied paths and ignore patterns for uncovered or tracked sensitive-looking files. Price: $0.05 via x402.","tags":["Developer Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","minItems":1,"maxItems":2000,"items":{"type":"string"}},"patterns":{"type":"array","maxItems":1000,"items":{"type":"string"}},"tracked_paths":{"type":"array","maxItems":2000,"items":{"type":"string"}}},"additionalProperties":false},"example":{"paths":["src/index.ts",".env"],"patterns":[".env"],"tracked_paths":[]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/one-click-unsubscribe-header-checker":{"post":{"operationId":"one_click_unsubscribe_header_checker","summary":"One-Click Unsubscribe Header Checker","description":"Check normalized marketing-message evidence for List-Unsubscribe and RFC 8058 one-click headers. Price: $0.05 via x402.","tags":["Email"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["messages"],"properties":{"messages":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["id","message_type","headers"],"additionalProperties":true}}},"additionalProperties":false},"example":{"messages":[{"id":"m1","message_type":"marketing","headers":{"List-Unsubscribe":"<https://example.com/unsubscribe/1>","List-Unsubscribe-Post":"List-Unsubscribe=One-Click"},"body_text":"Unsubscribe here."}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/npm-publish-payload-preflight":{"post":{"operationId":"npm_publish_payload_preflight","summary":"npm Publish Payload Preflight","description":"Check an npm pack manifest for missing entrypoints, absent runtime output, sensitive files, and baseline drift. Price: $0.05 via x402.","tags":["Developer Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["package","pack_files"],"properties":{"package":{"type":"object"},"pack_files":{"type":"array","minItems":1,"maxItems":5000,"items":{"type":"string"}},"previous_files":{"type":"array","maxItems":5000,"items":{"type":"string"}}},"additionalProperties":false},"example":{"package":{"name":"example","version":"1.0.0","main":"dist/index.js"},"pack_files":["package.json","dist/index.js"]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/redirect-map-preflight":{"post":{"operationId":"redirect_map_preflight","summary":"Redirect Map Preflight","description":"Check a redirect map for invalid targets, self-redirects, chains, loops, and missing legacy sources. Price: $0.05 via x402.","tags":["Web Operations"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["redirects"],"properties":{"redirects":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["source","destination"],"additionalProperties":true}},"baseline_sources":{"type":"array","maxItems":2000,"items":{"type":"string"}}},"additionalProperties":false},"example":{"redirects":[{"source":"/old","destination":"/new"}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/subtitle-timeline-qa":{"post":{"operationId":"subtitle_timeline_qa","summary":"Subtitle Timeline QA","description":"Flag invalid cue timing, overlaps, empty captions, and excessive reading speed in normalized subtitle data. Price: $0.05 via x402.","tags":["Media"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["cues"],"properties":{"cues":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["id","start_ms","end_ms","text"],"additionalProperties":true}},"max_characters_per_second":{"type":"number","exclusiveMinimum":0}},"additionalProperties":false},"example":{"cues":[{"id":"1","start_ms":0,"end_ms":2000,"text":"Welcome."}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/calendar-invite-timezone-preflight":{"post":{"operationId":"calendar_invite_timezone_preflight","summary":"Calendar Invite Timezone Preflight","description":"Check normalized iCalendar events for floating time, boundary, DATE, sequence, and recurrence hazards. Price: $0.05 via x402.","tags":["Productivity"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["events"],"properties":{"events":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["uid","dtstart","dtend"],"additionalProperties":true}}},"additionalProperties":false},"example":{"events":[{"uid":"event-1","dtstart":"20260801T140000Z","dtend":"20260801T150000Z","value_type":"DATE-TIME","sequence":0}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/filename-portability-preflight":{"post":{"operationId":"filename_portability_preflight","summary":"Filename Portability Preflight","description":"Flag reserved names, invalid characters, trailing dots, case collisions, Unicode collisions, and long paths. Price: $0.05 via x402.","tags":["Productivity"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","minItems":1,"maxItems":5000,"items":{"type":"string","maxLength":4096}},"max_path_length":{"type":"integer","minimum":1,"maximum":32767}},"additionalProperties":false},"example":{"paths":["assets/logo.svg","docs/Guide.pdf"],"max_path_length":240}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/promise-action-evidence-checker":{"post":{"operationId":"promise_action_evidence_checker","summary":"Promise, Action, and Evidence Checker","description":"Compare declared promises with recorded actions and evidence, flagging unsupported completion and unaddressed commitments. Price: $0.05 via x402.","tags":["Agent Evidence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["promises","actions","evidence"],"properties":{"promises":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["id"],"additionalProperties":true}},"actions":{"type":"array","maxItems":2000,"items":{"type":"object","required":["id","status","promise_ids","evidence_ids"],"additionalProperties":true}},"evidence":{"type":"array","maxItems":5000,"items":{"type":"object","required":["id"],"additionalProperties":true}}},"additionalProperties":false},"example":{"promises":[{"id":"p1","description":"Publish package","required":true}],"actions":[{"id":"a1","status":"completed","promise_ids":["p1"],"evidence_ids":["e1"]}],"evidence":[{"id":"e1","type":"registry","uri":"https://registry.example/package"}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/tool-call-contract-auditor":{"post":{"operationId":"tool_call_contract_auditor","summary":"Tool Call Contract Auditor","description":"Audit recorded tool calls against declared authorization, argument, call-count, and outcome contracts. Price: $0.05 via x402.","tags":["Agent Evidence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["contracts","calls"],"properties":{"contracts":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["tool"],"additionalProperties":true}},"calls":{"type":"array","maxItems":5000,"items":{"type":"object","required":["id","tool","arguments"],"additionalProperties":true}}},"additionalProperties":false},"example":{"contracts":[{"tool":"publish","allowed":true,"max_calls":1,"required_arguments":["artifact"],"forbidden_arguments":["private_key"]}],"calls":[{"id":"c1","tool":"publish","arguments":{"artifact":"package.tgz"},"outcome":"published"}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/completion-evidence-receipt-auditor":{"post":{"operationId":"completion_evidence_receipt_auditor","summary":"Completion Evidence Receipt Auditor","description":"Check completion, partial, and blocked outcome records for the evidence and remaining-work details their status requires. Price: $0.05 via x402.","tags":["Agent Evidence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["outcomes"],"properties":{"outcomes":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["id","status","evidence"],"additionalProperties":true}}},"additionalProperties":false},"example":{"outcomes":[{"id":"publish","promised_outcome":"Package is public","status":"completed","evidence":[{"type":"registry","uri":"https://registry.example/package"}]}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/tool-description-contract-linter":{"post":{"operationId":"tool_description_contract_linter","summary":"Tool Description Contract Linter","description":"Lint structured tool descriptions for bounded purpose, inputs, outputs, side effects, failure modes, cost, and idempotency. Price: $0.05 via x402.","tags":["Agent Evidence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tools"],"properties":{"tools":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["name","description"],"additionalProperties":true}}},"additionalProperties":false},"example":{"tools":[{"name":"catalog","description":"List available deterministic utilities and their current prices.","inputs":["none"],"outputs":["utility catalog"],"side_effects":["none"],"failure_modes":["network unavailable"],"cost":{"amount":"0","currency":"USD"},"idempotency":"safe to repeat"}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/skill-activation-verifier":{"post":{"operationId":"skill_activation_verifier","summary":"Skill Activation Verifier","description":"Compare expected and observed skill activations across test cases to expose missed and spurious routing. Price: $0.05 via x402.","tags":["Agent Evaluation"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["cases"],"properties":{"cases":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["id","expected_skills","observed_skills"],"additionalProperties":true}}},"additionalProperties":false},"example":{"cases":[{"id":"create-pdf","expected_skills":["pdf"],"observed_skills":["pdf"]}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}},"/api/run/agent-cost-decomposer":{"post":{"operationId":"agent_cost_decomposer","summary":"Agent Cost Decomposer","description":"Calculate model, cached-token, and external-tool costs per call and flag a supplied budget overrun. Price: $0.05 via x402.","tags":["Agent Evaluation"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["calls"],"properties":{"calls":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["id","input_tokens","output_tokens","input_usd_per_million","output_usd_per_million"],"additionalProperties":true}},"budget_usd":{"type":"number","minimum":0}},"additionalProperties":false},"example":{"budget_usd":0.1,"calls":[{"id":"turn-1","model":"example-model","input_tokens":1000,"cached_input_tokens":500,"output_tokens":250,"input_usd_per_million":1,"cached_input_usd_per_million":0.1,"output_usd_per_million":4,"tool_cost_usd":0.01}]}}}},"responses":{"200":{"description":"Deterministic preflight result with evidence receipt","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResult"}}}},"400":{"description":"Malformed or invalid evidence"},"402":{"description":"x402 payment required","headers":{"Payment-Required":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}}},"413":{"description":"Input exceeds 256 KiB"}}}}},"components":{"schemas":{"ExecutionResult":{"type":"object","required":["schemaVersion","utility","status","summary","findings","review","receipt","limitations"],"properties":{"schemaVersion":{"const":"1.0"},"utility":{"type":"object"},"status":{"enum":["READY","REVIEW","BLOCK"]},"summary":{"type":"object"},"findings":{"type":"array","items":{"type":"object"}},"review":{"type":"array","items":{"type":"object"}},"receipt":{"type":"object"},"limitations":{"type":"array","items":{"type":"string"}}}}}}}