{
  "openapi": "3.0.3",
  "info": {
    "title": "FatBaby Developer Tools API",
    "version": "1.0.0",
    "description": "JSON, encoding, generators, text, dates, web, email, API helpers, and webhook inboxes. Auth: Bearer fb_live_… API key."
  },
  "servers": [
    {
      "url": "https://thefatbaby.com/api"
    }
  ],
  "paths": {
    "/v1/tools/json-format-minify": {
      "post": {
        "summary": "JSON format / minify",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/json-validate": {
      "post": {
        "summary": "JSON validate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/json-repair": {
      "post": {
        "summary": "JSON repair",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/json-diff": {
      "post": {
        "summary": "JSON diff",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/json-schema-validate": {
      "post": {
        "summary": "JSON Schema validate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/jsonpath": {
      "post": {
        "summary": "JSONPath",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/csv-json": {
      "post": {
        "summary": "CSV ↔ JSON",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/json-csv": {
      "post": {
        "summary": "JSON → CSV",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/json-xml": {
      "post": {
        "summary": "JSON ↔ XML",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/json-yaml": {
      "post": {
        "summary": "JSON ↔ YAML",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/csv-clean": {
      "post": {
        "summary": "CSV clean",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/csv-sql": {
      "post": {
        "summary": "CSV → SQL",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/xml-validate": {
      "post": {
        "summary": "XML validate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/base64": {
      "post": {
        "summary": "Base64",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/url-encode": {
      "post": {
        "summary": "URL encode",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/html-entities": {
      "post": {
        "summary": "HTML entities",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/hex": {
      "post": {
        "summary": "Hex",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/gzip": {
      "post": {
        "summary": "Gzip",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/brotli": {
      "post": {
        "summary": "Brotli",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/hashing": {
      "post": {
        "summary": "Hashing",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/hmac": {
      "post": {
        "summary": "HMAC",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/jwt-decode": {
      "post": {
        "summary": "JWT decode",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/jwt-verify": {
      "post": {
        "summary": "JWT verify",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/password-strength": {
      "post": {
        "summary": "Password strength",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/checksum": {
      "post": {
        "summary": "Checksum",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/uuid": {
      "post": {
        "summary": "UUID",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/ulid": {
      "post": {
        "summary": "ULID",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/nanoid": {
      "post": {
        "summary": "NanoID",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/random-token": {
      "post": {
        "summary": "Random token",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/password-generator": {
      "post": {
        "summary": "Password generator",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/qr-codes": {
      "post": {
        "summary": "QR codes",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/qr-read": {
      "post": {
        "summary": "QR read",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/barcodes": {
      "post": {
        "summary": "Barcodes",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/barcode-read": {
      "post": {
        "summary": "Barcode read",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/lorem": {
      "post": {
        "summary": "Lorem ipsum",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/fake-data": {
      "post": {
        "summary": "Fake data",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/color-palette": {
      "post": {
        "summary": "Color palette",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/text-case": {
      "post": {
        "summary": "Text case",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/slug": {
      "post": {
        "summary": "Slugify",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/text-diff": {
      "post": {
        "summary": "Text diff",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/text-count": {
      "post": {
        "summary": "Text count",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/remove-duplicates": {
      "post": {
        "summary": "Remove duplicates",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/find-replace": {
      "post": {
        "summary": "Find & replace",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/regex-test": {
      "post": {
        "summary": "Regex test",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/markdown-html": {
      "post": {
        "summary": "Markdown → HTML",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/html-sanitize": {
      "post": {
        "summary": "HTML sanitize",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/code-minify": {
      "post": {
        "summary": "Code minify",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/unicode-normalize": {
      "post": {
        "summary": "Unicode normalize",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/string-similarity": {
      "post": {
        "summary": "String similarity",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/timestamp": {
      "post": {
        "summary": "Timestamp",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/timezone": {
      "post": {
        "summary": "Timezone",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/date-difference": {
      "post": {
        "summary": "Date difference",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/cron-parse": {
      "post": {
        "summary": "Cron parse",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/cron-next": {
      "post": {
        "summary": "Cron next",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/file-size": {
      "post": {
        "summary": "File size",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/number-base": {
      "post": {
        "summary": "Number base",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/tools/percentage": {
      "post": {
        "summary": "Percentage",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/url-metadata": {
      "post": {
        "summary": "URL metadata",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/screenshot": {
      "post": {
        "summary": "Screenshot",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/to-pdf": {
      "post": {
        "summary": "Website → PDF",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/status": {
      "post": {
        "summary": "HTTP status",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/redirects": {
      "post": {
        "summary": "Redirect chain",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/broken-links": {
      "post": {
        "summary": "Broken links",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/ssl": {
      "post": {
        "summary": "SSL certificate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/dns": {
      "post": {
        "summary": "DNS lookup",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/domain-info": {
      "post": {
        "summary": "Domain info",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/favicon": {
      "post": {
        "summary": "Favicon",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/robots": {
      "post": {
        "summary": "robots.txt",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/sitemap": {
      "post": {
        "summary": "Sitemap",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/technology-detect": {
      "post": {
        "summary": "Technology detect",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/web/performance": {
      "post": {
        "summary": "Performance probe",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/email/validate": {
      "post": {
        "summary": "Email validate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/email/domain-check": {
      "post": {
        "summary": "Email domain check",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/email/disposable-check": {
      "post": {
        "summary": "Disposable check",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/email/role-check": {
      "post": {
        "summary": "Role check",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/email/normalize": {
      "post": {
        "summary": "Email normalize",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/email/gravatar": {
      "post": {
        "summary": "Gravatar URL",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/email/batch-validate": {
      "post": {
        "summary": "Batch email validate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/openapi-validate": {
      "post": {
        "summary": "OpenAPI validate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/openapi-convert": {
      "post": {
        "summary": "OpenAPI convert",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/json-to-typescript": {
      "post": {
        "summary": "JSON → TypeScript",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/json-to-model": {
      "post": {
        "summary": "JSON → model",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/http-request": {
      "post": {
        "summary": "HTTP request",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/response-validate": {
      "post": {
        "summary": "Response validate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/mock-response": {
      "post": {
        "summary": "Mock response",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/sql-format": {
      "post": {
        "summary": "SQL format",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/graphql-format": {
      "post": {
        "summary": "GraphQL format",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/curl-generate": {
      "post": {
        "summary": "cURL generate",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/dev/curl-to-code": {
      "post": {
        "summary": "cURL → code",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/webhooks/endpoints": {
      "post": {
        "summary": "/v1/webhooks/endpoints",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      },
      "get": {
        "summary": "List webhook endpoints",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/webhooks/sign": {
      "post": {
        "summary": "/v1/webhooks/sign",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/v1/webhooks/verify": {
      "post": {
        "summary": "/v1/webhooks/verify",
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success"
          },
          "402": {
            "description": "Insufficient credits"
          }
        }
      }
    },
    "/hooks/{publicId}": {
      "post": {
        "summary": "Public webhook capture (no API key)",
        "parameters": [
          {
            "name": "publicId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Captured"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "fb_live_"
      }
    }
  }
}