get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/1.1/patches/2227543/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2227543,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2227543/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423220022.2180059-5-jsnow@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/1.1/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260423220022.2180059-5-jsnow@redhat.com>",
    "date": "2026-04-23T22:00:13",
    "name": "[04/12] qapi/docs: add \"Intro\" section",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "592a962730f225936a30c9a9f0359f6e42e6d059",
    "submitter": {
        "id": 64343,
        "url": "http://patchwork.ozlabs.org/api/1.1/people/64343/?format=api",
        "name": "John Snow",
        "email": "jsnow@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260423220022.2180059-5-jsnow@redhat.com/mbox/",
    "series": [
        {
            "id": 501255,
            "url": "http://patchwork.ozlabs.org/api/1.1/series/501255/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=501255",
            "date": "2026-04-23T22:00:11",
            "name": "qapi: add formal \"intro\" section",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/501255/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2227543/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2227543/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=W0TnyKZx;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g1qmn50Wlz1yDD\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 24 Apr 2026 08:01:29 +1000 (AEST)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wG26J-0005hT-SJ; Thu, 23 Apr 2026 18:00:47 -0400",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1wG26I-0005hK-Jd\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 18:00:46 -0400",
            "from us-smtp-delivery-124.mimecast.com ([170.10.129.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1wG26H-0005nF-1U\n for qemu-devel@nongnu.org; Thu, 23 Apr 2026 18:00:46 -0400",
            "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-551-zAhnCmMJMB6K16VwHvVSdQ-1; Thu,\n 23 Apr 2026 18:00:42 -0400",
            "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 909F5180034A; Thu, 23 Apr 2026 22:00:40 +0000 (UTC)",
            "from jsnow-thinkpadp16vgen1.westford.csb (unknown [10.22.64.143])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 09D693007572; Thu, 23 Apr 2026 22:00:36 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776981644;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=p7woB8kvnE4pzWBJGicDe/ggpYt8nSqBJfMI9iJf0tY=;\n b=W0TnyKZxtg/5FTP1bq7cT3HFn7F53KZB/puvKmRELSQEdfGnZDsR/nTNTDUcFgZcL7Ooqh\n 60YaANwYtmf4xeEWdMPp6mYHZ/XiO2/fsYbnNjfg2IF7vWt6kdoHjDZa97b003/HMOd/JF\n XeQITv1UdSNHVGhXbkEhpe+iHFtQqf4=",
        "X-MC-Unique": "zAhnCmMJMB6K16VwHvVSdQ-1",
        "X-Mimecast-MFC-AGG-ID": "zAhnCmMJMB6K16VwHvVSdQ_1776981640",
        "From": "John Snow <jsnow@redhat.com>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "Igor Mammedov <imammedo@redhat.com>,\n Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,\n \"Michael S. Tsirkin\" <mst@redhat.com>, Michael Roth <michael.roth@amd.com>,\n Markus Armbruster <armbru@redhat.com>, Ani Sinha <anisinha@redhat.com>,\n Gerd Hoffmann <kraxel@redhat.com>, Eric Blake <eblake@redhat.com>,\n Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>, =?utf-8?q?Philippe_Ma?=\n\t=?utf-8?q?thieu-Daud=C3=A9?= <philmd@linaro.org>, =?utf-8?q?Marc-Andr=C3=A9?=\n\t=?utf-8?q?_Lureau?= <marcandre.lureau@redhat.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n Paolo Bonzini <pbonzini@redhat.com>,\n Peter Maydell <peter.maydell@linaro.org>, John Snow <jsnow@redhat.com>",
        "Subject": "[PATCH 04/12] qapi/docs: add \"Intro\" section",
        "Date": "Thu, 23 Apr 2026 18:00:13 -0400",
        "Message-ID": "<20260423220022.2180059-5-jsnow@redhat.com>",
        "In-Reply-To": "<20260423220022.2180059-1-jsnow@redhat.com>",
        "References": "<20260423220022.2180059-1-jsnow@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4",
        "Received-SPF": "pass client-ip=170.10.129.124; envelope-from=jsnow@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com",
        "X-Spam_score_int": "-20",
        "X-Spam_score": "-2.1",
        "X-Spam_bar": "--",
        "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "This patch adds an \"Intro\" doc section, intended to eventually replace\nthe \"Plain\" doc section alongside a forthcoming \"Details\" section.\n\nFor now, this section is not actually instantiated or used, but\nsubsequent patches will slowly convert the leading introductory sections\nof QAPIDoc documentation to use the new Intro section.\n\nA main motivation of this series of changes is to more explicitly\ndelineate the \"Introductory\" documentation for each QAPI definition for\nthe sake of the inliner. When inlining members, examples, and details\nfrom multiple QAPIDoc sections, we will want to omit the \"Introductory\"\ntext from inlined definitions while keeping notes, caution boxes,\nexamples, and so on.\n\nSigned-off-by: John Snow <jsnow@redhat.com>\n---\n docs/sphinx/qapidoc.py | 2 +-\n scripts/qapi/parser.py | 5 +++--\n 2 files changed, 4 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py\nindex c2f09bac16c..1f7c15b7075 100644\n--- a/docs/sphinx/qapidoc.py\n+++ b/docs/sphinx/qapidoc.py\n@@ -368,7 +368,7 @@ def visit_sections(self, ent: QAPISchemaDefinition) -> None:\n         for i, section in enumerate(sections):\n             section.text = self.reformat_arobase(section.text)\n \n-            if section.kind == QAPIDoc.Kind.PLAIN:\n+            if section.kind.name in (\"PLAIN\", \"INTRO\"):\n                 self.visit_paragraph(section)\n             elif section.kind == QAPIDoc.Kind.MEMBER:\n                 assert isinstance(section, QAPIDoc.ArgSection)\ndiff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py\nindex da4756a7424..97e7dacb0fd 100644\n--- a/scripts/qapi/parser.py\n+++ b/scripts/qapi/parser.py\n@@ -631,7 +631,7 @@ def get_doc(self) -> 'QAPIDoc':\n                     line = self.get_doc_indented(doc)\n                     no_more_args = True\n                 else:\n-                    # plain paragraph\n+                    # plain paragraph(s)\n                     doc.ensure_untagged_section(self.info)\n                     doc.append_line(line)\n                     line = self.get_doc_paragraph(doc)\n@@ -681,6 +681,7 @@ class Kind(enum.Enum):\n         ERRORS = 4\n         SINCE = 5\n         TODO = 6\n+        INTRO = 7\n \n         @staticmethod\n         def from_string(kind: str) -> 'QAPIDoc.Kind':\n@@ -748,7 +749,7 @@ def has_features(self) -> bool:\n     def end(self) -> None:\n         for section in self.all_sections:\n             section.text = section.text.strip('\\n')\n-            if section.kind != QAPIDoc.Kind.PLAIN and section.text == '':\n+            if not (section.kind.name in (\"INTRO\", \"PLAIN\") or section.text):\n                 raise QAPISemError(\n                     section.info, \"text required after '%s:'\" % section.kind)\n \n",
    "prefixes": [
        "04/12"
    ]
}