{"id":1184,"date":"2026-04-16T10:00:00","date_gmt":"2026-04-16T09:00:00","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=1184"},"modified":"2026-04-16T10:00:00","modified_gmt":"2026-04-16T09:00:00","slug":"how-i-decide-when-an-api-needs-versioning","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/","title":{"rendered":"How I Decide When an API Needs Versioning"},"content":{"rendered":"<p>I do not think every API change needs a new version.<\/p>\n<p>In a lot of teams, versioning gets treated like a reflex. Something changes, somebody gets nervous, and the answer becomes <code>v2<\/code>. That can work, but it is also an easy way to avoid thinking about what actually changed, who depends on it, and whether the old contract still needs to hold.<\/p>\n<p>For me, the question is simple: has the contract really changed, or are we just trying to make a breaking change feel cleaner?<\/p>\n<h2>Contract drift is the real signal<\/h2>\n<p>I start by looking at the shape of the contract itself.<\/p>\n<p>If the API still means roughly the same thing, serves the same kind of client, and only needs additive changes, I usually do not reach for versioning. Add fields. Add endpoints. Add optional behavior. Keep the old shape working if you can.<\/p>\n<p>Versioning starts to make sense when the contract has drifted far enough that keeping both meanings in one place would be confusing or dangerous.<\/p>\n<p>That usually looks like:<\/p>\n<ul>\n<li>a field that used to mean one thing now needs a different meaning<\/li>\n<li>a response shape that no longer fits the old clients at all<\/li>\n<li>a workflow that has changed from one domain model to another<\/li>\n<li>a decision that would force old clients to guess wrong unless they change<\/li>\n<\/ul>\n<p>At that point, the problem is not just implementation. It is compatibility.<\/p>\n<h2>Client expectations matter more than elegance<\/h2>\n<p>An API is not just a set of routes or methods. It is a promise to clients.<\/p>\n<p>That promise might be weak or strong, but it exists either way. If external clients, mobile apps, scripts, or other services depend on a certain shape, then changing that shape has a cost. The more people depend on it, the more important the compatibility story becomes.<\/p>\n<p>That is why I think versioning is partly a communication tool.<\/p>\n<p>If I say <code>v2<\/code>, I am not just changing the URL or the namespace. I am telling clients that the old assumptions are no longer safe. That can be useful when the change is large enough that trying to preserve both behaviors in one contract would make the API muddy.<\/p>\n<p>The mistake is using versioning to avoid making the compatibility boundary clear. A version should make the boundary easier to understand, not hide it.<\/p>\n<h2>Versioning is useful when the old behavior would be misleading<\/h2>\n<p>Sometimes the old contract is not just awkward. It is actively wrong for the new world.<\/p>\n<p>Maybe the domain model changed. Maybe the workflow changed. Maybe the original response was built around an internal shape that no longer matches how the product works. If preserving the old interface would force the new API to keep carrying misleading names, weird nulls, or strange backwards rules, versioning can be the cleaner move.<\/p>\n<p>I like versioning most when it lets me do one clear thing:<\/p>\n<ul>\n<li>keep the old behavior stable for existing clients<\/li>\n<li>design the new behavior without awkward compromises<\/li>\n<\/ul>\n<p>That is better than pretending one contract can absorb everything forever.<\/p>\n<h2>Versioning is not a substitute for discipline<\/h2>\n<p>I do not like versioning as an excuse to ship sloppy changes.<\/p>\n<p>If a team versions too early or too often, it usually means one of two things:<\/p>\n<ul>\n<li>they do not know how to evolve the API safely<\/li>\n<li>they do not want to do the work to keep the contract stable<\/li>\n<\/ul>\n<p>Neither is ideal.<\/p>\n<p>Good API discipline still matters. Additive change is usually better than breaking change. Clear deprecation paths matter. Changelogs matter. Good test coverage around the contract matters. If you can make a change without forcing clients to move, that is usually the better outcome.<\/p>\n<p>Versioning should not be the first thing you reach for just because it feels tidy.<\/p>\n<h2>I think about the migration cost<\/h2>\n<p>The real question is not whether a new version is possible. It is whether the migration is worth it.<\/p>\n<p>If the change is small, versioning often creates more work than it saves. Now you have two contracts to support, two sets of examples, two mental models, and probably some awkward code shared between them.<\/p>\n<p>If the change is large enough that trying to preserve backwards compatibility would make the API hard to use or hard to explain, then versioning earns its keep.<\/p>\n<p>That is the balance I try to hold:<\/p>\n<ul>\n<li>avoid a new version for minor evolution<\/li>\n<li>use a new version when the contract has genuinely moved<\/li>\n<li>do not let versioning become a way to postpone design decisions<\/li>\n<\/ul>\n<h2>What I usually want first<\/h2>\n<p>Before I version anything, I try a few other things first:<\/p>\n<ul>\n<li>add new fields instead of changing old ones<\/li>\n<li>add a new endpoint or operation instead of mutating an existing one<\/li>\n<li>keep old inputs accepted for a while if the change is mostly structural<\/li>\n<li>document the deprecation path clearly<\/li>\n<li>make sure I know which clients actually depend on the old behavior<\/li>\n<\/ul>\n<p>That does not mean I avoid versioning forever. It just means I treat it as a real compatibility decision, not a default response to discomfort.<\/p>\n<h2>The practical answer<\/h2>\n<p>If the API still behaves like the same contract with a few added pieces, I usually do not version it.<\/p>\n<p>If the contract has drifted enough that old clients would be misled, or the new shape would be ugly if I tried to preserve the old one, I version it and make the boundary explicit.<\/p>\n<p>That is the line for me. Versioning is useful when it clarifies a real break. It is not useful when it just makes a messy change look more organized.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>API versioning is useful when the contract has really changed, not when a team wants a convenient place to hide messy changes. I usually want the compatibility story to be explicit before I reach for a new version.<\/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,25],"tags":[66,102,101,100,99],"class_list":["post-1184","post","type-post","status-publish","format-standard","hentry","category-programming","category-software-engineer","tag-api","tag-backends","tag-compatibility","tag-contracts","tag-versioning"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How I Decide When an API Needs Versioning - 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\/16\/how-i-decide-when-an-api-needs-versioning\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How I Decide When an API Needs Versioning - wade.one\" \/>\n<meta property=\"og:description\" content=\"API versioning is useful when the contract has really changed, not when a team wants a convenient place to hide messy changes. I usually want the compatibility story to be explicit before I reach for a new version.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-16T09:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1518\" \/>\n\t<meta property=\"og:image:height\" content=\"1506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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=\"5 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\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"How I Decide When an API Needs Versioning\",\"datePublished\":\"2026-04-16T09:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/\"},\"wordCount\":932,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"keywords\":[\"api\",\"backends\",\"compatibility\",\"contracts\",\"versioning\"],\"articleSection\":[\"Programming\",\"Software Engineer\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/\",\"name\":\"How I Decide When an API Needs Versioning - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"datePublished\":\"2026-04-16T09:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/04\\\/16\\\/how-i-decide-when-an-api-needs-versioning\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How I Decide When an API Needs Versioning\"}]},{\"@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":"How I Decide When an API Needs Versioning - 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\/16\/how-i-decide-when-an-api-needs-versioning\/","og_locale":"en_GB","og_type":"article","og_title":"How I Decide When an API Needs Versioning - wade.one","og_description":"API versioning is useful when the contract has really changed, not when a team wants a convenient place to hide messy changes. I usually want the compatibility story to be explicit before I reach for a new version.","og_url":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/","og_site_name":"wade.one","article_published_time":"2026-04-16T09:00:00+00:00","og_image":[{"width":1518,"height":1506,"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/"},"author":{"name":"","@id":""},"headline":"How I Decide When an API Needs Versioning","datePublished":"2026-04-16T09:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/"},"wordCount":932,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"keywords":["api","backends","compatibility","contracts","versioning"],"articleSection":["Programming","Software Engineer"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/","url":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/","name":"How I Decide When an API Needs Versioning - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"datePublished":"2026-04-16T09:00:00+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2026\/04\/16\/how-i-decide-when-an-api-needs-versioning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"How I Decide When an API Needs Versioning"}]},{"@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":1184,"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":521,"url":"https:\/\/wade.one\/blog\/2011\/03\/04\/using-ssl-in-restclient\/","url_meta":{"origin":1184,"position":1},"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":[]},{"id":1181,"url":"https:\/\/wade.one\/blog\/2026\/04\/13\/what-i-check-before-i-trust-a-mobile-release\/","url_meta":{"origin":1184,"position":2},"title":"What I Check Before I Trust a Mobile Release","author":"Wade","date":"April 13, 2026","format":false,"excerpt":"A mobile release can look fine in the app store and still be a bad idea. I usually trust it only after I have checked crash risk, permissions, API compatibility, startup behavior, rollout safety, and what happens after the update lands.","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":1168,"url":"https:\/\/wade.one\/blog\/2026\/04\/01\/why-i-still-like-serverless-for-small-teams\/","url_meta":{"origin":1184,"position":3},"title":"Why I Still Like Serverless for Small Teams","author":"","date":"April 1, 2026","format":false,"excerpt":"Serverless has real tradeoffs, but for small teams I still think it usually wins. The operational overhead stays low, the first version ships faster, and the mistakes are easier to afford early on.","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":556,"url":"https:\/\/wade.one\/blog\/2011\/04\/25\/automating-implemented-methods-for-a-web-based-api\/","url_meta":{"origin":1184,"position":4},"title":"Automating &#8220;Implemented methods&#8221; for a web based API","author":"Wade","date":"April 25, 2011","format":false,"excerpt":"In my leedsphp talk last week I mentioned making a developer (and consumers) life easier by automatically implementing the allow methods functionality that your API may expose (e.g. you call PUT on a URL that only allows GET or POST). I did have an example slide there showing how to\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":[]},{"id":764,"url":"https:\/\/wade.one\/blog\/2015\/02\/07\/standardising-logging-and-parallelisation-in-multiple-languages\/","url_meta":{"origin":1184,"position":5},"title":"Standardising logging and parallelisation in multiple languages","author":"Wade","date":"February 7, 2015","format":false,"excerpt":"Over the last few days I've been working on interfaces to use across multiple programming languages to standardise how some things are done. This stemmed from a requirement to allow processing to be dealt with in any language from any other language. People do this all the time, it's nothing\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/source-code-583537_640.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1184","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=1184"}],"version-history":[{"count":1,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions"}],"predecessor-version":[{"id":1230,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1184\/revisions\/1230"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=1184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=1184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=1184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}