{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/investormatch-pro/json-schema/investormatch-pro-blog-post-request-schema.json",
  "title": "BlogPostRequest",
  "description": "Create a blog post DRAFT. Field names are snake_case. HTML in `content` is sanitized server-side to a safe subset of tags. Posts are always created as drafts and never auto-published. Do not send `status` (or set it to \"draft\"). The article body must meet the GEO content standard or the request is rejected with 400 and nothing is saved:\n- Any article of 800+ words must be broken into at least 5 <h2> sections (the FAQ heading counts as one).\n- Every article must end with an <h2>Frequently Asked Questions</h2> section containing 3-5 Q&As, each question in an <h3> and each answer in the <p> that follows it.\n- Every FAQ answer must be at least 40 characters — a full self-contained sentence an answer engine can quote.\n- Every statistic or data claim (a percentage, a dollar figure, a ratio, a median/average) must carry an inline source citation in the same sentence: a link to the source, \"according to <publication>\", or a \"(Source: Publication, Year)\" parenthetical.\n- Numbers inside double quotes are read as illustrative examples (a sample founder script, say) and are exempt from the citation rule — do not use quotes to smuggle a real claim past it.\n- FAQPage JSON-LD is generated automatically from the on-page FAQ section — do not hand-write a schema block; it will be ignored and can conflict with the generated one.",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_original/investormatch-pro-api-openapi.json#/components/schemas/BlogPostRequest",
  "type": "object",
  "required": [
    "title",
    "content"
  ],
  "properties": {
    "title": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200
    },
    "content": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80000,
      "description": "Article HTML. Sanitized server-side; <h1> demoted to <h2>. Must carry at least 5 <h2> sections once it reaches 800 words, a closing \"<h2>Frequently Asked Questions</h2>\" section of 3-5 <h3>question</h3><p>answer</p> pairs (the FAQPage JSON-LD is generated from it), and an inline source citation on every statistic."
    },
    "excerpt": {
      "type": "string",
      "maxLength": 500
    },
    "slug": {
      "type": "string",
      "maxLength": 80,
      "description": "Optional. Auto-generated from the title if omitted."
    },
    "meta_title": {
      "type": "string",
      "maxLength": 200
    },
    "meta_description": {
      "type": "string",
      "maxLength": 320
    },
    "category": {
      "type": "string",
      "maxLength": 80
    },
    "tags": {
      "type": "array",
      "maxItems": 15,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 40
      }
    },
    "featured_image": {
      "type": "string",
      "maxLength": 2000,
      "description": "Optional. Must be a valid http(s) URL."
    },
    "featured_image_alt": {
      "type": "string",
      "maxLength": 300
    },
    "og_image": {
      "type": "string",
      "maxLength": 2000,
      "description": "Optional. Must be a valid http(s) URL."
    },
    "author_name": {
      "type": "string",
      "maxLength": 120
    },
    "author_title": {
      "type": "string",
      "maxLength": 160
    },
    "author_bio": {
      "type": "string",
      "maxLength": 1000
    },
    "ai_prompt": {
      "type": "string",
      "maxLength": 5000
    }
  }
}