Replaces the card’s eligibility in this organisation with the list sent. Fragments missing from the list lose the card. {"fragments": []} empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first.
Each fragment is addressed by its site domain and its reference; only this organisation’s fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement.
Order of checks: the body (400, then 422 on its shape and on each domain and reference), then the card (404), then platform cards (403), then whether each fragment exists in this organisation (422).
A management token: ds_mgmt_ followed by 40 lowercase hexadecimal characters, created by an owner in Settings → Management tokens. Opaque: send it as is, in the Authorization header only.
The complete list of the fragments of this organisation the card is eligible on. [] empties it: the card is then eligible everywhere in the organisation. The same fragment named twice counts once.
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"doubleshift","description":"doubleshift is an ABC (Agentic Branded Content) provider — your site serves a sponsored brand card to AI agents only, humans see the page unchanged.","colors":{"primary":"#1263A6","light":"#6EB6FF","dark":"#0274C7"},"logo":{"light":"https://mintcdn.com/doubleshift/YAZWbQ8Q5hILdsf8/logo/wordmark-light.png?fit=max\u0026auto=format\u0026n=YAZWbQ8Q5hILdsf8\u0026q=85\u0026s=d44cfae4cd4da22ccb7a4a4fcace5cc7","dark":"https://mintcdn.com/doubleshift/YAZWbQ8Q5hILdsf8/logo/wordmark-dark.png?fit=max\u0026auto=format\u0026n=YAZWbQ8Q5hILdsf8\u0026q=85\u0026s=1e810315892ab0848fdf9665ba0aa33e","href":"https://doubleshift.to"},"favicon":"https://mintcdn.com/doubleshift/YAZWbQ8Q5hILdsf8/logo/favicon.svg?fit=max\u0026auto=format\u0026n=YAZWbQ8Q5hILdsf8\u0026q=85\u0026s=abe9ea7efd9d8237bb4e9e7ffa920800","api":{"playground":{"display":"simple"},"examples":{"languages":["curl"]}},"appearance":{"default":"light"},"background":{"color":{"light":"#F0F6FE","dark":"#090D15"}},"navbar":{"primary":{"type":"button","label":"Open the console","href":"https://app.shftd2.com"}},"footer":{"links":[{"header":"doubleshift","items":[{"label":"Console","href":"https://app.shftd2.com"},{"label":"doubleshift.to","href":"https://doubleshift.to"},{"label":"Terms","href":"https://doubleshift.to/legal"},{"label":"Changelog","href":"/changelog"}]}]},"search":{"prompt":"Search the doubleshift docs…"},"seo":{"metatags":{"robots":"noindex, nofollow","googlebot":"noindex, nofollow, noarchive, nosnippet"},"indexing":"navigable","trailingSlash":false},"fonts":{"family":"Inter","source":"fonts/inter-var-latin.woff2","format":"woff2"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"css-variables","dark":"css-variables"}},"latex":false},"errors":{"404":{"redirect":false,"title":"Page not found","description":"That page does not exist. Start from the [documentation home](/)."}},"contextual":{"options":["copy","view","chatgpt","claude","mcp","add-mcp","download-spec"],"display":"header"},"thumbnails":{"preset":"classic","surface":"neutral"},"variables":{"edgeVersion":"1.1.4","edgeSha256":"d4db890cbf27a2da1977d3ba76e0585ab3bf7cc78111eaddc71019527114e9d1","cloudfrontKitVersion":"0.1.0-rc.3","cloudfrontKitZipSha256":"8120c973e8203cb499a06718d5a47500f281030a11139520a88ce1da12c1d7b7","cloudfrontKitManifestSha256":"7acf833bd67b0920052ed6a5b0daf084c14df6119ab3ff2e7c4ab27710ac4f34"},"markdown":{"instructions":["Publishers integrate one API: GET https://api.shftd2.com/v1/fragment?partner_id=\u003caccount id>\u0026page_url=\u003cpage URL>, called from their edge for AI-agent requests only, with the API key in the X-API-Key header, never in the query string.","A 200 carries the card. A 204 means no card: serve the page unchanged.","The management API (https://api.shftd2.com/v1/me, /v1/sites, /v1/cards, /v1/keys) is optional tooling for scripting setup. It takes its own management token (Authorization: Bearer ds_mgmt_…). Its limits (120 requests and 60 writes per minute per token) do not apply to the delivery API.","Delivery logs reach doubleshift only through direct delivery logs (POST https://logs.shftd2.com/v1/beacon with a logs token; the edge library with a logsToken is its provided client, and a custom sender may use the same endpoint) or a Cloudflare Logpush job configured with doubleshift. Otherwise doubleshift sees only its own API activity."]},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"doubleshift","hasAudioNarration":false,"actualSubdomain":"doubleshift","customDomains":["docs.shftd2.com"],"gitSource":{"type":"github","owner":"shftd2-pre","repo":"app-doubleshift","deployBranch":"main","contentDirectory":"docs-mintlify","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae3034b35bfd7dda39f7e84","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API reference","count":25},{"language":"default","tag":"Management API","count":19},{"language":"default","tag":"Endpoints","count":18},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"Delivery API","count":4},{"language":"default","tag":"Integrate","count":4},{"language":"default","tag":"Routing rules","count":4},{"language":"default","tag":"Configure","count":3},{"language":"default","tag":"Operate","count":3},{"language":"default","tag":"Start","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('/fonts/inter-var-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('/fonts/inter-var-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/jetbrains-mono-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/jetbrains-mono-400-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/jetbrains-mono-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/jetbrains-mono-500-latin-ext.woff2') format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}:root{--ds-fg: #1A1E24;--ds-fg-muted: #494D54;--ds-fg-meta: #676C73;--ds-accent: #1263A6;--ds-accent-hover: #0C528C;--ds-accent-text: #1263A6;--ds-on-accent: #FFFFFF;--ds-surface: #FFFFFF}.dark{--ds-fg: #F0F6FE;--ds-fg-muted: #A9AEB6;--ds-fg-meta: #898E96;--ds-surface: #1A1E24;--ds-accent: #0274C7;--ds-accent-hover: #1263A6;--ds-accent-text: #6EB6FF;--ds-on-accent: #FFFFFF}:root{--font-paper-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--mint-foreground: var(--ds-fg);--mint-background: var(--ds-surface);--mint-token-keyword: var(--ds-fg);--mint-token-function: var(--ds-fg);--mint-token-constant: var(--ds-fg);--mint-token-punctuation: var(--ds-fg-muted);--mint-token-comment: var(--ds-fg-meta);--mint-token-string: var(--ds-accent-text);--mint-token-string-expression: var(--ds-accent-text)}#content [data-component-part=\"frame-caption\"]{color:var(--ds-fg-meta)}#topbar-cta-button a{background-color:var(--ds-accent)}#topbar-cta-button a:hover{opacity:1;background-color:var(--ds-accent-hover)}#topbar-cta-button a span{color:var(--ds-on-accent)}img.sidebar-group-icon{width:1rem;height:1rem}html.dark img[src*=\"/icons/\"]{filter:invert(1) hue-rotate(180deg) brightness(1.09)}#content table code{font-size:0.8125rem}html:not(.dark) :is(.card,.callout),html.dark :is(.card,.callout){background-color:var(--ds-surface)}"}],"page":{"pagePath":"management-reference/eligibility/replace-a-cards-eligibility","slug":"/management-reference/eligibility/replace-a-cards-eligibility","pageMetadata":{"title":"Replace a card's eligibility","description":"**Replaces the card's eligibility in this organisation** with the list sent. Fragments missing from the list lose the card. `{\"fragments\": []}` empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first.\n\nEach fragment is addressed by its site domain and its reference; only this organisation's fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement.\n\nOrder of checks: the body (`400`, then `422` on its shape and on each domain and reference), then the card (`404`), then platform cards (`403`), then whether each fragment exists in this organisation (`422`).","deprecated":null,"version":null,"openapi":"/openapi-management.json put /v1/cards/{id}/eligibility","href":"/management-reference/eligibility/replace-a-cards-eligibility","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Replaces the card’s eligibility in this organisation\"\n }), \" with the list sent. Fragments missing from the list lose the card. \", _jsx(_components.code, {\n children: \"{\\\"fragments\\\": []}\"\n }), \" empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Each fragment is addressed by its site domain and its reference; only this organisation’s fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Order of checks: the body (\", _jsx(_components.code, {\n children: \"400\"\n }), \", then \", _jsx(_components.code, {\n children: \"422\"\n }), \" on its shape and on each domain and reference), then the card (\", _jsx(_components.code, {\n children: \"404\"\n }), \"), then platform cards (\", _jsx(_components.code, {\n children: \"403\"\n }), \"), then whether each fragment exists in this organisation (\", _jsx(_components.code, {\n children: \"422\"\n }), \").\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"css-variables","dark":"css-variables"}},"config":{},"pageMetadata":{"title":"Replace a card's eligibility","description":"**Replaces the card's eligibility in this organisation** with the list sent. Fragments missing from the list lose the card. `{\"fragments\": []}` empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first.\n\nEach fragment is addressed by its site domain and its reference; only this organisation's fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement.\n\nOrder of checks: the body (`400`, then `422` on its shape and on each domain and reference), then the card (`404`), then platform cards (`403`), then whether each fragment exists in this organisation (`422`).","deprecated":null,"version":null,"openapi":"/openapi-management.json put /v1/cards/{id}/eligibility","href":"/management-reference/eligibility/replace-a-cards-eligibility","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"replaceCardEligibility","tags":["Eligibility"],"summary":"Replace a card's eligibility","description":"**Replaces the card's eligibility in this organisation** with the list sent. Fragments missing from the list lose the card. `{\"fragments\": []}` empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first.\n\nEach fragment is addressed by its site domain and its reference; only this organisation's fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement.\n\nOrder of checks: the body (`400`, then `422` on its shape and on each domain and reference), then the card (`404`), then platform cards (`403`), then whether each fragment exists in this organisation (`422`).","requestBody":"788f963d-7a8d-47c9-b495-9a835173cbbb","responses":{"200":"6e3f9554-4650-46f2-8353-92369bd47dad","400":"5cc5393d-6cb3-48b8-8988-9f376eb87868","401":"fbef6144-bc38-4318-932d-12272e074977","403":"f93a5f5a-7f50-4d93-92aa-ee4015f4160f","404":"58a8bf37-499b-4ba7-ac8d-2b1a32f3f3ef","422":"317c237a-0c5d-4300-873e-6f6cd5bf7c2f","429":"0e8a4057-dc0b-475e-8258-44f16a07d6de","500":"5a93a796-e600-4b2c-a044-4574abe30812"},"x-codeSamples":[{"lang":"bash","label":"curl","source":"curl -sS -X PUT \"https://api.shftd2.com/v1/cards/crd_examplecard1/eligibility\" \\\n -H \"Authorization: Bearer $DS_MANAGEMENT_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"fragments\":[{\"domain\":\"news-site.example\",\"ref\":\"/1234567/news-site/organic/politics\"}]}'"}],"method":"put","type":"path","servers":["0bdf2788-74ac-44ce-9447-9dda4464209b"],"security":["cfbcce85-3f9c-4d58-a587-5ae96330e4e1"],"path":"/v1/cards/{id}/eligibility","baseUrlOptions":["https://api.shftd2.com"],"title":"Replace a card's eligibility","codeSamples":[{"label":"curl","lang":"bash","source":"curl -sS -X PUT \"https://api.shftd2.com/v1/cards/crd_examplecard1/eligibility\" \\\n -H \"Authorization: Bearer $DS_MANAGEMENT_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"fragments\":[{\"domain\":\"news-site.example\",\"ref\":\"/1234567/news-site/organic/politics\"}]}'"}],"requestExampleLanguages":["bash"],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"49e04b52-21c4-4e33-9861-b51007a85d6b":{"name":"id","in":"path","required":true,"description":"The card id (`crd_…`), from `GET /v1/cards`.","schema":{"type":"string","isRequired":true,"description":"The card id (`crd_…`), from `GET /v1/cards`.","uniqueKey":"","typeLabel":"string"},"example":"crd_examplecard1"}},"requestBody":{"required":true,"description":"Send `Content-Type: application/json` and a JSON object of at most 262,144 bytes.","x-max-body-bytes":262144,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["fragments"],"properties":{"fragments":{"type":"array","description":"The complete list of the fragments of this organisation the card is eligible on. `[]` empties it: the card is then eligible everywhere in the organisation. The same fragment named twice counts once.","items":{"type":"object","additionalProperties":false,"required":["domain","ref"],"properties":{"domain":{"type":"string","description":"The site domain, normalized like the console form: trimmed, lowercased, a scheme, path or port dropped; it must then be a valid public domain (`422` otherwise).","isRequired":true,"uniqueKey":"fragments.items.[INDEX].domain","typeLabel":"string"},"ref":{"type":"string","pattern":"^[A-Za-z0-9/_.:-]{1,200}$","description":"The fragment reference, exact and case-sensitive (not trimmed), as a plain JSON string.","isRequired":true,"uniqueKey":"fragments.items.[INDEX].ref","typeLabel":"string"}},"example":{"domain":"news-site.example","ref":"/1234567/news-site/organic/politics"},"uniqueKey":"fragments.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"fragments","typeLabel":"object[]"}},"example":{"fragments":[{"domain":"news-site.example","ref":"/1234567/news-site/organic/politics"}]},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"fragments":[{"domain":"news-site.example","ref":"/1234567/news-site/organic/politics"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"6e3f9554-4650-46f2-8353-92369bd47dad":{"description":"The card's eligibility after the replacement.","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}}},"content":{"application/json":{"schema":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","description":"One fragment of this organisation a card is eligible on. Several cards can be eligible on the same fragment.","required":["card_id","fragment_id","domain","ref"],"properties":{"card_id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].card_id","typeLabel":"string"},"fragment_id":{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].fragment_id","typeLabel":"string"},"domain":{"type":"string","description":"The fragment site domain.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].domain","typeLabel":"string"},"ref":{"oneOf":[{"type":"string","description":"The fragment reference, or null when the fragment has none.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].ref.oneOf.0","typeLabel":"string"},{"type":"null","description":"The fragment reference, or null when the fragment has none.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].ref.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].ref","typeLabel":"string | null"}},"example":{"card_id":"crd_examplecard1","fragment_id":"frg_examplefr1","domain":"news-site.example","ref":"/1234567/news-site/organic/politics"},"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"\\items","typeLabel":"object[]"}},"example":{"items":[{"card_id":"crd_examplecard1","fragment_id":"frg_examplefr1","domain":"news-site.example","ref":"/1234567/news-site/organic/politics"}]},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"items":[{"card_id":"crd_examplecard1","fragment_id":"frg_examplefr1","domain":"news-site.example","ref":"/1234567/news-site/organic/politics"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"5cc5393d-6cb3-48b8-8988-9f376eb87868":{"description":"The body was refused before its values were read: `unsupported_media_type` (no `Content-Type: application/json`), `body_too_large` (over 262,144 bytes, counted before parsing), `invalid_json`, or `unknown_field` (a field this operation does not accept, nested ones included; `field` names it).","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}}},"content":{"application/json":{"schema":{"type":"object","description":"Every error of this API. Like every response, it carries `Cache-Control: private, no-store` and `RateLimit-Policy: \"token\";q=120;w=60, \"write\";q=60;w=60`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_media_type","body_too_large","invalid_json","unknown_field","missing_token","invalid_token","platform_card","not_found","conflict","validation","rate_limited","internal"],"description":"Stable, machine-readable code. Branch on it, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation, the console wording where the console has one. May change.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"field":{"type":"string","description":"The field at fault, nested ones included (`routes[3].path_prefix`, `fragments[0].ref`). Present on `unknown_field`, `validation` and `conflict`; absent otherwise.","uniqueKey":"error.field","typeLabel":"string"},"retry_after":{"type":"integer","const":60,"description":"Seconds to wait. Present on `rate_limited` only.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"validation","message":"Choose a fragment of this site","field":"routes[0].ref"}},"uniqueKey":"","typeLabel":"object"},"examples":{"unsupported_media_type":{"title":"unsupported_media_type","value":{"error":{"code":"unsupported_media_type","message":"send the body as JSON, with \"Content-Type: application/json\""}}},"body_too_large":{"title":"body_too_large","value":{"error":{"code":"body_too_large","message":"request body over 262144 bytes"}}},"invalid_json":{"title":"invalid_json","value":{"error":{"code":"invalid_json","message":"request body is not valid JSON"}}},"unknown_field":{"title":"unknown_field","value":{"error":{"code":"unknown_field","message":"unknown field","field":"domain"}}}},"exampleType":"examples"}},"exampleType":"examples"},"fbef6144-bc38-4318-932d-12272e074977":{"description":"`missing_token`: no `Authorization: Bearer` header. `invalid_token`: anything else that is not a live management token of an organisation — malformed, unknown, revoked or expired, or a delivery API key (`ds_live_…`). Cookies are never read. Carries `WWW-Authenticate: Bearer realm=\"doubleshift\"`.","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}},"WWW-Authenticate":{"description":"On every 401.","schema":{"type":"string","const":"Bearer realm=\"doubleshift\""}}},"content":{"application/json":{"schema":{"type":"object","description":"Every error of this API. Like every response, it carries `Cache-Control: private, no-store` and `RateLimit-Policy: \"token\";q=120;w=60, \"write\";q=60;w=60`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_media_type","body_too_large","invalid_json","unknown_field","missing_token","invalid_token","platform_card","not_found","conflict","validation","rate_limited","internal"],"description":"Stable, machine-readable code. Branch on it, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation, the console wording where the console has one. May change.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"field":{"type":"string","description":"The field at fault, nested ones included (`routes[3].path_prefix`, `fragments[0].ref`). Present on `unknown_field`, `validation` and `conflict`; absent otherwise.","uniqueKey":"error.field","typeLabel":"string"},"retry_after":{"type":"integer","const":60,"description":"Seconds to wait. Present on `rate_limited` only.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"validation","message":"Choose a fragment of this site","field":"routes[0].ref"}},"uniqueKey":"","typeLabel":"object"},"examples":{"missing_token":{"title":"missing_token","value":{"error":{"code":"missing_token","message":"missing management token — send \"Authorization: Bearer ds_mgmt_…\""}}},"invalid_token":{"title":"invalid_token","value":{"error":{"code":"invalid_token","message":"invalid management token"}}}},"exampleType":"examples"}},"exampleType":"examples"},"f93a5f5a-7f50-4d93-92aa-ee4015f4160f":{"description":"A platform card (`account_id: null`): doubleshift manages it, and no management token can change its eligibility.","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}}},"content":{"application/json":{"schema":{"type":"object","description":"Every error of this API. Like every response, it carries `Cache-Control: private, no-store` and `RateLimit-Policy: \"token\";q=120;w=60, \"write\";q=60;w=60`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_media_type","body_too_large","invalid_json","unknown_field","missing_token","invalid_token","platform_card","not_found","conflict","validation","rate_limited","internal"],"description":"Stable, machine-readable code. Branch on it, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation, the console wording where the console has one. May change.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"field":{"type":"string","description":"The field at fault, nested ones included (`routes[3].path_prefix`, `fragments[0].ref`). Present on `unknown_field`, `validation` and `conflict`; absent otherwise.","uniqueKey":"error.field","typeLabel":"string"},"retry_after":{"type":"integer","const":60,"description":"Seconds to wait. Present on `rate_limited` only.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"validation","message":"Choose a fragment of this site","field":"routes[0].ref"}},"uniqueKey":"","typeLabel":"object"},"examples":{"platform_card":{"title":"platform_card","value":{"error":{"code":"platform_card","message":"This platform card is managed by doubleshift and is read-only."}}}},"exampleType":"examples"}},"exampleType":"examples"},"58a8bf37-499b-4ba7-ac8d-2b1a32f3f3ef":{"description":"No card of this organisation, nor platform card, has this id.","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}}},"content":{"application/json":{"schema":{"type":"object","description":"Every error of this API. Like every response, it carries `Cache-Control: private, no-store` and `RateLimit-Policy: \"token\";q=120;w=60, \"write\";q=60;w=60`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_media_type","body_too_large","invalid_json","unknown_field","missing_token","invalid_token","platform_card","not_found","conflict","validation","rate_limited","internal"],"description":"Stable, machine-readable code. Branch on it, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation, the console wording where the console has one. May change.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"field":{"type":"string","description":"The field at fault, nested ones included (`routes[3].path_prefix`, `fragments[0].ref`). Present on `unknown_field`, `validation` and `conflict`; absent otherwise.","uniqueKey":"error.field","typeLabel":"string"},"retry_after":{"type":"integer","const":60,"description":"Seconds to wait. Present on `rate_limited` only.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"validation","message":"Choose a fragment of this site","field":"routes[0].ref"}},"uniqueKey":"","typeLabel":"object"},"examples":{"not_found":{"title":"not_found","value":{"error":{"code":"not_found","message":"not found"}}}},"exampleType":"examples"}},"exampleType":"examples"},"317c237a-0c5d-4300-873e-6f6cd5bf7c2f":{"description":"A value was refused; `field` names it: `body`, `fragments` (missing or not an array), `fragments[i]` (not an object), `fragments[i].domain` (missing, not a string, or not a valid domain), `fragments[i].ref` (missing, not a string, not a valid reference, or not a fragment of this organisation).","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}}},"content":{"application/json":{"schema":{"type":"object","description":"Every error of this API. Like every response, it carries `Cache-Control: private, no-store` and `RateLimit-Policy: \"token\";q=120;w=60, \"write\";q=60;w=60`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_media_type","body_too_large","invalid_json","unknown_field","missing_token","invalid_token","platform_card","not_found","conflict","validation","rate_limited","internal"],"description":"Stable, machine-readable code. Branch on it, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation, the console wording where the console has one. May change.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"field":{"type":"string","description":"The field at fault, nested ones included (`routes[3].path_prefix`, `fragments[0].ref`). Present on `unknown_field`, `validation` and `conflict`; absent otherwise.","uniqueKey":"error.field","typeLabel":"string"},"retry_after":{"type":"integer","const":60,"description":"Seconds to wait. Present on `rate_limited` only.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"validation","message":"Choose a fragment of this site","field":"routes[0].ref"}},"uniqueKey":"","typeLabel":"object"},"examples":{"target":{"title":"target","value":{"error":{"code":"validation","message":"Choose fragments of this account","field":"fragments[0].ref"}}},"domain":{"title":"domain","value":{"error":{"code":"validation","message":"Enter a valid domain, e.g. example.com","field":"fragments[0].domain"}}}},"exampleType":"examples"}},"exampleType":"examples"},"0e8a4057-dc0b-475e-8258-44f16a07d6de":{"description":"A limit was reached (per token: 120 requests or 60 writes per minute; per IP address: 30 failed authentications or 600 requests presenting a well-formed token per minute). Nothing was written. Carries `Retry-After: 60`, and `retry_after: 60` in the body: wait that long before retrying.","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer","const":60}}},"content":{"application/json":{"schema":{"type":"object","description":"Every error of this API. Like every response, it carries `Cache-Control: private, no-store` and `RateLimit-Policy: \"token\";q=120;w=60, \"write\";q=60;w=60`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_media_type","body_too_large","invalid_json","unknown_field","missing_token","invalid_token","platform_card","not_found","conflict","validation","rate_limited","internal"],"description":"Stable, machine-readable code. Branch on it, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation, the console wording where the console has one. May change.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"field":{"type":"string","description":"The field at fault, nested ones included (`routes[3].path_prefix`, `fragments[0].ref`). Present on `unknown_field`, `validation` and `conflict`; absent otherwise.","uniqueKey":"error.field","typeLabel":"string"},"retry_after":{"type":"integer","const":60,"description":"Seconds to wait. Present on `rate_limited` only.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"validation","message":"Choose a fragment of this site","field":"routes[0].ref"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"rate limited — retry after 60 seconds","retry_after":60}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"rate limited — retry after 60 seconds","retry_after":60}}}},"exampleType":"examples"}},"exampleType":"examples"},"5a93a796-e600-4b2c-a044-4574abe30812":{"description":"An unexpected server error. The message is fixed and carries no detail.","headers":{"Cache-Control":{"description":"On every response of this API.","schema":{"type":"string","const":"private, no-store"}},"RateLimit-Policy":{"description":"On every response of this API: 120 requests and 60 writes per 60 seconds per token (IETF draft ratelimit-headers syntax). No remaining count is sent.","schema":{"type":"string","const":"\"token\";q=120;w=60, \"write\";q=60;w=60"}}},"content":{"application/json":{"schema":{"type":"object","description":"Every error of this API. Like every response, it carries `Cache-Control: private, no-store` and `RateLimit-Policy: \"token\";q=120;w=60, \"write\";q=60;w=60`.","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unsupported_media_type","body_too_large","invalid_json","unknown_field","missing_token","invalid_token","platform_card","not_found","conflict","validation","rate_limited","internal"],"description":"Stable, machine-readable code. Branch on it, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation, the console wording where the console has one. May change.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"field":{"type":"string","description":"The field at fault, nested ones included (`routes[3].path_prefix`, `fragments[0].ref`). Present on `unknown_field`, `validation` and `conflict`; absent otherwise.","uniqueKey":"error.field","typeLabel":"string"},"retry_after":{"type":"integer","const":60,"description":"Seconds to wait. Present on `rate_limited` only.","uniqueKey":"error.retry_after","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"example":{"error":{"code":"validation","message":"Choose a fragment of this site","field":"routes[0].ref"}},"uniqueKey":"","typeLabel":"object"},"examples":{"internal":{"title":"internal","value":{"error":{"code":"internal","message":"internal error"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"cfbcce85-3f9c-4d58-a587-5ae96330e4e1":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A management token: `ds_mgmt_` followed by 40 lowercase hexadecimal characters, created by an owner in **Settings → Management tokens**. Opaque: send it as is, in the `Authorization` header only.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"0bdf2788-74ac-44ce-9447-9dda4464209b":{"url":"https://api.shftd2.com","description":"The machine host. The management API exists on this host only; there is no alias."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"A management token: `ds_mgmt_` followed by 40 lowercase hexadecimal characters, created by an owner in **Settings → Management tokens**. Opaque: send it as is, in the `Authorization` header only.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A management token: `ds_mgmt_` followed by 40 lowercase hexadecimal characters, created by an owner in **Settings → Management tokens**. Opaque: send it as is, in the `Authorization` header only.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi-management.json"},"subdomain":"doubleshift","siteName":"doubleshift","title":"Replace a card's eligibility - doubleshift","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T16:24:16.908Z","originalFileLocation":"management-reference/eligibility/replace-a-cards-eligibility.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Replaces the card\u0026#x27;s eligibility in this organisation with the list sent. Fragments missing from the list lose the card. {\u0026quot;fragments\u0026quot;: []} empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first. Each fragment is addressed by its site domain and its reference; only this organisation\u0026#x27;s fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement. Order of checks: the body (400, then 422 on its shape and on each domain and reference), then the card (404), then platform cards (403), then whether each fragment exists in this organisation (422).\">\u003cmeta data-mint-head name=\"application-name\" content=\"doubleshift\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex, nofollow\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Replace a card\u0026#x27;s eligibility - doubleshift\">\u003cmeta data-mint-head property=\"og:description\" content=\"Replaces the card\u0026#x27;s eligibility in this organisation with the list sent. Fragments missing from the list lose the card. {\u0026quot;fragments\u0026quot;: []} empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first. Each fragment is addressed by its site domain and its reference; only this organisation\u0026#x27;s fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement. Order of checks: the body (400, then 422 on its shape and on each domain and reference), then the card (404), then platform cards (403), then whether each fragment exists in this organisation (422).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"doubleshift\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://doubleshift.mintlify.site/_mintlify/api/og/v2?division=Card+eligibility\u0026amp;title=Replace+a+card%27s+eligibility\u0026amp;description=**Replaces+the+card%27s+eligibility+in+this+organisation**+with+the+list+sent.+Fragments+missing+from+the+list+lose+the+card.+%60%7B%22fragments%22%3A+%5B%5D%7D%60+empties+the+list\u0026amp;theme=4810b5752deb301ba5abb43d\u0026amp;signature=983a191b357381286ee6ede8ff22e8a540643ab7e59175cb0d15034bffb07b11\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Replace a card\u0026#x27;s eligibility - doubleshift\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Replaces the card\u0026#x27;s eligibility in this organisation with the list sent. Fragments missing from the list lose the card. {\u0026quot;fragments\u0026quot;: []} empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first. Each fragment is addressed by its site domain and its reference; only this organisation\u0026#x27;s fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement. Order of checks: the body (400, then 422 on its shape and on each domain and reference), then the card (404), then platform cards (403), then whether each fragment exists in this organisation (422).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://doubleshift.mintlify.site/_mintlify/api/og/v2?division=Card+eligibility\u0026amp;title=Replace+a+card%27s+eligibility\u0026amp;description=**Replaces+the+card%27s+eligibility+in+this+organisation**+with+the+list+sent.+Fragments+missing+from+the+list+lose+the+card.+%60%7B%22fragments%22%3A+%5B%5D%7D%60+empties+the+list\u0026amp;theme=4810b5752deb301ba5abb43d\u0026amp;signature=983a191b357381286ee6ede8ff22e8a540643ab7e59175cb0d15034bffb07b11\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/doubleshift/vp1FM_qvVKl9Vi48/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"doubleshift\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1263A6\">\u003cmeta data-mint-head name=\"googlebot\" content=\"noindex, nofollow, noarchive, nosnippet\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/management-reference/eligibility/replace-a-cards-eligibility.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.shftd2.com/#organization\",\"name\":\"doubleshift\",\"url\":\"https://docs.shftd2.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/doubleshift/YAZWbQ8Q5hILdsf8/logo/wordmark-light.png?fit=max\u0026auto=format\u0026n=YAZWbQ8Q5hILdsf8\u0026q=85\u0026s=d44cfae4cd4da22ccb7a4a4fcace5cc7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.shftd2.com#website\",\"name\":\"doubleshift\",\"url\":\"https://docs.shftd2.com\",\"publisher\":{\"@id\":\"https://docs.shftd2.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility#webpage\",\"url\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility\",\"name\":\"Replace a card's eligibility\",\"description\":\"Replaces the card's eligibility in this organisation with the list sent. Fragments missing from the list lose the card. {\\\"fragments\\\": []} empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first. Each fragment is addressed by its site domain and its reference; only this organisation's fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement. Order of checks: the body (400, then 422 on its shape and on each domain and reference), then the card (404), then platform cards (403), then whether each fragment exists in this organisation (422).\",\"dateModified\":\"2026-10-19T16:24:16.908Z\",\"isPartOf\":{\"@id\":\"https://docs.shftd2.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Management API\",\"item\":\"https://docs.shftd2.com/management-api\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Endpoints\",\"item\":\"https://docs.shftd2.com/management-reference/account/get-the-tokens-organisation\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Card eligibility\",\"item\":\"https://docs.shftd2.com/management-reference/eligibility/list-a-cards-eligibility\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Replace a card's eligibility\",\"item\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility#apireference\",\"headline\":\"Replace a card's eligibility\",\"name\":\"Replace a card's eligibility\",\"description\":\"Replaces the card's eligibility in this organisation with the list sent. Fragments missing from the list lose the card. {\\\"fragments\\\": []} empties the list, and the card becomes eligible everywhere in the organisation. Several cards can be eligible on the same fragment. Read the current list first. Each fragment is addressed by its site domain and its reference; only this organisation's fragments are accepted (a paused one too), and a card in any status can be made eligible. The list is checked entirely first, then applied at once: on any error nothing changes. The replacement is atomic within this request only; nothing protects it from a concurrent replacement. Order of checks: the body (400, then 422 on its shape and on each domain and reference), then the card (404), then platform cards (403), then whether each fragment exists in this organisation (422).\",\"url\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility\",\"mainEntityOfPage\":{\"@id\":\"https://docs.shftd2.com/management-reference/eligibility/replace-a-cards-eligibility#webpage\"},\"dateModified\":\"2026-10-19T16:24:16.908Z\",\"publisher\":{\"@id\":\"https://docs.shftd2.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.shftd2.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"doubleshift\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"doubleshift","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","groups":[{"group":"Delivery API","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/fragment.svg","pages":[{"title":"Delivery API overview","sidebarTitle":"Overview","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/read.svg","href":"/api/overview"},{"title":"Get the card for a page","deprecated":null,"version":null,"sidebarTitle":"Fragment","openapi":"/openapi.json get /v1/fragment","href":"/api/fragment"},{"title":"Card format","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/card.svg","href":"/api/card-format"},{"title":"AI agents","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/search.svg","href":"/api/agents"}]},{"group":"Edge library","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/crosshair.svg","pages":[{"title":"doubleshift-edge reference","sidebarTitle":"Edge library","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/served.svg","href":"/api/edge-library"},{"title":"Direct delivery logs API","sidebarTitle":"Delivery logs API","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/reporting.svg","href":"/api/beacon"}]},{"group":"Management API","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/prompt.svg","tag":"Optional","pages":[{"title":"Management API","icon":"https://mintlify.s3.us-west-1.amazonaws.com/doubleshift/icons/prompt.svg","href":"/management-api"},{"group":"Endpoints","icon":"/icons/list.svg","expanded":false,"pages":[{"group":"Organisation","pages":[{"title":"Get the token's organisation","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/me","href":"/management-reference/account/get-the-tokens-organisation"}]},{"group":"Sites","pages":[{"title":"List sites","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/sites","href":"/management-reference/sites/list-sites"},{"title":"Get a site","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/sites/{domain}","href":"/management-reference/sites/get-a-site"},{"title":"Create or update a site","deprecated":null,"version":null,"openapi":"/openapi-management.json put /v1/sites/{domain}","href":"/management-reference/sites/create-or-update-a-site"}]},{"group":"Fragments","pages":[{"title":"List a site's fragments","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/sites/{domain}/fragments","href":"/management-reference/fragments/list-a-sites-fragments"},{"title":"Create or update a fragment","deprecated":null,"version":null,"openapi":"/openapi-management.json put /v1/sites/{domain}/fragments/{ref}","href":"/management-reference/fragments/create-or-update-a-fragment"}]},{"group":"Default fragment","pages":[{"title":"Set the default fragment","deprecated":null,"version":null,"openapi":"/openapi-management.json put /v1/sites/{domain}/default-fragment","href":"/management-reference/site-default/set-the-default-fragment"},{"title":"Clear the default fragment","deprecated":null,"version":null,"openapi":"/openapi-management.json delete /v1/sites/{domain}/default-fragment","href":"/management-reference/site-default/clear-the-default-fragment"}]},{"group":"Routing rules","pages":[{"title":"List a site's routing rules","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/sites/{domain}/routes","href":"/management-reference/routing-rules/list-a-sites-routing-rules"},{"title":"Replace all routing rules","deprecated":null,"version":null,"openapi":"/openapi-management.json put /v1/sites/{domain}/routes","href":"/management-reference/routing-rules/replace-all-routing-rules"},{"title":"Add a routing rule","deprecated":null,"version":null,"openapi":"/openapi-management.json post /v1/sites/{domain}/routes","href":"/management-reference/routing-rules/add-a-routing-rule"},{"title":"Delete a routing rule","deprecated":null,"version":null,"openapi":"/openapi-management.json delete /v1/sites/{domain}/routes/{id}","href":"/management-reference/routing-rules/delete-a-routing-rule"}]},{"group":"Cards","pages":[{"title":"List cards","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/cards","href":"/management-reference/cards/list-cards"}]},{"group":"Card eligibility","pages":[{"title":"List a card's eligibility","description":"The fragments of this organisation the card is eligible on, by domain, then reference (fragments without one last), then fragment id. For one of this organisation's cards, an empty list means it is eligible everywhere in the organisation. For a platform card, the eligibility other organisations set is never shown, so an empty list is not conclusive: the card may be eligible everywhere, or only on their fragments.","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/cards/{id}/eligibility","href":"/management-reference/eligibility/list-a-cards-eligibility"},{"title":"Replace a card's eligibility","deprecated":null,"version":null,"openapi":"/openapi-management.json put /v1/cards/{id}/eligibility","href":"/management-reference/eligibility/replace-a-cards-eligibility"}]},{"group":"API keys","pages":[{"title":"List API keys","description":"Every delivery API key of the organisation, revoked ones included, newest first, then by id. Never the full key. Complete: no pagination.","deprecated":null,"version":null,"openapi":"/openapi-management.json get /v1/keys","href":"/management-reference/api-keys/list-api-keys"},{"title":"Create an API key","deprecated":null,"version":null,"openapi":"/openapi-management.json post /v1/keys","href":"/management-reference/api-keys/create-an-api-key"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/openapi-management.json delete /v1/keys/{id}","href":"/management-reference/api-keys/revoke-an-api-key"}]}]}]}]}]},"basePath":"","title":"Replace a card's eligibility - doubleshift","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","Page-C945cI-W.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}