{"id":971,"date":"2026-05-25T15:38:15","date_gmt":"2026-05-25T07:38:15","guid":{"rendered":"https:\/\/connectword.dpdns.org\/?p=971"},"modified":"2026-05-25T15:38:15","modified_gmt":"2026-05-25T07:38:15","slug":"workos-releases-auth-md-an-open-agent-registration-protocol-built-on-oauth-standards","status":"publish","type":"post","link":"https:\/\/connectword.dpdns.org\/?p=971","title":{"rendered":"WorkOS Releases auth.md: An Open Agent Registration Protocol Built on OAuth Standards"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><em>For years<\/em>, authentication on the web followed one design assumption: a human sits behind a browser. Click a button. Fill out a form. Verify an email. Copy an API key and paste it somewhere else.<\/p>\n<p class=\"wp-block-paragraph\">That model does not work when the user is delegating work to an agent. Agents are already writing code, opening pull requests, triaging tickets, querying systems, and updating records. But most products still have no real way for an agent to register. The workaround \u2014 giving an agent a raw API key or session token \u2014 produces credentials that are unscoped, hard to audit per session, and impossible to revoke selectively. <strong>WorkOS is proposing a structured alternative: <a href=\"https:\/\/workos.com\/auth-md\">auth.md<\/a>, an open protocol for agent registration.<\/strong><\/p>\n<h2 class=\"wp-block-heading\"><strong>What is auth.md?<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">auth.md is a small Markdown file an application publishes at a well-known location \u2014 typically <code>https:\/\/service.com\/auth.md<\/code>. The file tells agents how to register with that service: which flows are supported, which scopes exist, and how credentials are issued, audited, and revoked.<\/p>\n<p class=\"wp-block-paragraph\">Because it is plain-text Markdown, the same file works as documentation for human developers and as a runtime artifact agents can read programmatically. An agent fetches the file, reads the structured sections, picks the right flow, and registers \u2014 without a human filling out a form.<\/p>\n<p class=\"wp-block-paragraph\">Discovery works in two hops. The machine-readable source of truth lives at <code>\/.well-known\/oauth-protected-resource<\/code> (Protected Resource Metadata, or PRM). It promotes the resource and points at the Authorization Server. The Authorization Server metadata at <code>\/.well-known\/oauth-authorization-server<\/code> carries the <code>agent_auth<\/code> block \u2014 the structured object that tells agents which flows are supported, and what the <code>register_uri<\/code>, <code>claim_uri<\/code>, <code>revocation_uri<\/code>, and <code>identity_types_supported<\/code> values are. The <code>auth.md<\/code> file is the prose companion that points agents toward this discovery path.<\/p>\n<p class=\"wp-block-paragraph\">On any 401 from the API, the service should return a <code>WWW-Authenticate: Bearer resource_metadata=\"...\"<\/code> header so agents can bootstrap discovery without reading documentation first.<\/p>\n<h2 class=\"wp-block-heading\"><strong>The Two Registration Flows<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">auth.md defines two primary flows. An application can support either or both.<\/p>\n<p class=\"wp-block-paragraph\"><strong>Agent verified flow<\/strong>: The agent\u2019s identity provider \u2014 OpenAI, Anthropic, Cursor, or any trusted platform \u2014 attests to the user\u2019s identity at registration time. The agent requests an audience-specific <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/draft-ietf-oauth-identity-assertion-authz-grant\">ID-JAG<\/a> from its provider, then POSTs it to the app\u2019s <code>\/agent\/auth<\/code> endpoint. The app decodes the ID-JAG header to get <code>kid<\/code> and <code>alg<\/code>, looks up the issuer in its trusted providers list, fetches the provider\u2019s JWKS, verifies the signature, validates claims (<code>aud<\/code>, <code>exp<\/code>, <code>iat<\/code>, <code>jti<\/code>, <code>client_id<\/code>), and returns credentials synchronously. No OTP, no email round-trip, no human interaction required.<\/p>\n<p class=\"wp-block-paragraph\">The result is a delegation record per <code>(iss, sub, aud)<\/code> that the provider can revoke at any time by POSTing a logout token to the service\u2019s <code>revocation_uri<\/code>. Apps that already JIT-provision users from OIDC or SAML will recognize this pattern \u2014 it is the same shape with a different issuer. One important constraint: access tokens issued from ID-JAG verification must not include a refresh token. The agent must present a fresh ID-JAG to extend access.<\/p>\n<p class=\"wp-block-paragraph\"><strong>User claimed flow<\/strong>: This is an OTP-based path that requires no agent provider participation. The agent registers with the app, and the user binds the registration by reading a one-time code from an email back to the agent. The two claim endpoints are <code>\/agent\/auth\/claim<\/code> (to trigger the OTP email) and <code>\/agent\/auth\/claim\/complete<\/code> (to submit the code).<\/p>\n<p class=\"wp-block-paragraph\">This flow has two starting shapes. In the <strong>anonymous start<\/strong> variant, the agent self-registers without identity and receives a credential immediately, scoped to pre-claim permissions the app defines. At any point before the registration expires, the agent runs the OTP ceremony to bind the credential to a real user and upgrade scopes. The API key is not rotated on claim \u2014 scopes upgrade in place.<\/p>\n<p class=\"wp-block-paragraph\">In the <strong>email required<\/strong> variant, the agent supplies a user email at registration. The credential is withheld entirely until the OTP ceremony completes. Use this when any pre-claim usage is unacceptable.<\/p>\n<h2 class=\"wp-block-heading\"><strong>User Matching and Audit<\/strong><\/h2>\n<p class=\"wp-block-paragraph\">When credentials are issued, the service needs to match the registration to an existing user or provision a new one. The recommended resolution order is: match on a prior delegation record for the same <code>(iss, sub)<\/code> pair first; then match on a verified email; then JIT-provision a new user per the app\u2019s policy \u2014 or reject if the product requires manual onboarding.<\/p>\n<p class=\"wp-block-paragraph\">For observability and incident response, the docs recommend recording a standard set of audit events: <code>registration.created<\/code>, <code>claim.requested<\/code>, <code>otp.generated<\/code>, <code>claim.confirmed<\/code>, <code>registration.expired<\/code>, and <code>registration.revoked<\/code>. For ID-JAG flows, include <code>iss<\/code>, <code>sub<\/code>, and <code>agent_platform<\/code> so operators can correlate with provider-side logs.<\/p>\n<h2 class=\"wp-block-heading\"><strong>Marktechpost\u2019s Visual Explainer<\/strong><\/h2>\n<div>\n<div class=\"ag-header\">\n<div class=\"ag-header-title\">auth.md \u2014 Implementation Guide<\/div>\n<div class=\"ag-header-badge\">Open Protocol<\/div>\n<\/div>\n<div class=\"ag-slides\">\n<div class=\"ag-track\">\n<p>    <!-- SLIDE 1 --><\/p>\n<div class=\"ag-slide\">\n<div class=\"ag-step-num\"><span>01<\/span> \/ 07 \u00a0\u00a0Overview<\/div>\n<div class=\"ag-slide-title\">What Is auth.md?<\/div>\n<p>      <span class=\"ag-rule\"><\/span><\/p>\n<div class=\"ag-body\">auth.md is a small Markdown file your app publishes at its domain. It tells AI agents how to register on behalf of a user: which flows are supported, which scopes exist, and how credentials are issued, audited, and revoked.<\/div>\n<div class=\"ag-body\">Because it is plain-text Markdown, the same file works as documentation for human developers and as a runtime artifact agents can read programmatically.<\/div>\n<div class=\"ag-chips\">\n<div class=\"ag-chip hl\">Open Protocol<\/div>\n<div class=\"ag-chip hl\">No WorkOS Account Required<\/div>\n<div class=\"ag-chip\">OAuth-Based<\/div>\n<\/div>\n<div class=\"ag-code\">https:\/\/workos.com\/auth-md<\/div>\n<\/div>\n<p>    <!-- SLIDE 2 --><\/p>\n<div class=\"ag-slide\">\n<div class=\"ag-step-num\"><span>02<\/span> \/ 07 \u00a0\u00a0Discovery<\/div>\n<div class=\"ag-slide-title\">How Agents Find Your Endpoints<\/div>\n<p>      <span class=\"ag-rule\"><\/span><\/p>\n<div class=\"ag-body\">Discovery works in two hops. Your API returns a header on every 401 that points to the Protected Resource Metadata. The PRM points to the Authorization Server, which carries the <strong>agent_auth<\/strong> block with all endpoint URLs.<\/div>\n<div class=\"ag-flow\">\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">1<\/div>\n<div class=\"ag-flow-text\">Agent hits your API, receives <strong>401 Unauthorized<\/strong> with a <strong>WWW-Authenticate<\/strong> header pointing to PRM<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">2<\/div>\n<div class=\"ag-flow-text\">Agent fetches <strong>\/.well-known\/oauth-protected-resource<\/strong> to get the Authorization Server URL<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">3<\/div>\n<div class=\"ag-flow-text\">Agent fetches <strong>\/.well-known\/oauth-authorization-server<\/strong> and reads the <strong>agent_auth<\/strong> block: register_uri, claim_uri, revocation_uri, identity_types_supported<\/div>\n<\/div>\n<\/div>\n<div class=\"ag-code\">WWW-Authenticate: Bearer resource_metadata=\u201dhttps:\/\/api.service.com\/.well-known\/oauth-protected-resource\u201d<\/div>\n<\/div>\n<p>    <!-- SLIDE 3 --><\/p>\n<div class=\"ag-slide\">\n<div class=\"ag-step-num\"><span>03<\/span> \/ 07 \u00a0\u00a0Flow 1<\/div>\n<div class=\"ag-slide-title\">Agent Verified Flow<\/div>\n<p>      <span class=\"ag-rule\"><\/span><\/p>\n<div class=\"ag-body\">The agent\u2019s identity provider (OpenAI, Anthropic, Cursor, etc.) attests to the user\u2019s identity using an <strong>ID-JAG<\/strong>. No human interaction required. Credentials are returned synchronously.<\/div>\n<div class=\"ag-flow\">\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">1<\/div>\n<div class=\"ag-flow-text\">Agent asks user for <strong>consent<\/strong> to assert identity to your service<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">2<\/div>\n<div class=\"ag-flow-text\">Agent requests an audience-specific <strong>ID-JAG<\/strong> from its provider<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">3<\/div>\n<div class=\"ag-flow-text\">Agent POSTs the ID-JAG to your <strong>\/agent\/auth<\/strong> endpoint<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">4<\/div>\n<div class=\"ag-flow-text\">Your service verifies the signature against the provider\u2019s <strong>JWKS<\/strong>, validates claims (aud, exp, iat, jti), matches the user, and returns credentials<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">5<\/div>\n<div class=\"ag-flow-text\">Revocation: provider POSTs a <strong>logout token<\/strong> to your revocation_uri. Delegation record is per <strong>(iss, sub, aud)<\/strong> tuple.<\/div>\n<\/div>\n<\/div>\n<div class=\"ag-muted\">Trade-off: only works when the agent\u2019s provider supports ID-JAG minting. MCP servers and bare LLM API calls typically cannot.<\/div>\n<\/div>\n<p>    <!-- SLIDE 4 --><\/p>\n<div class=\"ag-slide\">\n<div class=\"ag-step-num\"><span>04<\/span> \/ 07 \u00a0\u00a0Flow 2<\/div>\n<div class=\"ag-slide-title\">User Claimed Flow<\/div>\n<p>      <span class=\"ag-rule\"><\/span><\/p>\n<div class=\"ag-body\">OTP-based registration. No provider participation required. The agent triggers a code, the user reads it back, and the account is claimed. Two starting shapes:<\/div>\n<div class=\"ag-cols\">\n<div class=\"ag-col\">\n<div class=\"ag-col-title\">Anonymous Start<\/div>\n<div class=\"ag-col-body\">\n<ul>\n<li>Agent registers without identity<\/li>\n<li>Credential issued immediately at pre-claim scopes<\/li>\n<li>Agent can start work right away<\/li>\n<li>OTP ceremony run later to bind a real user<\/li>\n<li>Scopes upgrade in place, key is not rotated<\/li>\n<\/ul><\/div>\n<\/div>\n<div class=\"ag-col\">\n<div class=\"ag-col-title\">Email Required<\/div>\n<div class=\"ag-col-body\">\n<ul>\n<li>Agent supplies user email at registration<\/li>\n<li>App sends OTP email immediately<\/li>\n<li>No credential issued until OTP is verified<\/li>\n<li>Use when any pre-claim access is unacceptable<\/li>\n<li>Fresh credential issued on \/claim\/complete<\/li>\n<\/ul><\/div>\n<\/div>\n<\/div>\n<div class=\"ag-code\">POST \/agent\/auth\/claim          \u2014 trigger OTP email<br \/>\nPOST \/agent\/auth\/claim\/complete  \u2014 submit 6-digit code<\/div>\n<\/div>\n<p>    <!-- SLIDE 5 --><\/p>\n<div class=\"ag-slide\">\n<div class=\"ag-step-num\"><span>05<\/span> \/ 07 \u00a0\u00a0Credentials<\/div>\n<div class=\"ag-slide-title\">Credential Types and Usage<\/div>\n<p>      <span class=\"ag-rule\"><\/span><\/p>\n<div class=\"ag-body\">Your service decides whether to issue an <strong>access_token<\/strong> or an <strong>api_key<\/strong>. Both are presented the same way in API requests.<\/div>\n<div class=\"ag-code\">Authorization: Bearer &lt;credential&gt;<\/div>\n<div class=\"ag-flow\">\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">01<\/div>\n<div class=\"ag-flow-text\"><strong>access_token (ID-JAG flow):<\/strong> No refresh token is issued. The agent must present a fresh ID-JAG to extend access.<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">02<\/div>\n<div class=\"ag-flow-text\"><strong>api_key (anonymous or email flow):<\/strong> Non-expiring by default. Scopes upgrade in place after OTP claim completes.<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">03<\/div>\n<div class=\"ag-flow-text\">On any <strong>401 from a previously-working credential<\/strong>, the agent drops it and restarts discovery from Step 1.<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">04<\/div>\n<div class=\"ag-flow-text\">Credentials are scoped, tied to a real user, and independently revocable by the provider or user.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>    <!-- SLIDE 6 --><\/p>\n<div class=\"ag-slide\">\n<div class=\"ag-step-num\"><span>06<\/span> \/ 07 \u00a0\u00a0Implementation<\/div>\n<div class=\"ag-slide-title\">User Matching, JIT Provisioning and Audit<\/div>\n<p>      <span class=\"ag-rule\"><\/span><\/p>\n<div class=\"ag-body\">When credentials are issued, your service resolves which user the registration belongs to. Recommended resolution order:<\/div>\n<div class=\"ag-flow\">\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">1<\/div>\n<div class=\"ag-flow-text\"><strong>Delegation record match:<\/strong> prior (iss, sub) pair. Strongest identifier, what the provider considers stable.<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">2<\/div>\n<div class=\"ag-flow-text\"><strong>Verified email match:<\/strong> link to an existing user with the same verified email.<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">3<\/div>\n<div class=\"ag-flow-text\"><strong>JIT provision:<\/strong> create a new user per your policy, or reject if manual onboarding is required.<\/div>\n<\/div>\n<\/div>\n<div class=\"ag-body\">Recommended audit events to record:<\/div>\n<div class=\"ag-chips\">\n<div class=\"ag-chip hl\">registration.created<\/div>\n<div class=\"ag-chip hl\">claim.requested<\/div>\n<div class=\"ag-chip hl\">claim.confirmed<\/div>\n<div class=\"ag-chip hl\">registration.expired<\/div>\n<div class=\"ag-chip hl\">registration.revoked<\/div>\n<\/div>\n<\/div>\n<p>    <!-- SLIDE 7 --><\/p>\n<div class=\"ag-slide\">\n<div class=\"ag-step-num\"><span>07<\/span> \/ 07 \u00a0\u00a0Get Started<\/div>\n<div class=\"ag-slide-title\">Minimum Implementation Checklist<\/div>\n<p>      <span class=\"ag-rule\"><\/span><\/p>\n<div class=\"ag-flow\">\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">01<\/div>\n<div class=\"ag-flow-text\">Publish <strong>auth.md<\/strong> at your service root with supported flows, scopes, and endpoint URLs<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">02<\/div>\n<div class=\"ag-flow-text\">Publish <strong>\/.well-known\/oauth-protected-resource<\/strong> with an agent_auth block<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">03<\/div>\n<div class=\"ag-flow-text\">Return <strong>WWW-Authenticate<\/strong> header on all 401 responses<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">04<\/div>\n<div class=\"ag-flow-text\">Implement <strong>\/agent\/auth<\/strong> endpoint dispatching on type: anonymous or identity_assertion<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">05<\/div>\n<div class=\"ag-flow-text\">For user claimed: implement <strong>\/agent\/auth\/claim<\/strong> and <strong>\/agent\/auth\/claim\/complete<\/strong> with OTP logic<\/div>\n<\/div>\n<div class=\"ag-flow-step\">\n<div class=\"ag-flow-idx\">06<\/div>\n<div class=\"ag-flow-text\">For agent verified: maintain a <strong>provider trust list<\/strong>, verify ID-JAG signatures against JWKS, implement jti replay protection<\/div>\n<\/div>\n<\/div>\n<div class=\"ag-muted\">Spec + full auth.md template: github.com\/workos\/auth.md \u00a0\u2014\u00a0 Early access: authmd@workos.com<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"ag-nav\">\n  <button class=\"ag-btn\" disabled>\u2190 Prev<\/button>\n<div class=\"ag-dots\"><\/div>\n<p>  <button class=\"ag-btn\">Next \u2192<\/button>\n<\/p><\/div>\n<div class=\"ag-footer\">\n<div class=\"ag-footer-left\">Marktechpost <span>\u2014 AI Research &amp; News<\/span><\/div>\n<div class=\"ag-footer-right\">marktechpost.com<\/div>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\"><strong>Key Takeaways<\/strong><\/h2>\n<ul class=\"wp-block-list\">\n<li>auth.md is an open protocol: apps host a Markdown file at <code>service.com\/auth.md<\/code> describing how agents register and get scoped credentials.<\/li>\n<li>Two flows are supported: agent verified (ID-JAG-based, synchronous, no human interaction) and user claimed (OTP-based, no provider integration required).<\/li>\n<li>Discovery is two-hop: PRM at <code>\/.well-known\/oauth-protected-resource<\/code> points to the Authorization Server, whose metadata contains the <code>agent_auth<\/code> block with endpoint URLs and supported flows.<\/li>\n<li>The protocol composes existing OAuth standards (RFC 9728, ID-JAG) and is not tied to WorkOS infrastructure.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<\/p><p class=\"wp-block-paragraph\">\n<\/p><p class=\"wp-block-paragraph\">Check out\u00a0the\u00a0<strong><a href=\"https:\/\/github.com\/workos\/auth.md\" target=\"_blank\" rel=\"noreferrer noopener\">Repo<\/a>\u00a0<\/strong>and<strong>\u00a0<a href=\"https:\/\/workos.com\/auth-md\" target=\"_blank\" rel=\"noreferrer noopener\">Technical details<\/a>.\u00a0<\/strong>Also,\u00a0feel free to follow us on\u00a0<strong><a href=\"https:\/\/x.com\/intent\/follow?screen_name=marktechpost\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Twitter<\/mark><\/a><\/strong>\u00a0and don\u2019t forget to join our\u00a0<strong><a href=\"https:\/\/www.reddit.com\/r\/machinelearningnews\/\" target=\"_blank\" rel=\"noreferrer noopener\">150k+ ML SubReddit<\/a><\/strong>\u00a0and Subscribe to\u00a0<strong><a href=\"https:\/\/www.aidevsignals.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">our Newsletter<\/a><\/strong>. Wait! are you on telegram?\u00a0<strong><a href=\"https:\/\/t.me\/machinelearningresearchnews\" target=\"_blank\" rel=\"noreferrer noopener\">now you can join us on telegram as well.<\/a><\/strong><\/p>\n<p class=\"wp-block-paragraph\">Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.?\u00a0<strong><a href=\"https:\/\/forms.gle\/MTNLpmJtsFA3VRVd9\" target=\"_blank\" rel=\"noreferrer noopener\"><mark>Connect with us<\/mark><\/a><\/strong><\/p>\n<p>The post <a href=\"https:\/\/www.marktechpost.com\/2026\/05\/25\/workos-releases-auth-md-an-open-agent-registration-protocol-built-on-oauth-standards\/\">WorkOS Releases auth.md: An Open Agent Registration Protocol Built on OAuth Standards<\/a> appeared first on <a href=\"https:\/\/www.marktechpost.com\/\">MarkTechPost<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>For years, authentication on t&hellip;<\/p>\n","protected":false},"author":1,"featured_media":29,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-971","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=971"}],"version-history":[{"count":0,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/posts\/971\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=\/wp\/v2\/media\/29"}],"wp:attachment":[{"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=971"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=971"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/connectword.dpdns.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}