{"id":279,"date":"2026-03-11T00:00:00","date_gmt":"2026-03-11T00:00:00","guid":{"rendered":"https:\/\/wordpress.securinsight.ca\/index.php\/2026\/03\/11\/cloudflare-fundamentals-json-responses-and-rfc-9457-support-for-cloudflare-1xxx-errors\/"},"modified":"2026-03-11T00:00:00","modified_gmt":"2026-03-11T00:00:00","slug":"cloudflare-fundamentals-json-responses-and-rfc-9457-support-for-cloudflare-1xxx-errors","status":"publish","type":"post","link":"https:\/\/wordpress.securinsight.ca\/index.php\/2026\/03\/11\/cloudflare-fundamentals-json-responses-and-rfc-9457-support-for-cloudflare-1xxx-errors\/","title":{"rendered":"Cloudflare Fundamentals &#8211; JSON responses and RFC 9457 support for Cloudflare 1xxx errors"},"content":{"rendered":"<p>Cloudflare-generated 1xxx errors now return structured JSON when clients send <code>Accept: application\/json<\/code> or <code>Accept: application\/problem+json<\/code>. JSON responses follow <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9457\" target=\"_blank\">RFC 9457 (Problem Details for HTTP APIs)<\/a>, so any HTTP client that understands Problem Details can parse the base members without Cloudflare-specific code.<\/p>\n<h4>Breaking change<\/h4>\n<p>The Markdown frontmatter field <code>http_status<\/code> has been renamed to <code>status<\/code>. Agents consuming Markdown frontmatter should update parsers accordingly.<\/p>\n<h4>Changes<\/h4>\n<p><strong>JSON format.<\/strong> Clients sending <code>Accept: application\/json<\/code> or <code>Accept: application\/problem+json<\/code> now receive a structured JSON object with the same operational fields as Markdown frontmatter, plus RFC 9457 standard members.<\/p>\n<p><strong>RFC 9457 standard members (JSON only):<\/strong><\/p>\n<ul>\n<li><code>type<\/code> \u2014 URI pointing to Cloudflare documentation for the specific error code<\/li>\n<li><code>status<\/code> \u2014 HTTP status code (matching the response status)<\/li>\n<li><code>title<\/code> \u2014 short, human-readable summary<\/li>\n<li><code>detail<\/code> \u2014 human-readable explanation specific to this occurrence<\/li>\n<li><code>instance<\/code> \u2014 Ray ID identifying this specific error occurrence<\/li>\n<\/ul>\n<p><strong>Field renames:<\/strong><\/p>\n<ul>\n<li><code>http_status<\/code> -&gt; <code>status<\/code> (JSON and Markdown)<\/li>\n<li><code>what_happened<\/code> -&gt; <code>detail<\/code> (JSON only \u2014 Markdown prose sections are unchanged)<\/li>\n<\/ul>\n<p><strong>Content-Type mirroring.<\/strong> Clients sending <code>Accept: application\/problem+json<\/code> receive <code>Content-Type: application\/problem+json; charset=utf-8<\/code> back; <code>Accept: application\/json<\/code> receives <code>application\/json; charset=utf-8<\/code>. Same body in both cases.<\/p>\n<h4>Negotiation behavior<\/h4>\n<table>\n<thead>\n<tr>\n<th>Request header sent<\/th>\n<th>Response format<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Accept: application\/json<\/code><\/td>\n<td>JSON (<code>application\/json<\/code> content type)<\/td>\n<\/tr>\n<tr>\n<td><code>Accept: application\/problem+json<\/code><\/td>\n<td>JSON (<code>application\/problem+json<\/code> content type)<\/td>\n<\/tr>\n<tr>\n<td><code>Accept: application\/json, text\/markdown;q=0.9<\/code><\/td>\n<td>JSON<\/td>\n<\/tr>\n<tr>\n<td><code>Accept: text\/markdown<\/code><\/td>\n<td>Markdown<\/td>\n<\/tr>\n<tr>\n<td><code>Accept: text\/markdown, application\/json<\/code><\/td>\n<td>Markdown (equal <code>q<\/code>, first-listed wins)<\/td>\n<\/tr>\n<tr>\n<td><code>Accept: *\/*<\/code><\/td>\n<td>HTML (default)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Availability<\/h4>\n<p>Available now for Cloudflare-generated 1xxx errors.<\/p>\n<h4>Get started<\/h4>\n<div>\n<figure>\n<pre data-language=\"bash\"><code class=\"language-bash\"><div><div><span>curl<\/span><span> <\/span><span>-s<\/span><span> <\/span><span>--compressed<\/span><span> <\/span><span>-H<\/span><span> <\/span><span>\"Accept: application\/json\"<\/span><span> <\/span><span>-A<\/span><span> <\/span><span>\"TestAgent\/1.0\"<\/span><span> <\/span><span>-H<\/span><span> <\/span><span>\"Accept-Encoding: gzip, deflate\"<\/span><span> <\/span><span>\"&lt;YOUR_DOMAIN&gt;\/cdn-cgi\/error\/1015\"<\/span><span> <\/span><span>|<\/span><span> <\/span><span>jq<\/span><span> <\/span><span>.<\/span><\/div><\/div><\/code><\/pre>\n<div>\n<div><\/div>\n<\/div>\n<\/figure>\n<\/div>\n<div>\n<figure>\n<pre data-language=\"bash\"><code class=\"language-bash\"><div><div><span>curl<\/span><span> <\/span><span>-s<\/span><span> <\/span><span>--compressed<\/span><span> <\/span><span>-H<\/span><span> <\/span><span>\"Accept: application\/problem+json\"<\/span><span> <\/span><span>-A<\/span><span> <\/span><span>\"TestAgent\/1.0\"<\/span><span> <\/span><span>-H<\/span><span> <\/span><span>\"Accept-Encoding: gzip, deflate\"<\/span><span> <\/span><span>\"&lt;YOUR_DOMAIN&gt;\/cdn-cgi\/error\/1015\"<\/span><span> <\/span><span>|<\/span><span> <\/span><span>jq<\/span><span> <\/span><span>.<\/span><\/div><\/div><\/code><\/pre>\n<div>\n<div><\/div>\n<\/div>\n<\/figure>\n<\/div>\n<p>References:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9457\" target=\"_blank\">RFC 9457 \u2014 Problem Details for HTTP APIs<\/a><\/li>\n<li><a href=\"https:\/\/developers.cloudflare.com\/support\/troubleshooting\/http-status-codes\/cloudflare-1xxx-errors\/\">Cloudflare 1xxx error documentation<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Cloudflare-generated 1xxx errors now return structured JSON when clients send Accept: application\/json or Accept: application\/problem+json. JSON responses follow RFC 9457 (Problem Details for HTTP APIs), so any HTTP client that understands Problem Details can parse the base members without Cloudflare-specific code. Breaking change The Markdown frontmatter field http_status has been renamed to status. Agents consuming [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-279","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts\/279","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/comments?post=279"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts\/279\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/media?parent=279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/categories?post=279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/tags?post=279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}