Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.
Availability depends on the API deployment and operator signing configuration. Check its public
seller-contract endpoint: it must answer and report a configured issuer. A 404 means the API does
not support this interface. An absent issuer means signing is disabled; earlier validation refusals
can mask missing configuration, so an individual call’s error is not an availability check.
Buyer identity is optional attribution carried in a signed JSON Web Token (JWT). It is not payment
authority, verified agent registration, or verified person/company identity (know your customer, KYC).
No claim binds this token to a payment: its presence shows neither that this request paid nor that
a payment settled. Verify payment independently.Read the configured issuer from the seller-contract endpoint for the deployment you use.
Pin the issuer and public-key endpoint out of band, never through a token. The seller-contract
endpoint reporting a configured issuer is the reliable availability check; an earlier validation
refusal can mask missing configuration. A missing endpoint (404) means this API lacks the interface.
A seller sets the JSON boolean receiveBuyerIdentity=true when publishing/editing its listing,
including a claimed listing. The listing must have an HTTPS target. listingId below is the id in
the publish/listing response, not the slug. Only literal true opts in; false or null stores false.
On edit, omitting receiveBuyerIdentity preserves the setting; sending null turns an existing opt-in off.The delegation owner separately sets the JSON boolean revealBuyerIdentity=true on each direct
slug /route call (or its /route/with-controls alias), or the exact string true in
X-Router-Reveal-Buyer-Identity on a streaming slug call. This discloses the stable delegationId
(the same identifier across sellers), plus orgId and buyer-declared agentId when present.On those supported delegation routes, false, null or omitted revealBuyerIdentity means no disclosure
and no identity-owner lookup. Other JSON non-booleans fail validation with HTTP 400; malformed
streaming header values fail BCK.ROUTER.0001. Runtime disclosure requires a plain API key, a
caller-owned delegation, an HTTPS slug target and seller opt-in. OAuth credentials are refused by
the guard on /route, /route/with-controls, /proxy and /svc with 403 BCK.OAUTH.0030, regardless of
consent; disclosure consent on commerce routes is refused with BCK.ROUTER.0001. Other unsupported
disclosure conditions use BCK.ROUTER.0001; ownership failure uses BCK.DELEGATION.0002.OAuth credentials, group members acting for another delegation owner, raw URL calls and subscription
funding cannot disclose through this interface. Subscription route bodies/headers refuse ANY
identity field, including false or null, with BCK.SUBSCRIPTION_ROUTER.0005. Select/autoPay requests
refuse the identity field whenever present, even false or null, with BCK.ROUTER.0001 once past
authentication guards; select first, then call the direct slug route.Format validation can reject before request-id deduplication. For well-formed disclosure requests,
retained replay and request-id deduplication precede configuration/owner checks, and those checks
precede all merchant requests and free-quota consumption. Explicit consent performs that owner
lookup even if the merchant later answers free. Probes and free responses never carry identity.
An unavailable identity capability is the internal configuration error BCK.ROUTER.0022 (500),
with capability=buyer-identity; retry only after the operator restores it, or deliberately omit
consent if attribution is not needed. Existing service-selection wiring uses the same error class.
The Router sends a bare compact JWT, with no Bearer prefix, in X-Router-Buyer-Identity on the paid
request only. Read that header at the seller; X-Router-Reveal-Buyer-Identity is the separate buyer
consent header sent to the Router and does not carry the token.The public keys form a JSON Web Key Set (JWKS); each entry is a public JSON Web Key (JWK).
Request bindings use Demonstrating Proof of Possession (DPoP)-style fields, but this JWT is a
distinct contract: a generic DPoP verifier alone is insufficient.
Require the protected JWT header alg=EdDSA and typ=nvm-buyer-identity+jwt, with a string kid.
Select that Ed25519 public JWK from your PINNED JWKS URL by kid (a SHA-256 RFC 7638 thumbprint).
Ignore token-supplied key URLs. Cache keys for at most 30 seconds; refetch once on unknown kid.
Verify the signature. Require payload claim ver to be the integer 1, and iss to equal the issuer
you pinned out of band. Reject unsupported versions and missing required claims as attribution.
Reconstruct the external URL using the WHATWG URL Standard (for example JavaScript new URL).
Require aud to equal its serialized origin: lowercase host, no default HTTPS :443 port, but
retain a non-default port such as :8443. Require htm to equal the uppercase received method.
Require listingId to identify a listing YOU own that serves this external URL. Do not accept
a different listing merely because it shares your origin and path.
Require htu to equal that URL’s serialized origin + pathname (no query or fragment).
Require querySha256 to hash its WHATWG search value, including the leading ? when nonempty.
A bare trailing ? has an EMPTY search value and hashes empty bytes. Preserve serialized query
order and percent encoding; do not parse/rebuild it with a query-parameter map.
Require bodySha256 to equal the base64url SHA-256 of received raw body bytes before JSON parsing,
or empty bytes when absent. Compare against the external URL before gateway rewrites.
Verify exp/iat time validity with at most 5 seconds clock leeway, rejecting future iat beyond
that leeway and a lifetime above 60 seconds. Tokens are issued at the paid hop, not at consent.
Enforce one-use (iss, jti) in a shared replay store across your replicas until exp + leeway.
Replays, absent headers, unknown keys, JWKS outages and replay-store outages produce NO
attribution. Fail closed for attribution; never infer or reuse claims you cannot verify.
A failed identity check discards attribution, not a successfully verified payment. Whether to serve
the request is decided by payment verification alone under this optional contract. If you deliberately
require identity, document that separate requirement before purchase; this contract does not require
sellers to deny an already-paid request for optional attribution failures. Never log the JWT/header.
Payload claim
Meaning and validation
ver
Required integer 1; unsupported versions provide no attribution.
iss
Exact operator-configured issuer you pinned.
aud
WHATWG serialized seller origin, with normalized host and port.
iat / exp
Unix seconds; exp=iat+60. Check time validity with at most 5 seconds leeway.
Operators prepublish the next public key on EVERY replica using
ROUTER_BUYER_IDENTITY_ADDITIONAL_PUBLIC_JWKS (a JSON array of public Ed25519 JWKs), leaving the old
signer active. Wait at least the 30-second JWKS cache lifetime before changing active signers.Roll the active private key, retaining BOTH old and new public keys on every replica throughout
the roll. Keep the retiring key at least 95 seconds after the last old-key signer stops (60-second
tokens + 5-second leeway + 30-second cache), then remove it. Never put private JWKs in that array.Operators log paymentId, listingId and jti only after a paid hop has answered. They exclude the JWT,
request body and the sensitive delegationId, orgId and agentId claims. This HTTP-answer record does
not assert payment settlement. Signing or transport failures use failed-hop bookkeeping/fee release;
a signer that failed before sending is marked not-sent for payment-channel reconciliation.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Nevermined Documentation","colors":{"primary":"#0f766e","light":"#5eead4","dark":"#0d3f48"},"logo":{"light":"https://mintcdn.com/neverminedag/pEEAPbhrOtjiJvrW/logo/light.svg?fit=max\u0026auto=format\u0026n=pEEAPbhrOtjiJvrW\u0026q=85\u0026s=adbff4ad34c53aed8ca307e9b12104e5","dark":"https://mintcdn.com/neverminedag/pEEAPbhrOtjiJvrW/logo/dark.svg?fit=max\u0026auto=format\u0026n=pEEAPbhrOtjiJvrW\u0026q=85\u0026s=519fb2296e47f72117a24e0787b6bd87"},"favicon":"https://mintcdn.com/neverminedag/816P0WhT1WcQ-Koj/favicon.ico?fit=max\u0026auto=format\u0026n=816P0WhT1WcQ-Koj\u0026q=85\u0026s=2ff33e631489dd6cca6be632af8aa16a","api":{"openapi":"api-reference/openapi.json"},"appearance":{"default":"light"},"navbar":{"links":[{"href":"https://nevermined.app","label":"App"}],"primary":{"type":"button","label":"AI Catalog","href":"https://nevermined.app/catalog/"}},"footer":{"socials":{"x":"https://x.com/nevermined_ai","github":"https://github.com/nevermined-io","linkedin":"https://linkedin.com/company/nevermined","discord":"https://discord.com/invite/GZju2qScKq"}},"seo":{"metatags":{"canonical":"https://nevermined.ai/docs"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"markdown":{"instructions":["If you are an agent buying services: start with these steps. Every page has a .md version.","1. Install the Catalog MCP (live server https://mcp.live.nevermined.app/mcp, sandbox server https://mcp.sandbox.nevermined.app/mcp; rehearse on sandbox with a sandbox API key before live, as keys work only in their own environment; Claude Code and Cursor commands, Codex config.toml entry): https://nevermined.ai/docs/products/catalog/mcp.md","2. Get an API key: https://nevermined.ai/docs/agents-guide/get-api-key.md","3. Enroll a card and create a delegation (a payment method plus a spend mandate: an amount, an expiry and a number of purchases): https://nevermined.ai/docs/agents-guide/enroll-card.md","4. Buy and call a paid agent over x402: https://nevermined.ai/docs/getting-started/ai-agent-purchase.md","SDK quickstart: https://nevermined.ai/docs/integrate/quickstart/typescript.md. Pricing: https://nevermined.ai/pricing/"]},"styling":{"latex":true},"navigation":{"global":{"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"neverminedag","hasAudioNarration":false,"actualSubdomain":"neverminedag","customDomains":["nevermined.ai"],"gitSource":{"type":"github","owner":"nevermined-io","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aec50ad754501e0c6b57307","collectionId":"782623ee-113d-42bf-afc3-e24295f2eeea","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aec50ad754501e0c6b57307"},"feedback":{"agentFeedback":true,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aec5e85825fb9c6a11a0a16","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API","count":147},{"language":"default","tag":"Guides","count":132},{"language":"default","tag":"Organizations","count":96},{"language":"default","tag":"Nevermined Catalog","count":50},{"language":"default","tag":"SDK","count":35},{"language":"default","tag":"Connect from a host","count":29},{"language":"default","tag":"Integrations","count":21},{"language":"default","tag":"MCP","count":18},{"language":"default","tag":"Authentication","count":17},{"language":"default","tag":"Learn","count":16}]},"assistantConfig":{"deflection":{"enabled":true,"email":"support@nevermined.io","showHelpButton":true}},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","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":"vite-origin","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":"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}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"img.nav-logo{max-height:20px!important;height:20px!important;width:auto!important}.nav-tabs{gap:0!important;padding:0!important}a.nav-tabs-item{padding:8px 16px!important;font-size:14px!important;font-weight:500!important;min-width:auto!important;border-radius:0!important;background:transparent!important}a.nav-tabs-item:hover{color:#0f766e!important;background:transparent!important}.dark a.nav-tabs-item,[data-theme=\"dark\"] a.nav-tabs-item{color:#d1d5db!important}.dark a.nav-tabs-item:hover,[data-theme=\"dark\"] a.nav-tabs-item:hover{color:#5eead4!important}@media (max-width: 768px){a.nav-tabs-item{padding:6px 12px!important;font-size:13px!important}}.nvm-hero-banner{position:relative;background-color:#0d3f48;border-radius:24px;padding:48px 32px;margin-bottom:32px;overflow:hidden;min-height:320px;display:flex;flex-direction:column;justify-content:center}.nvm-hero-banner::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background-image:url('/images/product_hero.jpg');background-size:cover;background-position:center right;opacity:0.9}.nvm-hero-content{position:relative;z-index:1;max-width:600px}.nvm-hero-label{color:white;font-size:12px;font-weight:600;letter-spacing:2px;text-transform:uppercase;margin-bottom:16px;opacity:0.9}.nvm-hero-title{font-size:clamp(28px, 5vw, 48px);font-weight:300;line-height:1.1;margin-bottom:20px}.nvm-gradient-text{background:linear-gradient(114.57deg, #bcdc4a 23%, #abe2dd 60%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;font-style:italic}.nvm-hero-title-white{color:white;display:block;margin-top:4px}.nvm-hero-description{color:rgba(255, 255, 255, 0.85);font-size:16px;line-height:1.6;margin-bottom:24px;max-width:500px}.nvm-hero-button{display:inline-block;background-color:white;color:#0d3f48!important;padding:12px 24px;border-radius:8px;font-size:14px;font-weight:600;text-decoration:none!important;transition:all 0.2s ease;border:none;cursor:pointer}.nvm-hero-button:hover{background-color:#f0f0f0;transform:translateY(-1px);text-decoration:none!important}@media (max-width: 768px){.nvm-hero-banner{padding:32px 24px;min-height:280px}.nvm-hero-banner::before{background-position:center center;opacity:0.7}.nvm-hero-title{font-size:28px}.nvm-hero-description{font-size:14px}}.prose,.prose p,.prose li,article p,article li{font-size:15px!important;line-height:1.6!important}.prose h1,article h1{font-size:27px!important}.prose h2,article h2{font-size:21px!important}.prose h3,article h3{font-size:17px!important}.prose h4,article h4{font-size:15px!important}#sidebar a.group{padding-top:4px!important;padding-bottom:4px!important}#sidebar li{margin:1px 0!important}.sidebar-group-header{gap:6px!important;margin-bottom:4px!important;padding-left:12px!important}#sidebar .mt-6,#sidebar .lg\\:mt-8{margin-top:20px!important}ul.sidebar-group{gap:0!important}#sidebar-content{padding-top:12px!important;padding-bottom:12px!important}#navigation-items{font-size:13px!important}:is(a,button,input,select,textarea,summary,[tabindex]:not([tabindex=\"-1\"]),[role=\"button\"],[role=\"link\"],[role=\"tab\"],[role=\"menuitem\"],[role=\"option\"],[role=\"checkbox\"],[role=\"switch\"]):focus-visible{outline:2px solid #0f766e!important;outline-offset:2px!important}.dark :is(a,button,input,select,textarea,summary,[tabindex]:not([tabindex=\"-1\"]),[role=\"button\"],[role=\"link\"],[role=\"tab\"],[role=\"menuitem\"],[role=\"option\"],[role=\"checkbox\"],[role=\"switch\"]):focus-visible,[data-theme=\"dark\"] :is(a,button,input,select,textarea,summary,[tabindex]:not([tabindex=\"-1\"]),[role=\"button\"],[role=\"link\"],[role=\"tab\"],[role=\"menuitem\"],[role=\"option\"],[role=\"checkbox\"],[role=\"switch\"]):focus-visible{outline-color:#5eead4!important}#navbar{background-color:rgb(var(--background-light, 255 255 255))!important;border-bottom:1px solid #e5e7eb!important}.dark #navbar,[data-theme=\"dark\"] #navbar{background-color:rgb(var(--background-dark, 11 14 15))!important;border-bottom-color:rgba(255, 255, 255, 0.08)!important}#navbar{--nvmbg-ink: #0d3f48}.dark #navbar,[data-theme=\"dark\"] #navbar{--nvmbg-ink: #4ac6bf}#navbar::after{content:\"\";position:absolute;inset:0;z-index:1;pointer-events:none;background-image:url(\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22600%22%20height%3D%22130%22%20viewBox%3D%220%200%20600%20130%22%20fill%3D%22none%22%3E%3Cg%20stroke%3D%22%230d3f48%22%20stroke-opacity%3D%220.09%22%20stroke-width%3D%221%22%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%2240%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%2266%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%2292%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22118%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22144%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22170%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22196%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22222%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22248%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22274%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22300%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22326%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22352%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22378%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22404%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22430%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22456%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22482%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22508%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22534%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22560%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22586%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22612%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22638%22%2F%3E%3C%2Fg%3E%3Cg%20stroke%3D%22%230d3f48%22%20stroke-opacity%3D%220.04%22%20stroke-width%3D%221%22%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%2240%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%2266%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%2292%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22118%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22144%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22170%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22196%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22222%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22248%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22274%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22300%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22326%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22352%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22378%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22404%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22430%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22456%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22482%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22508%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22534%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22560%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22586%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22612%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22638%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");background-repeat:no-repeat;background-position:top right;background-size:600px 130px}.dark #navbar::after,[data-theme=\"dark\"] #navbar::after{background-image:url(\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22600%22%20height%3D%22130%22%20viewBox%3D%220%200%20600%20130%22%20fill%3D%22none%22%3E%3Cg%20stroke%3D%22%234ac6bf%22%20stroke-opacity%3D%220.1%22%20stroke-width%3D%221%22%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%2240%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%2266%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%2292%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22118%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22144%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22170%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22196%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22222%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22248%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22274%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22300%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22326%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22352%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22378%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22404%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22430%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22456%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22482%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22508%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22534%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22560%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22586%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22612%22%2F%3E%3Ccircle%20cx%3D%22600%22%20cy%3D%220%22%20r%3D%22638%22%2F%3E%3C%2Fg%3E%3Cg%20stroke%3D%22%234ac6bf%22%20stroke-opacity%3D%220.045%22%20stroke-width%3D%221%22%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%2240%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%2266%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%2292%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22118%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22144%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22170%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22196%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22222%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22248%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22274%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22300%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22326%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22352%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22378%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22404%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22430%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22456%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22482%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22508%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22534%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22560%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22586%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22612%22%2F%3E%3Ccircle%20cx%3D%22618%22%20cy%3D%2214%22%20r%3D%22638%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}#navbar::before{content:\"\";position:absolute;inset:0;z-index:1;pointer-events:none;opacity:0.06;background-image:repeating-linear-gradient(\n 45deg,\n var(--nvmbg-ink) 0,\n var(--nvmbg-ink) 0.5px,\n transparent 0.5px,\n transparent 5px\n );-webkit-mask-image:radial-gradient(120% 140% at 0 0, #000 0%, transparent 55%);mask-image:radial-gradient(120% 140% at 0 0, #000 0%, transparent 55%)}#navbar div:has(>nav #topbar-cta-button)>nav{order:1;margin-inline:1rem 0}#navbar div:has(>nav #topbar-cta-button)>div{margin-inline:0}#topbar-cta-button>a{--catalog-accent: #12a89e;--catalog-lime: #8fbf1f;position:relative;display:inline-flex;align-items:center;padding:13px 22px 13px 57px;border-radius:12px;background:#0d3f48;font-size:15px;font-weight:600;line-height:1}:is(.dark,[data-theme=\"dark\"]) #topbar-cta-button>a{--catalog-accent: #4ac6bf;--catalog-lime: #bcdc4a}#topbar-cta-button>a>span.absolute,#topbar-cta-button>a>div>svg{display:none}#topbar-cta-button>a::before,#topbar-cta-button>a::after{content:\"\";position:absolute;left:22px;top:50%;transform:translateY(-50%);width:24px;height:17px;background-color:var(--catalog-accent);mask:var(--catalog-ribbon) center / contain no-repeat;-webkit-mask:var(--catalog-ribbon) center / contain no-repeat;pointer-events:none}#topbar-cta-button>a::before{--catalog-ribbon: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2031.06%2022%22%3E%3Cpath%20d%3D%22M0%2011.153L10.4179%2020.6426V11.0576L0%201.56805V11.153Z%22%2F%3E%3C%2Fsvg%3E\")}#topbar-cta-button>a::after{--catalog-ribbon: url(\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2031.06%2022%22%3E%3Cpath%20d%3D%22M10.4178%201.56805V11.153L20.8325%2020.6426L31.0596%2011.153V1.56805L20.8325%2011.0576L10.4178%201.56805Z%22%2F%3E%3C%2Fsvg%3E\")}@media (prefers-reduced-motion: no-preference){#topbar-cta-button>a:is(:hover,:focus-visible)::before,#topbar-cta-button>a:is(:hover,:focus-visible)::after{animation:nvm-catalog-shimmer .8s ease-in-out infinite}#topbar-cta-button>a:is(:hover,:focus-visible)::after{animation-delay:.12s}}@keyframes nvm-catalog-shimmer{0%,100%{background-color:var(--catalog-accent)}50%{background-color:var(--catalog-lime)}}"}],"page":{"pagePath":"products/catalog/router/buyer-identity","slug":"/products/catalog/router/buyer-identity","pageMetadata":{"title":"Router buyer identity","description":"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.","icon":"fingerprint","href":"/products/catalog/router/buyer-identity"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,ol:`ol`,p:`p`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsx(_components.p,{children:`Availability depends on the API deployment and operator signing configuration. Check its public\nseller-contract endpoint: it must answer and report a configured issuer. A 404 means the API does\nnot support this interface. An absent issuer means signing is disabled; earlier validation refusals\ncan mask missing configuration, so an individual call’s error is not an availability check.`})}),`\n`,_jsx(_components.p,{children:`Buyer identity is optional attribution carried in a signed JSON Web Token (JWT). It is not payment\nauthority, verified agent registration, or verified person/company identity (know your customer, KYC).\nNo claim binds this token to a payment: its presence shows neither that this request paid nor that\na payment settled. Verify payment independently.`}),`\n`,_jsx(_components.p,{children:`Read the configured issuer from the seller-contract endpoint for the deployment you use.\nPin the issuer and public-key endpoint out of band, never through a token. The seller-contract\nendpoint reporting a configured issuer is the reliable availability check; an earlier validation\nrefusal can mask missing configuration. A missing endpoint (404) means this API lacks the interface.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Environment`}),_jsx(_components.th,{children:`API base`}),_jsx(_components.th,{children:`Public keys`}),_jsx(_components.th,{children:`Seller contract and configured issuer`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`live`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://api.live.nevermined.app`,children:`https://api.live.nevermined.app`})}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://api.live.nevermined.app/api/v1/router/buyer-identity/jwks`,children:`https://api.live.nevermined.app/api/v1/router/buyer-identity/jwks`})}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://api.live.nevermined.app/api/v1/router/buyer-identity`,children:`https://api.live.nevermined.app/api/v1/router/buyer-identity`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`sandbox`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://api.sandbox.nevermined.app`,children:`https://api.sandbox.nevermined.app`})}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://api.sandbox.nevermined.app/api/v1/router/buyer-identity/jwks`,children:`https://api.sandbox.nevermined.app/api/v1/router/buyer-identity/jwks`})}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://api.sandbox.nevermined.app/api/v1/router/buyer-identity`,children:`https://api.sandbox.nevermined.app/api/v1/router/buyer-identity`})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`consent-and-supported-calls`,children:`Consent and supported calls`}),`\n`,_jsx(_components.p,{children:`A seller sets the JSON boolean receiveBuyerIdentity=true when publishing/editing its listing,\nincluding a claimed listing. The listing must have an HTTPS target. listingId below is the id in\nthe publish/listing response, not the slug. Only literal true opts in; false or null stores false.\nOn edit, omitting receiveBuyerIdentity preserves the setting; sending null turns an existing opt-in off.`}),`\n`,_jsx(_components.p,{children:`The delegation owner separately sets the JSON boolean revealBuyerIdentity=true on each direct\nslug /route call (or its /route/with-controls alias), or the exact string true in\nX-Router-Reveal-Buyer-Identity on a streaming slug call. This discloses the stable delegationId\n(the same identifier across sellers), plus orgId and buyer-declared agentId when present.`}),`\n`,_jsx(_components.p,{children:`On those supported delegation routes, false, null or omitted revealBuyerIdentity means no disclosure\nand no identity-owner lookup. Other JSON non-booleans fail validation with HTTP 400; malformed\nstreaming header values fail BCK.ROUTER.0001. Runtime disclosure requires a plain API key, a\ncaller-owned delegation, an HTTPS slug target and seller opt-in. OAuth credentials are refused by\nthe guard on /route, /route/with-controls, /proxy and /svc with 403 BCK.OAUTH.0030, regardless of\nconsent; disclosure consent on commerce routes is refused with BCK.ROUTER.0001. Other unsupported\ndisclosure conditions use BCK.ROUTER.0001; ownership failure uses BCK.DELEGATION.0002.`}),`\n`,_jsx(_components.p,{children:`OAuth credentials, group members acting for another delegation owner, raw URL calls and subscription\nfunding cannot disclose through this interface. Subscription route bodies/headers refuse ANY\nidentity field, including false or null, with BCK.SUBSCRIPTION_ROUTER.0005. Select/autoPay requests\nrefuse the identity field whenever present, even false or null, with BCK.ROUTER.0001 once past\nauthentication guards; select first, then call the direct slug route.`}),`\n`,_jsx(_components.p,{children:`Format validation can reject before request-id deduplication. For well-formed disclosure requests,\nretained replay and request-id deduplication precede configuration/owner checks, and those checks\nprecede all merchant requests and free-quota consumption. Explicit consent performs that owner\nlookup even if the merchant later answers free. Probes and free responses never carry identity.\nAn unavailable identity capability is the internal configuration error BCK.ROUTER.0022 (500),\nwith capability=buyer-identity; retry only after the operator restores it, or deliberately omit\nconsent if attribution is not needed. Existing service-selection wiring uses the same error class.`}),`\n`,_jsx(Heading,{level:`2`,id:`verification-checklist`,children:`Verification checklist`}),`\n`,_jsx(_components.p,{children:`The Router sends a bare compact JWT, with no Bearer prefix, in X-Router-Buyer-Identity on the paid\nrequest only. Read that header at the seller; X-Router-Reveal-Buyer-Identity is the separate buyer\nconsent header sent to the Router and does not carry the token.`}),`\n`,_jsx(_components.p,{children:`The public keys form a JSON Web Key Set (JWKS); each entry is a public JSON Web Key (JWK).\nRequest bindings use Demonstrating Proof of Possession (DPoP)-style fields, but this JWT is a\ndistinct contract: a generic DPoP verifier alone is insufficient.`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Require the protected JWT header alg=EdDSA and typ=nvm-buyer-identity+jwt, with a string kid.\nSelect that Ed25519 public JWK from your PINNED JWKS URL by kid (a SHA-256 RFC 7638 thumbprint).\nIgnore token-supplied key URLs. Cache keys for at most 30 seconds; refetch once on unknown kid.`}),`\n`,_jsx(_components.li,{children:`Verify the signature. Require payload claim ver to be the integer 1, and iss to equal the issuer\nyou pinned out of band. Reject unsupported versions and missing required claims as attribution.`}),`\n`,_jsx(_components.li,{children:`Reconstruct the external URL using the WHATWG URL Standard (for example JavaScript new URL).\nRequire aud to equal its serialized origin: lowercase host, no default HTTPS :443 port, but\nretain a non-default port such as :8443. Require htm to equal the uppercase received method.`}),`\n`,_jsx(_components.li,{children:`Require listingId to identify a listing YOU own that serves this external URL. Do not accept\na different listing merely because it shares your origin and path.`}),`\n`,_jsx(_components.li,{children:`Require htu to equal that URL’s serialized origin + pathname (no query or fragment).\nRequire querySha256 to hash its WHATWG search value, including the leading ? when nonempty.\nA bare trailing ? has an EMPTY search value and hashes empty bytes. Preserve serialized query\norder and percent encoding; do not parse/rebuild it with a query-parameter map.`}),`\n`,_jsx(_components.li,{children:`Require bodySha256 to equal the base64url SHA-256 of received raw body bytes before JSON parsing,\nor empty bytes when absent. Compare against the external URL before gateway rewrites.`}),`\n`,_jsx(_components.li,{children:`Verify exp/iat time validity with at most 5 seconds clock leeway, rejecting future iat beyond\nthat leeway and a lifetime above 60 seconds. Tokens are issued at the paid hop, not at consent.`}),`\n`,_jsx(_components.li,{children:`Enforce one-use (iss, jti) in a shared replay store across your replicas until exp + leeway.\nReplays, absent headers, unknown keys, JWKS outages and replay-store outages produce NO\nattribution. Fail closed for attribution; never infer or reuse claims you cannot verify.`}),`\n`]}),`\n`,_jsx(_components.p,{children:`A failed identity check discards attribution, not a successfully verified payment. Whether to serve\nthe request is decided by payment verification alone under this optional contract. If you deliberately\nrequire identity, document that separate requirement before purchase; this contract does not require\nsellers to deny an already-paid request for optional attribution failures. Never log the JWT/header.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Payload claim`}),_jsx(_components.th,{children:`Meaning and validation`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`ver`}),_jsx(_components.td,{children:`Required integer 1; unsupported versions provide no attribution.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`iss`}),_jsx(_components.td,{children:`Exact operator-configured issuer you pinned.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`aud`}),_jsx(_components.td,{children:`WHATWG serialized seller origin, with normalized host and port.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`iat / exp`}),_jsx(_components.td,{children:`Unix seconds; exp=iat+60. Check time validity with at most 5 seconds leeway.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`jti`}),_jsx(_components.td,{children:`Unique single-use token id; enforce shared replay protection.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`listingId`}),_jsx(_components.td,{children:`Your listing’s id; it must be owned by you and serve this URL.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`delegationId`}),_jsx(_components.td,{children:`Stable authenticated-owner delegation id, shared across consenting seller calls.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`orgId`}),_jsx(_components.td,{children:`Optional organization of that delegation; no company verification implied.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`agentId`}),_jsx(_components.td,{children:`Optional buyer-entered attribution; no registry or identity verification.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`agentAttribution`}),_jsx(_components.td,{children:`buyer-declared, present only together with agentId.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`htm`}),_jsx(_components.td,{children:`Uppercase received HTTP method.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`htu`}),_jsx(_components.td,{children:`WHATWG serialized origin + pathname, excluding query and fragment.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`querySha256`}),_jsx(_components.td,{children:`Base64url SHA-256 of WHATWG URL.search; empty for absent query or a bare ?.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`bodySha256`}),_jsx(_components.td,{children:`Base64url SHA-256 of raw request body bytes, empty when absent.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`rotation-and-operations`,children:`Rotation and operations`}),`\n`,_jsx(_components.p,{children:`Operators prepublish the next public key on EVERY replica using\nROUTER_BUYER_IDENTITY_ADDITIONAL_PUBLIC_JWKS (a JSON array of public Ed25519 JWKs), leaving the old\nsigner active. Wait at least the 30-second JWKS cache lifetime before changing active signers.`}),`\n`,_jsx(_components.p,{children:`Roll the active private key, retaining BOTH old and new public keys on every replica throughout\nthe roll. Keep the retiring key at least 95 seconds after the last old-key signer stops (60-second\ntokens + 5-second leeway + 30-second cache), then remove it. Never put private JWKs in that array.`}),`\n`,_jsx(_components.p,{children:`Operators log paymentId, listingId and jti only after a paid hop has answered. They exclude the JWT,\nrequest body and the sensitive delegationId, orgId and agentId claims. This HTTP-answer record does\nnot assert payment settlement. Signing or transport failures use failed-hop bookkeeping/fee release;\na signer that failed before sending is marked not-sent for payment-channel reconciliation.`}),`\n`,_jsx(Heading,{level:`2`,id:`related-guidance`,children:`Related guidance`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://nevermined.ai/docs/products/catalog/router/guardrails`,children:`Router guardrails`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://nevermined.ai/docs/products/catalog/router/subscription`,children:`Subscription funding`})}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Router buyer identity","description":"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.","icon":"fingerprint","href":"/products/catalog/router/buyer-identity"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Consent and supported calls","slug":"consent-and-supported-calls","depth":2,"children":[]},{"title":"Verification checklist","slug":"verification-checklist","depth":2,"children":[]},{"title":"Rotation and operations","slug":"rotation-and-operations","depth":2,"children":[]},{"title":"Related guidance","slug":"related-guidance","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/neverminedag/13bbe6de0edf6c8b/docs-analytics.js"],"subdomain":"neverminedag","siteName":"Nevermined Documentation","title":"Router buyer identity - Nevermined Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T09:47:38.887Z","originalFileLocation":"products/catalog/router/buyer-identity.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=\"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nevermined Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_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=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Router buyer identity - Nevermined Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nevermined Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://nevermined.ai/docs/products/catalog/router/buyer-identity\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://neverminedag.mintlify.app/_mintlify/api/og/v2?division=Nevermined+Router\u0026amp;title=Router+buyer+identity\u0026amp;description=Verify+optional+Router-signed+buyer+attribution%2C+request+bindings+and+replay+protection+with+the+version+1+seller+contract.\u0026amp;theme=c89a77452a99234468b325dc\u0026amp;signature=17fff00be720cf7154342e76025cfc0c8c966fe4530513ee64d8b299077276c3\">\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=\"Router buyer identity - Nevermined Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://neverminedag.mintlify.app/_mintlify/api/og/v2?division=Nevermined+Router\u0026amp;title=Router+buyer+identity\u0026amp;description=Verify+optional+Router-signed+buyer+attribution%2C+request+bindings+and+replay+protection+with+the+version+1+seller+contract.\u0026amp;theme=c89a77452a99234468b325dc\u0026amp;signature=17fff00be720cf7154342e76025cfc0c8c966fe4530513ee64d8b299077276c3\">\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=\"/docs/mintlify-assets/_mintlify/favicons/neverminedag/kfri__UAQkYRE-Ph/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nevermined Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0f766e\">\u003clink data-mint-head rel=\"canonical\" href=\"https://nevermined.ai/docs/products/catalog/router/buyer-identity\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/products/catalog/router/buyer-identity.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://nevermined.ai/#organization\",\"name\":\"Nevermined Documentation\",\"url\":\"https://nevermined.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/neverminedag/pEEAPbhrOtjiJvrW/logo/light.svg?fit=max\u0026auto=format\u0026n=pEEAPbhrOtjiJvrW\u0026q=85\u0026s=adbff4ad34c53aed8ca307e9b12104e5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://nevermined.ai/docs#website\",\"name\":\"Nevermined Documentation\",\"url\":\"https://nevermined.ai/docs\",\"publisher\":{\"@id\":\"https://nevermined.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity#webpage\",\"url\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity\",\"name\":\"Router buyer identity\",\"description\":\"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.\",\"dateModified\":\"2026-11-05T09:47:38.887Z\",\"isPartOf\":{\"@id\":\"https://nevermined.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Nevermined Catalog\",\"item\":\"https://nevermined.ai/docs/products/catalog/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Nevermined Router\",\"item\":\"https://nevermined.ai/docs/products/catalog/router/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Router buyer identity\",\"item\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity#article\",\"headline\":\"Router buyer identity\",\"name\":\"Router buyer identity\",\"description\":\"Verify optional Router-signed buyer attribution, request bindings and replay protection with the version 1 seller contract.\",\"url\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity\",\"mainEntityOfPage\":{\"@id\":\"https://nevermined.ai/docs/products/catalog/router/buyer-identity#webpage\"},\"dateModified\":\"2026-11-05T09:47:38.887Z\",\"publisher\":{\"@id\":\"https://nevermined.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://nevermined.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nevermined Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Nevermined Documentation","nav":{"global":{"anchors":[]},"tabs":[{"tab":"Guides","groups":[{"group":"Learn","pages":[{"title":"Overview","icon":"rocket","href":"/getting-started/overview"},{"title":"Core Concepts","icon":"lightbulb","href":"/getting-started/core-concepts"},{"title":"5-Minute Setup","icon":"rocket","href":"/integrate/quickstart/5-minute-setup"},{"title":"TypeScript Quick Start","icon":"js","href":"/integrate/quickstart/typescript"},{"title":"Python Quick Start","icon":"python","href":"/integrate/quickstart/python"},{"title":"AI Coding Skill","icon":"wand-magic-sparkles","href":"/development-guide/build-using-nvm-skill"},{"title":"Buy \u0026 Call a Paid Agent","icon":"cart-shopping","href":"/getting-started/ai-agent-purchase"},{"title":"FAQ","icon":"question","href":"/products/payments/faq"},{"title":"Certifications","icon":"shield-check","href":"/products/payments/certifications"},{"group":"Agents Guide","pages":[{"title":"Agents Guide","icon":"robot","href":"/agents-guide/overview"},{"title":"Enroll a Card \u0026 Delegate a Budget","icon":"credit-card","href":"/agents-guide/enroll-card"},{"title":"Get a Nevermined API Key","icon":"key","href":"/agents-guide/get-api-key"},{"title":"Add Payments to Your Agent","icon":"plug","href":"/agents-guide/add-payments"},{"title":"Register a Plan \u0026 AI Agent","icon":"store","href":"/agents-guide/register-plan-and-agent"},{"title":"Check Your Credits (Buyer)","icon":"wallet","href":"/agents-guide/check-credits"},{"title":"Check Your Revenue (Seller)","icon":"chart-line","href":"/agents-guide/check-revenue"}]}]},{"group":"Nevermined Catalog","icon":"store","pages":[{"title":"Catalog Overview","icon":"store","href":"/products/catalog/overview"},{"title":"Using the Catalog from a harness","icon":"terminal","href":"/products/catalog/from-a-harness"},{"title":"Using the Catalog from your web assistant","icon":"comments","href":"/products/catalog/from-your-web-assistant"},{"title":"AI Services","icon":"grid-2","href":"/products/catalog/ai-services"},{"title":"Discovering AI Services","icon":"magnifying-glass","href":"/products/catalog/discover"},{"title":"Getting Your Results","icon":"box-open","href":"/products/catalog/paid-results"},{"title":"Build Outcomes","icon":"puzzle-piece","href":"/products/catalog/build-outcomes"},{"title":"Publish to the Catalog","icon":"upload","href":"/products/catalog/publish-ai-service"},{"title":"Agent Scoring — catalog indicators","icon":"gauge-high","href":"/products/catalog/agents-scoring"},{"title":"Catalog MCP","icon":"plug","href":"/products/catalog/mcp"},{"title":"Catalog videos","icon":"circle-play","href":"/products/catalog/videos"},{"group":"Nevermined Router","icon":"route","pages":[{"title":"Router Overview","icon":"route","href":"/products/catalog/router/overview"},{"title":"How the Router works","icon":"diagram-project","href":"/products/catalog/router/how-it-works"},{"title":"Router quickstart","icon":"rocket","href":"/products/catalog/router/quickstart"},{"title":"The x402 rail","icon":"coins","href":"/products/catalog/router/rails-x402"},{"title":"The MPP rail","icon":"credit-card","href":"/products/catalog/router/rails-mpp"},{"title":"Guardrails and error codes","description":"What the Router enforces on a payment, what it refuses outright, and every error code it can return.","icon":"shield-check","href":"/products/catalog/router/guardrails"},{"title":"Router buyer identity","icon":"fingerprint","href":"/products/catalog/router/buyer-identity"},{"title":"Payment ledger","description":"Query, export, and reconcile every payment your agents have made — across every protocol, in one place.","icon":"receipt","href":"/products/catalog/router/ledger"},{"title":"Pay with Nevermined credits","icon":"repeat","href":"/products/catalog/router/subscription"},{"title":"An agent buying on its own","icon":"robot","href":"/products/catalog/router/agent-autonomy"}]},{"group":"Connect from a host","icon":"plug","pages":[{"title":"Connect the Catalog from Claude (claude.ai)","icon":"plug","href":"/products/catalog/connect/claude"},{"title":"Connect the Catalog from ChatGPT","icon":"plug","href":"/products/catalog/connect/chatgpt"},{"title":"Connect the Catalog from Codex","icon":"plug","href":"/products/catalog/connect/codex"},{"title":"Connect the Catalog from VS Code","icon":"plug","href":"/products/catalog/connect/vscode"},{"title":"Connect the Catalog from Google Antigravity","icon":"plug","href":"/products/catalog/connect/antigravity"},{"title":"Connect the Catalog from Hermes Agent","icon":"plug","href":"/products/catalog/connect/hermes"},{"title":"Connect the Catalog from Kilo Code","icon":"plug","href":"/products/catalog/connect/kilo"},{"title":"Connect the Catalog from v0","icon":"plug","href":"/products/catalog/connect/v0"},{"title":"Connect the Catalog from Zed","icon":"plug","href":"/products/catalog/connect/zed"},{"title":"Connect the Catalog from Goose","icon":"plug","href":"/products/catalog/connect/goose"},{"title":"Connect the Catalog from Factory Droid","icon":"plug","href":"/products/catalog/connect/factory"},{"title":"Connect the Catalog from OpenCode","icon":"plug","href":"/products/catalog/connect/opencode"},{"title":"Connect the Catalog from Kiro","icon":"plug","href":"/products/catalog/connect/kiro"},{"title":"Connect the Catalog from n8n","icon":"plug","href":"/products/catalog/connect/n8n"},{"title":"Connect the Catalog from H Company","icon":"plug","href":"/products/catalog/connect/h-company"},{"title":"Connect the Catalog from Replit","icon":"plug","href":"/products/catalog/connect/replit"},{"title":"Connect the Catalog from OpenClaw","icon":"plug","href":"/products/catalog/connect/openclaw"},{"title":"Connect the Catalog from Make","icon":"plug","href":"/products/catalog/connect/make"},{"title":"Connect the Catalog from Muse","icon":"plug","href":"/products/catalog/connect/muse"},{"title":"Connect the Catalog from Zapier","icon":"plug","href":"/products/catalog/connect/zapier"},{"title":"Connect the Catalog from Lovable","icon":"plug","href":"/products/catalog/connect/lovable"},{"title":"Connect the Catalog from Cline","icon":"plug","href":"/products/catalog/connect/cline"},{"title":"Connect the Catalog from Windsurf","icon":"plug","href":"/products/catalog/connect/windsurf"},{"title":"Connect the Catalog from Manus","icon":"plug","href":"/products/catalog/connect/manus"},{"title":"Connect the Catalog from Dify","icon":"plug","href":"/products/catalog/connect/dify"},{"title":"Connect the Catalog from Notion Custom Agents","icon":"plug","href":"/products/catalog/connect/notion"},{"title":"Connect the Catalog from Gumloop","icon":"plug","href":"/products/catalog/connect/gumloop"},{"title":"Connect the Catalog from Microsoft Copilot Studio","icon":"plug","href":"/products/catalog/connect/copilot-studio"},{"title":"Connect the Catalog from Poke","icon":"plug","href":"/products/catalog/connect/poke"}]}]},{"group":"Payments","pages":[{"title":"Payments","icon":"credit-card","href":"/products/payments/overview"},{"title":"Card Enrollment","icon":"id-card","href":"/products/payments/card-enrollment"},{"title":"Braintree Onboarding","icon":"store","href":"/products/payments/braintree-onboarding"},{"title":"Delegations","icon":"shield-check","href":"/products/payments/mandates"},{"title":"Delegation Selection","icon":"route","href":"/products/payments/mandate-selection"}]},{"group":"Solutions","pages":[{"title":"Monetize Your AI","icon":"handshake","href":"/solutions/agent-to-agent-monetization"},{"title":"Card Delegation","icon":"user-shield","href":"/solutions/card-delegation"},{"title":"API Providers","icon":"plug","href":"/solutions/api-providers"},{"title":"MCP Point of Sales","icon":"store","href":"/solutions/mcp-point-of-sales"},{"title":"Monetize Static Assets","icon":"lock","href":"/solutions/access-control-monetization-static-resources"},{"title":"Cost Observability","icon":"chart-line","href":"/solutions/ai-agents-observability"}]},{"group":"Organizations","icon":"building","pages":[{"title":"Organizations","icon":"building","href":"/solutions/organizations/overview"},{"title":"Workspaces \u0026 Members","icon":"users","href":"/solutions/organizations/workspaces-and-members"},{"title":"Plans \u0026 Billing","icon":"credit-card","href":"/solutions/organizations/plans-and-billing"},{"title":"Groups \u0026 Budgets","icon":"layer-group","href":"/solutions/organizations/groups-and-budgets"},{"title":"Organization Wallets","icon":"wallet","href":"/solutions/organizations/wallets"},{"title":"Customers","icon":"address-book","href":"/solutions/organizations/customers"},{"title":"White-label Customer Onboarding","icon":"user-plus","href":"/solutions/organizations/white-label-onboarding"},{"title":"Analytics","icon":"chart-line","href":"/solutions/organizations/analytics"},{"title":"Activity \u0026 Events","icon":"bolt","href":"/solutions/organizations/activity-and-events"},{"title":"Programmatic \u0026 Agentic Access","icon":"robot","href":"/solutions/organizations/programmatic-access"},{"title":"Agentic Integration","icon":"compass","href":"/solutions/organizations/agentic-integration"},{"title":"Platform Partners","icon":"building","href":"/integrations/organizations"},{"title":"Embed Nevermined Widgets","icon":"puzzle-piece","href":"/integrations/organization-widgets"},{"title":"Organizations \u0026 Workspaces","icon":"building","href":"/integrate/patterns/organizations"}]},{"group":"Integrations","pages":[{"group":"Authentication","pages":[{"title":"Authentication \u0026 Identity","icon":"key","href":"/integrate/authentication/overview"},{"title":"Authorization Code + PKCE","icon":"browser","href":"/integrate/authentication/oauth-authorization-code"},{"title":"Device Flow (RFC 8628)","icon":"mobile-screen","href":"/integrate/authentication/device-flow"},{"title":"Connected Agents","icon":"link","href":"/integrate/authentication/connections"},{"title":"Authentication for AI Agents","icon":"robot","href":"/integrate/authentication/for-agents"}]},{"group":"Web Frameworks","pages":[{"title":"Express.js","icon":"node-js","href":"/integrate/add-to-your-agent/express"},{"title":"FastAPI","icon":"python","href":"/integrate/add-to-your-agent/fastapi"},{"title":"Generic HTTP","icon":"server","href":"/integrate/add-to-your-agent/generic-http"}]},{"group":"Agent Frameworks","pages":[{"title":"LangChain","icon":"link-simple","href":"/integrate/add-to-your-agent/langchain"},{"title":"Deep Agents","icon":"sitemap","href":"/integrate/add-to-your-agent/deep-agents"},{"title":"LangSmith Deployment","icon":"graduation-cap","href":"/integrate/add-to-your-agent/langsmith-deployment"},{"title":"Strands","icon":"robot","href":"/integrate/add-to-your-agent/strands"},{"title":"AgentCore","icon":"aws","href":"/integrate/add-to-your-agent/agentcore"}]},{"group":"Protocols \u0026 Partners","pages":[{"title":"MCP","icon":"laptop","href":"/integrations/mcp"},{"title":"A2A","icon":"robot","href":"/integrations/google-a2a"},{"title":"Nevermined x402 and Google AP2","icon":"sparkles","href":"/integrations/nevermined-x402-ap2"},{"title":"OpenClaw","icon":"comments","href":"/integrations/openclaw"},{"title":"Exa","icon":"magnifying-glass","href":"/integrations/exa"},{"title":"You.com","icon":"binoculars","href":"/integrations/youdotcom"},{"title":"Baselayer","icon":"building-circle-check","href":"/integrations/baselayer"},{"title":"BuildShip","icon":"lock","href":"/integrations/buildship-integration"}]}]},{"group":"Payment Patterns","pages":[{"title":"Fiat Payments","icon":"credit-card","href":"/integrate/patterns/fiat-payments"},{"title":"Orders: Goods \u0026 Services Checkout","icon":"cart-shopping","href":"/integrate/patterns/orders"},{"title":"Stablecoin Payments","icon":"coins","href":"/integrate/patterns/stablecoin-payments"},{"title":"Nevermined x402","icon":"credit-card","href":"/development-guide/nevermined-x402"},{"title":"Automatic Credit Top-Ups","icon":"arrows-rotate","href":"/integrate/patterns/top-up"},{"title":"Payment Models","icon":"calculator","href":"/integrate/patterns/payment-models"},{"title":"Validate Requests","icon":"shield-check","href":"/integrate/patterns/validate-requests"},{"title":"Charge Credits","icon":"coins","href":"/integrate/patterns/charge-credits"},{"title":"Observability \u0026 Monitoring","icon":"chart-line","href":"/development-guide/observability"},{"title":"Subscription Access","icon":"calendar","href":"/integrate/patterns/subscription-access"},{"title":"Dynamic Pricing","icon":"chart-line","href":"/integrate/patterns/dynamic-pricing"}]},{"group":"Components","pages":[{"group":"Payments Facilitator","icon":"credit-card","pages":[{"title":"Payments Facilitator","icon":"credit-card","href":"/products/payments-facilitator/overview"},{"title":"How the Payments Facilitator Works","icon":"gears","href":"/products/payments-facilitator/how-it-works"},{"title":"Accepting MPP payments","icon":"handshake","href":"/products/payments-facilitator/mpp-seller"}]},{"group":"Nevermined App","icon":"browser","pages":[{"title":"Nevermined App Overview","icon":"browser","href":"/products/nevermined-app/overview"},{"title":"Register Agents","icon":"robot","href":"/products/nevermined-app/register-agents"},{"title":"Manage Payment Plans","icon":"credit-card","href":"/products/nevermined-app/manage-plans"}]}]},{"group":"Specs","pages":[{"title":"Technical Specifications","icon":"file-lines","href":"/specs/introduction"},{"title":"x402 Smart Accounts Extension","icon":"key","href":"/specs/x402-smart-accounts"},{"title":"x402 Delegation Extension","icon":"key","href":"/specs/x402-card-delegation"}]}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/catalog-mcp/overview"}]},{"tab":"API","pages":[{"title":"API","href":"/api-reference/introduction"}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/api-reference/typescript/installation"}]}]},"basePath":"","title":"Router buyer identity - Nevermined Documentation","buildId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","deploymentId":"dpl_9yaRmq8qi7yyMZn9oEWmKEdYMvGZ","dynamics":[],"chunks":[]}