{
  "openapi": "3.1.0",
  "info": {
    "title": "mondello.dev marketplace API",
    "version": "1.0.0",
    "description": "x402-gated micropayment APIs — image generation, TTS, site diagnostics, and more. USDC on Base mainnet. Each paid route returns HTTP 402 with a PAYMENT-REQUIRED header; pay with any x402 client to retrieve the response.",
    "contact": {
      "name": "Romy Mondello",
      "email": "roman@mondello.dev",
      "url": "https://mondello.dev"
    },
    "license": {
      "name": "CC BY 4.0"
    },
    "x-payment-protocol": {
      "name": "x402",
      "version": "v2",
      "specUrl": "https://x402.org",
      "facilitator": "https://pay.openfacilitator.io",
      "treasury": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
      "network": "Base mainnet (eip155:8453)",
      "asset": "USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913)"
    }
  },
  "servers": [
    {
      "url": "https://mondello.dev",
      "description": "Production"
    }
  ],
  "paths": {
    "/api/catalog.json": {
      "get": {
        "summary": "Master catalog of all paid surfaces (free)",
        "operationId": "getCatalog",
        "responses": {
          "200": {
            "description": "All skills, hosted APIs, and paid content with x402 metadata.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/stats.json": {
      "get": {
        "summary": "Coarse activity stats (free, public, cached 5 min)",
        "operationId": "getStats",
        "responses": {
          "200": {
            "description": "Total transactions, last sale, top resources, 30-day counts.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/skills.json": {
      "get": {
        "summary": "Skills-only manifest (free)",
        "operationId": "listSkills",
        "responses": {
          "200": {
            "description": "Paginated list of all published skills with x402 metadata.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/api/x402/media/image/generate": {
      "post": {
        "summary": "Generate a 16:9 editorial hero image ($0.05)",
        "description": "Calls MiniMax image-01. Takes ~100s per image. Returns raw JPEG bytes.",
        "operationId": "generateImage",
        "x-x402-payment": {
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "assetName": "USDC",
          "payTo": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
          "priceUsd": 0.05,
          "priceMicroUsd": "50000",
          "description": "Image generation via MiniMax image-01"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "title"
                ],
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Title/prompt for the image."
                  },
                  "excerpt": {
                    "type": "string",
                    "description": "Optional extra prompt context."
                  },
                  "style": {
                    "type": "string",
                    "enum": [
                      "editorial-minimal",
                      "photographic",
                      "illustration"
                    ],
                    "default": "editorial-minimal"
                  },
                  "aspectRatio": {
                    "type": "string",
                    "enum": [
                      "16:9",
                      "1:1",
                      "4:3"
                    ],
                    "default": "16:9"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Generated JPEG",
            "content": {
              "image/jpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "402": {
            "description": "x402 payment required"
          }
        }
      }
    },
    "/api/x402/media/narrate": {
      "post": {
        "summary": "Text → MP3 narration ($0.05)",
        "description": "Calls MiniMax speech-2.8-hd. Accepts up to 9500 chars of text or Portable Text blocks.",
        "operationId": "narrate",
        "x-x402-payment": {
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "assetName": "USDC",
          "payTo": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
          "priceUsd": 0.05,
          "priceMicroUsd": "50000",
          "description": "TTS narration via MiniMax speech-2.8-hd"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "text": {
                    "type": "string",
                    "description": "Plain text (preferred)"
                  },
                  "blocks": {
                    "type": "array",
                    "description": "Portable Text blocks (alt to text)",
                    "items": {
                      "type": "object"
                    }
                  },
                  "voiceId": {
                    "type": "string",
                    "default": "English_SereneWoman"
                  },
                  "speed": {
                    "type": "number",
                    "minimum": 0.5,
                    "maximum": 2,
                    "default": 1
                  },
                  "model": {
                    "type": "string",
                    "enum": [
                      "speech-2.8-hd",
                      "speech-2.8-turbo"
                    ],
                    "default": "speech-2.8-hd"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Generated MP3",
            "content": {
              "audio/mpeg": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "402": {
            "description": "x402 payment required"
          }
        }
      }
    },
    "/api/x402/agent-seo/bot-catalog": {
      "get": {
        "summary": "AI agent crawler catalog ($0.05, free with ?inspect=1)",
        "description": "Maintained list of 16+ AI crawlers — user-agent, operator, purpose, docs URL. Source for robots.txt generators.",
        "operationId": "getBotCatalog",
        "x-x402-payment": {
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "assetName": "USDC",
          "payTo": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
          "priceUsd": 0.05,
          "priceMicroUsd": "50000",
          "description": "Agent-SEO bot catalog"
        },
        "parameters": [
          {
            "name": "inspect",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            },
            "description": "Set to 1 for free landing docs instead of the paid JSON."
          }
        ],
        "responses": {
          "200": {
            "description": "Catalog JSON",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "x402 payment required"
          }
        }
      }
    },
    "/api/x402/llms/pack": {
      "post": {
        "summary": "URL → plaintext bundle packer ($0.05 base + $0.01/url)",
        "description": "Submit 1..20 https URLs, get a packaged plaintext bundle with HTML stripped. Cost scales with count.",
        "operationId": "packUrls",
        "x-x402-payment": {
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "assetName": "USDC",
          "payTo": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
          "priceUsd": 0.06,
          "priceMicroUsd": "60000",
          "description": "URL → llms-full bundle packer (1-URL minimum)"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "urls"
                ],
                "properties": {
                  "urls": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uri"
                    },
                    "minItems": 1,
                    "maxItems": 20
                  },
                  "maxCharsPerPage": {
                    "type": "integer",
                    "default": 20000,
                    "minimum": 1000
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Packaged plaintext bundle",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "402": {
            "description": "x402 payment required"
          }
        }
      }
    },
    "/api/x402/emdash/session-status": {
      "post": {
        "summary": "EmDash site diagnostic probe ($0.05)",
        "description": "Hits 12 standard EmDash surfaces (sitemap, llms.txt, mcp, admin, catalog) and returns findings + recommendations.",
        "operationId": "emdashSessionStatus",
        "x-x402-payment": {
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "assetName": "USDC",
          "payTo": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
          "priceUsd": 0.05,
          "priceMicroUsd": "50000",
          "description": "EmDash site diagnostic probe"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "siteUrl"
                ],
                "properties": {
                  "siteUrl": {
                    "type": "string",
                    "format": "uri",
                    "description": "Absolute https URL to probe."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Findings + recommendations",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "402": {
            "description": "x402 payment required"
          }
        }
      }
    },
    "/llms-full.txt": {
      "get": {
        "summary": "Full content ingest — all posts inlined ($0.25)",
        "operationId": "getLlmsFull",
        "x-x402-payment": {
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "assetName": "USDC",
          "payTo": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
          "priceUsd": 0.25,
          "priceMicroUsd": "250000",
          "description": "Full blog content ingest"
        },
        "responses": {
          "200": {
            "description": "Plaintext bundle",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "402": {
            "description": "x402 payment required"
          }
        }
      }
    },
    "/skills/{slug}/raw": {
      "get": {
        "summary": "Skill markdown (paid download, $0.10)",
        "operationId": "getSkillRaw",
        "x-x402-payment": {
          "scheme": "exact",
          "network": "eip155:8453",
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "assetName": "USDC",
          "payTo": "0x0E4d1C7Ca47879C7Dd518526ef38f290C7081028",
          "priceUsd": 0.1,
          "priceMicroUsd": "100000",
          "description": "Claude Code skill markdown download"
        },
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Skill slug from /skills.json"
          }
        ],
        "responses": {
          "200": {
            "description": "Skill markdown",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "402": {
            "description": "x402 payment required"
          }
        }
      }
    },
    "/skills/{slug}/install": {
      "get": {
        "summary": "Skill install script (free, fetches paid /raw)",
        "operationId": "getSkillInstallScript",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Bash install script",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  }
}