{"id":1187,"date":"2026-04-19T10:00:00","date_gmt":"2026-04-19T09:00:00","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=1187"},"modified":"2026-04-13T15:08:11","modified_gmt":"2026-04-13T15:08:11","slug":"what-good-error-messages-actually-do","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/","title":{"rendered":"What Good Error Messages Actually Do"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2026\/04\/01-caution-sign-on-ski-slope.jpg\" alt=\"Red caution sign on a rope barrier\" style=\"float:right;width:280px;max-width:40%;height:auto;margin:0 0 1rem 1rem\" loading=\"lazy\" \/><\/p>\n<p>Bad error messages waste time because they hide the thing you actually need to know.<\/p>\n<p><code>Something went wrong<\/code> is not useful. Neither is a stack trace dumped on top of a user who cannot act on it. A good error message does three things. It says what happened. It says what to do next. And if the system needs something from the user, it says that plainly.<\/p>\n<p>That sounds simple, but a lot of software gets this wrong. Teams often write errors for themselves, not for the person reading them. So the message is technically true, but practically useless. It might be fine in logs. It is not fine on a screen.<\/p>\n<h2>Say what happened<\/h2>\n<p>The first job of an error message is to describe the failure in plain language.<\/p>\n<p>If a form field is invalid, say which field is wrong and why. If a payment failed, say whether it was declined, timed out, or could not be processed. If a request did not reach the server, say that instead of pretending the app knows more than it does.<\/p>\n<p>I think this is where a lot of systems get lazy. They use generic wording because it is easier to write once and reuse everywhere. That is convenient for the code, but it pushes work onto the user. The user then has to guess whether the problem is their input, the network, the backend, or something else entirely.<\/p>\n<h2>Say what to do next<\/h2>\n<p>The next job is to give the next step when there is one.<\/p>\n<p>Sometimes that step is obvious. Try again. Check the value. Sign in again. Wait a minute and retry. Refresh the page. Contact support. Those are all better than nothing when they are accurate.<\/p>\n<p>The important bit is that the message should not just describe the failure and stop there. If there is a recovery path, say it. If there is not, say that too. A clean <code>We could not save this right now<\/code> is better than a fake promise that the user can fix something they do not control.<\/p>\n<h2>Say what the system needs<\/h2>\n<p>Good errors also tell the user what input or condition is missing.<\/p>\n<p>That might be a required field, a file that is too large, a session that expired, or a permission that was not granted. The message should make the requirement visible instead of burying it in policy language.<\/p>\n<p>This matters because a lot of error handling is really contract handling. The system needed a date in a certain format, or an authenticated session, or a valid identifier, or a supported file type. If you do not say that clearly, the user gets stuck repeating trial and error.<\/p>\n<h2>Keep it honest<\/h2>\n<p>One rule I like is that an error message should never pretend to know more than it does.<\/p>\n<p>If the system timed out, say it timed out. If a remote service failed, say that the request could not be completed right now. If you do not know whether data was saved, do not imply success. That kind of honesty matters because it changes how people recover from the failure.<\/p>\n<p>It is better to be specific and slightly boring than confident and wrong.<\/p>\n<h2>Good errors reduce support<\/h2>\n<p>This is the part that gets ignored when teams treat error text as decoration.<\/p>\n<p>Better errors mean fewer support tickets, fewer repeated questions, less time spent digging through logs, and fewer people staring at a screen trying to decode the same failure. They also make the software feel more finished. Not because the app never fails, but because it fails in a way that makes sense.<\/p>\n<p>That is usually the standard I care about. Not polished wording. Not clever wording. Just errors that help the next person move forward instead of making them guess.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Good error messages do more than complain. They tell you what happened, what to try next, and what the system needs from you so failure is easier to recover from.<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13,18],"tags":[54,70,65,108],"class_list":["post-1187","post","type-post","status-publish","format-standard","hentry","category-programming","category-support","tag-debugging","tag-errors","tag-reliability","tag-user-experience"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What Good Error Messages Actually Do - wade.one<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What Good Error Messages Actually Do - wade.one\" \/>\n<meta property=\"og:description\" content=\"Good error messages do more than complain. They tell you what happened, what to try next, and what the system needs from you so failure is easier to recover from.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-19T09:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2026\/04\/01-caution-sign-on-ski-slope.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:site\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"What Good Error Messages Actually Do\",\"datePublished\":\"2026-04-19T09:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/\"},\"wordCount\":626,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"image\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/01-caution-sign-on-ski-slope.jpg\",\"keywords\":[\"debugging\",\"errors\",\"reliability\",\"user-experience\"],\"articleSection\":[\"Programming\",\"Support\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/\",\"name\":\"What Good Error Messages Actually Do - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/01-caution-sign-on-ski-slope.jpg\",\"datePublished\":\"2026-04-19T09:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/01-caution-sign-on-ski-slope.jpg\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/01-caution-sign-on-ski-slope.jpg\",\"width\":1024,\"height\":680,\"caption\":\"Red caution sign on a rope barrier\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/19\\\/what-good-error-messages-actually-do\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What Good Error Messages Actually Do\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/\",\"name\":\"wade.one\",\"description\":\"wade womersley - york based software engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wade.one\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\",\"name\":\"Wade Womersley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"width\":202,\"height\":200,\"caption\":\"Wade Womersley\"},\"logo\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What Good Error Messages Actually Do - wade.one","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/","og_locale":"en_GB","og_type":"article","og_title":"What Good Error Messages Actually Do - wade.one","og_description":"Good error messages do more than complain. They tell you what happened, what to try next, and what the system needs from you so failure is easier to recover from.","og_url":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/","og_site_name":"wade.one","article_published_time":"2026-04-19T09:00:00+00:00","og_image":[{"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2026\/04\/01-caution-sign-on-ski-slope.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/"},"author":{"name":"","@id":""},"headline":"What Good Error Messages Actually Do","datePublished":"2026-04-19T09:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/"},"wordCount":626,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"image":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/#primaryimage"},"thumbnailUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2026\/04\/01-caution-sign-on-ski-slope.jpg","keywords":["debugging","errors","reliability","user-experience"],"articleSection":["Programming","Support"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/","url":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/","name":"What Good Error Messages Actually Do - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/#primaryimage"},"image":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/#primaryimage"},"thumbnailUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2026\/04\/01-caution-sign-on-ski-slope.jpg","datePublished":"2026-04-19T09:00:00+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/#primaryimage","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2026\/04\/01-caution-sign-on-ski-slope.jpg","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2026\/04\/01-caution-sign-on-ski-slope.jpg","width":1024,"height":680,"caption":"Red caution sign on a rope barrier"},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2026\/04\/19\/what-good-error-messages-actually-do\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"What Good Error Messages Actually Do"}]},{"@type":"WebSite","@id":"https:\/\/wade.one\/blog\/#website","url":"https:\/\/wade.one\/blog\/","name":"wade.one","description":"wade womersley - york based software engineer","publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wade.one\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3","name":"Wade Womersley","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","width":202,"height":200,"caption":"Wade Womersley"},"logo":{"@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1172,"url":"https:\/\/wade.one\/blog\/2026\/04\/05\/what-makes-an-api-feel-nice-to-work-with\/","url_meta":{"origin":1187,"position":0},"title":"What Makes an API Feel Nice to Work With","author":"","date":"April 5, 2026","format":false,"excerpt":"A good API is not just functional. It is predictable, consistent, and easy to use without a lot of guesswork.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1169,"url":"https:\/\/wade.one\/blog\/2026\/04\/02\/the-problem-with-simple-aws-architectures\/","url_meta":{"origin":1187,"position":1},"title":"The Problem With &#8220;Simple&#8221; AWS Architectures","author":"","date":"April 2, 2026","format":false,"excerpt":"AWS diagrams love to look simple. The problem is that the operational reality behind them is usually doing a lot more work than the picture admits.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":273,"url":"https:\/\/wade.one\/blog\/2009\/11\/05\/link-checker-update-download-meta-data-errors-redirects-as-csv\/","url_meta":{"origin":1187,"position":2},"title":"Link Checker Update &#8211; Download Meta Data, Errors, Redirects as CSV","author":"Wade","date":"November 5, 2009","format":false,"excerpt":"I've updated my Link Checker (site crawler) located at https:\/\/wade.one\/tools\/linkchecker to allow downloading of the data it finds as CSV files. So all redirect URL's, 404's and meta data for all pages can be downloaded. The links are at the bottom of the page after the initial output of data.\u2026","rel":"","context":"In &quot;News&quot;","block_context":{"text":"News","link":"https:\/\/wade.one\/blog\/category\/news\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1109,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/php-8-2-vs-7-4\/","url_meta":{"origin":1187,"position":3},"title":"PHP 8.2 vs 7.4","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"PHP is a widely used programming language that has been evolving rapidly in recent years. PHP 8.2 is the latest release, which came out on November 25th, 2021. This version brings several improvements, new features, and bug fixes, making it more efficient and secure than PHP 7.4. In this blog\u2026","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1182,"url":"https:\/\/wade.one\/blog\/2026\/04\/14\/why-kotlin-coroutines-are-worth-the-learning-curve\/","url_meta":{"origin":1187,"position":4},"title":"Why Kotlin Coroutines Are Worth the Learning Curve","author":"Wade","date":"April 14, 2026","format":false,"excerpt":"Kotlin coroutines are worth learning because they make async code easier to read and easier to reason about. They still need discipline, but they usually beat callback-shaped code by a long way.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":521,"url":"https:\/\/wade.one\/blog\/2011\/03\/04\/using-ssl-in-restclient\/","url_meta":{"origin":1187,"position":5},"title":"Using SSL in RestClient","author":"Wade","date":"March 4, 2011","format":false,"excerpt":"UPDATE 14\/07\/2012: The author of the client has released version 2.5 a short while ago and also a video for using self-signed certificates in the client. RESTClient is a great little CLI and GUI tool for testing your REST API. I recently pushed a new API up in the office\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1187","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/comments?post=1187"}],"version-history":[{"count":3,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1187\/revisions"}],"predecessor-version":[{"id":1225,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1187\/revisions\/1225"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=1187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=1187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=1187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}