IntentGuard · OpenAPI Overlay 1.0.0

IntentGuard Router API Evangelist enhancement overlay

8 actions 8 updates security extends openapi/hatchable-site-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for IntentGuard's API. It is a proposal applied on top of the contract, not a document IntentGuard publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

contentsecuritycontactx-llms-txtx-agent-cardx-mcp-endpointcomponentsrequestBody

Targets 8

$.info
$
$.paths['/api/route'].post
$.paths['/api/intent-check'].post
$.paths['/api/route'].post.responses['402']
$.paths['/api/intent-check'].post.responses['402']
$.paths['/api/router-preview'].post.responses['400']
$.paths['/api/route'].post.responses['400']

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: IntentGuard Router API Evangelist enhancement overlay
  version: 1.0.0
x-generated: '2026-09-19'
x-method: generated
x-source: >-
  openapi/hatchable-site-openapi.yml, enriched from mcp/hatchable-site-tools-list.json (live tools/list),
  well-known/hatchable-site-x402-service.json and a live 402 challenge observed at POST /api/route on 2026-09-19
x-note: >-
  Captures the API Evangelist enhancements to the operator's published spec without mutating it. Every value
  below was harvested from a document the operator itself publishes or from an observed live response. The
  three substantive additions are the missing securitySchemes for the x402 PAYMENT-SIGNATURE header, a content
  schema for the 402 challenge that both paid operations declare with no body shape, and the requestBody for
  checkImageIntent, which the spec omits entirely and the live MCP inputSchema supplies.
extends: openapi/hatchable-site-openapi.yml
actions:
- target: $.info
  description: Add the contact and provider surfaces the spec omits but the operator publishes (agent card provider block, llms.txt).
  update:
    contact:
      name: IntentGuard
      url: https://intentguard.hatchable.site
    x-llms-txt: https://intentguard.hatchable.site/llms.txt
    x-agent-card: https://intentguard.hatchable.site/.well-known/agent-card.json
    x-mcp-endpoint: https://intentguard.hatchable.site/api/mcp
- target: $
  description: >-
    Add the x402 security scheme. The spec carries x-payment-info on routeTask and declares 402 on both paid
    operations but has no components.securitySchemes, so the contract reads as an entirely open API.
  update:
    components:
      securitySchemes:
        x402:
          type: apiKey
          in: header
          name: PAYMENT-SIGNATURE
          description: >-
            x402 v2 pay-per-call. Not a static credential - the header value is a signed, single-use, amount-bound
            EIP-3009 payment authorization for the accepts[] entry returned in the 402 challenge (0.0009 USDC on
            Base, eip155:8453). Observed header name from the live challenge error string
            "PAYMENT-SIGNATURE header is required".
      schemas:
        X402PaymentRequired:
          type: object
          description: x402 v2 PaymentRequired challenge, as observed live on POST /api/route and POST /api/intent-check.
          required: [x402Version, accepts]
          properties:
            x402Version: {type: integer, const: 2}
            error: {type: string, example: PAYMENT-SIGNATURE header is required}
            resource:
              type: object
              properties:
                url: {type: string, format: uri}
                description: {type: string}
                mimeType: {type: string}
                serviceName: {type: string}
                tags: {type: array, items: {type: string}}
            accepts:
              type: array
              items:
                type: object
                properties:
                  scheme: {type: string, example: exact}
                  network: {type: string, example: eip155:8453}
                  amount: {type: string, description: USDC base units, example: '900'}
                  asset: {type: string, example: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'}
                  payTo: {type: string}
                  maxTimeoutSeconds: {type: integer, example: 60}
                  extra: {type: object}
            extensions: {type: object, description: Bazaar discovery extension carrying the input schema and an output example.}
        InvalidRequest:
          type: object
          description: Validation error envelope as observed live on POST /api/router-preview with an empty body.
          properties:
            error: {type: string, example: invalid_request}
            message: {type: string, example: task is required and must contain at least 8 characters.}
- target: $.paths['/api/route'].post
  description: Declare the x402 requirement on the paid operation.
  update:
    security:
    - x402: []
- target: $.paths['/api/intent-check'].post
  description: Declare the x402 requirement and add the requestBody the spec omits, taken from the live MCP tools/list inputSchema for check_image_intent.
  update:
    security:
    - x402: []
    requestBody:
      required: true
      content:
        application/json:
          schema:
            type: object
            required: [user_request, agent_plan]
            properties:
              user_request: {type: string, minLength: 3, maxLength: 12000}
              agent_plan: {type: string, minLength: 3, maxLength: 12000}
              reference_notes: {type: array, maxItems: 20, items: {type: string}}
- target: $.paths['/api/route'].post.responses['402']
  description: Give the 402 challenge a body schema.
  update:
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/X402PaymentRequired'
    headers:
      payment-required:
        description: base64 of the same challenge document
        schema: {type: string}
- target: $.paths['/api/intent-check'].post.responses['402']
  description: Give the 402 challenge a body schema.
  update:
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/X402PaymentRequired'
- target: $.paths['/api/router-preview'].post.responses['400']
  description: Give the validation error a body schema.
  update:
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/InvalidRequest'
- target: $.paths['/api/route'].post.responses['400']
  description: Give the validation error a body schema.
  update:
    content:
      application/json:
        schema:
          $ref: '#/components/schemas/InvalidRequest'