API keys are long-lived project credentials. Keep them on your backend and never include one in browser or mobile application code. Owners and admins can create, rename, scope, and revoke keys; operators and members can inspect them without changing them.
JWT authentication lets your backend issue short-lived credentials instead of distributing an API key to a client. Register only the public signing key with Rhinestone; the private key stays on your backend.Owners and admins manage these keys on the JWT keys screen.
Generate a keypair
Upload a public key
Select Register key, then Generate keypair.
Enter an Integrator ID and Key ID.
Create the key and download the private JWK.
Store the private JWK in a backend secret manager before closing the dialog.
Generate a JWT keypair with sample identifiers.
The dashboard generates an ES256 key on the P-256 curve in your browser. Only the public key is registered. The private key is shown once and cannot be recovered.
Select Register key, then choose the public-key upload option.
Enter an Integrator ID and Key ID.
Paste a public JWK or upload a .json file.
Create the key.
The dashboard accepts RSA keys for RS256 and EC P-256 keys for ES256. It rejects a JWK that contains private key material.
The identifiers map to the tokens your backend signs:
Register a new public key under a new Key ID, start signing with its private key, and wait for tokens signed by the old key to expire. Then open the old key and select Disable. Tokens using a disabled key no longer verify.
The 1auth section appears only in environments where it is enabled. If it is missing, contact Rhinestone to confirm availability. Owners, admins, and operators can manage apps and domains; members have read-only access.
Open 1auth Apps, select Create App, enter a Name, and submit. Open the new app’s row to view its Client ID, domains, and WebAuthn configuration.
2
Add a domain
Under Domains, select Add domain and enter the host name, such as app.example.com, without a scheme, path, or port.For a shared RP ID such as example.com, add both example.com and every host name that will run WebAuthn, such as app.example.com and checkout.example.com. Each must be registered and verified separately; verifying a parent does not verify its subdomains.
3
Publish the DNS record
Copy the Name and Value from the displayed TXT record into your DNS provider. Use the values shown for that domain, not a record copied from another app or environment. If your DNS provider appends the zone name automatically, enter only the relative record name it requires.Select Done if DNS is not ready yet. The pending domain retains its verification instructions in the app drawer.
4
Verify ownership
Once the TXT record is publicly resolvable, select Verify now, or return to the app drawer and select Verify beside the domain. Confirm that the domain’s status changes from pending to active.If verification fails, check the record name and value and allow time for DNS propagation before retrying. If attempts are rate-limited, wait for the interval shown by the Dashboard.
Choose the passkey namespace before onboarding users. For one host, use its host name as the RP ID. To share a namespace across subdomains, use their parent domain.
An established RP ID cannot be changed or cleared in the Dashboard. A different RP ID selects a different passkey, on-chain signer, and smart-account namespace; existing balances do not move automatically. Treat any change as an explicit account migration, not a configuration update.
In the app drawer, find WebAuthn RP namespace and select Configure.
Select a verified domain under RP ID. Only exact, verified domains are eligible; a wildcard domain cannot back this configuration.
In Ceremony origins, enter every authorized HTTPS origin, one per line.
Select Save configuration. For an existing RP ID, use Edit origins to update the origin list without changing the RP ID.
Example configuration in the Dashboard, using sample app data.
https://app.example.com and https://checkout.example.com, on separate lines
An origin includes the scheme and any non-default port, but no path, query, or fragment. Its host name must equal the RP ID or be its subdomain, and must itself be an exact verified domain on this app. Wildcard origins are not accepted. For example, https://app.example.com:8443 is a different origin from https://app.example.com and must be listed separately if used.
Copy the app’s Client ID into clientId in the shared client initializer. It identifies the app; it is not a project API key or JWT signing secret. Keep those credentials on your backend.
Saving an RP ID and ceremony origins authorizes that namespace on the server; it does not activate it in the client. Set the matching webauthn.rpId using Passkeys and domains. Without that option, the SDK keeps exact-host isolation. rpOrigins is server configuration, not an SDK option.
Before onboarding users, authenticate from each deployed origin and confirm that hosts intended to share an account return the same account address. Use the sponsorship setup separately for transaction funding and backend token endpoints.
Owners can invite admins, operators, and members. Admins can invite operators and members. A pending invitation can be resent from the team list.Only owners can change roles. Owners can remove any non-owner; admins can remove operators and members.
This page does not duplicate those procedures so their limits and commercial behavior have one source of truth.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Rhinestone","colors":{"primary":"#4f41ef","light":"#8479ff","dark":"#3428d1"},"logo":{"light":"https://mintcdn.com/rhinestone/IVpDy9zUkncYAe5u/logo/light.svg?fit=max\u0026auto=format\u0026n=IVpDy9zUkncYAe5u\u0026q=85\u0026s=6868a5854576ff60d371d5fdc0ae55c9","dark":"https://mintcdn.com/rhinestone/IVpDy9zUkncYAe5u/logo/dark.svg?fit=max\u0026auto=format\u0026n=IVpDy9zUkncYAe5u\u0026q=85\u0026s=2f9bff4fef6da993b8782b8e5d7357c5"},"favicon":"https://mintcdn.com/rhinestone/BVnq0VV8MigHINpS/favicon.svg?fit=max\u0026auto=format\u0026n=BVnq0VV8MigHINpS\u0026q=85\u0026s=25439e41b789b8369c52fa15ceae2644","appearance":{"default":"dark","strict":true},"background":{"color":{"dark":"#0C0C0C"}},"navbar":{"links":[{"href":"https://dashboard.rhinestone.dev","label":"Dashboard"},{"href":"https://github.com/rhinestonewtf","label":"GitHub"}]},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","claude","chatgpt"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Create API Key","icon":"key","href":"https://tally.so/r/wg22x4"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"rhinestone","hasAudioNarration":false,"actualSubdomain":"rhinestone","customDomains":["docs.rhinestone.dev"],"gitSource":{"type":"github","owner":"rhinestonewtf","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb4295a60f76c94453464a","collectionId":"7618524b-8144-4f55-a620-58d79fbeddf2","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb4295a60f76c94453464a"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeb4295a60f76c94453464a","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Wallets","count":153},{"language":"default","tag":"Custom signer","count":107},{"language":"default","tag":"Deposits","count":88},{"language":"default","tag":"SDK reference","count":74},{"language":"default","tag":"API Reference","count":67},{"language":"default","tag":"Transactions","count":30},{"language":"default","tag":"Account","count":28},{"language":"default","tag":"Overview","count":25},{"language":"default","tag":"Actions","count":25},{"language":"default","tag":"Session keys","count":21}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--background: #0C0C0C}.vm-code-group{--vm-menu-bg: #fff;--vm-menu-border: rgb(0 0 0 / 10%);--vm-hover: rgb(0 0 0 / 5%);margin:1.5rem 0;border:1px solid #404045;border-radius:12px}.dark .vm-code-group{--vm-menu-bg: #171717;--vm-menu-border: rgb(255 255 255 / 10%);--vm-hover: rgb(255 255 255 / 7%)}.vm-code-group-header{display:flex;align-items:center;justify-content:space-between;gap:0.75rem;padding:0.375rem 0.75rem;border-bottom:1px solid #404045;font-size:0.8125rem}.vm-code-caption{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:0.65}.vm-code-selector{position:relative;flex:none}.vm-code-trigger,.vm-code-option{display:flex;align-items:center;gap:0.5rem;min-height:32px;padding:0.375rem 0.5rem;border:0;border-radius:6px;background:transparent;color:inherit;font:inherit;line-height:1.25;cursor:pointer}.vm-code-trigger:hover,.vm-code-trigger[aria-expanded=\"true\"],.vm-code-option:hover,.vm-code-option:focus{background:var(--vm-hover)}.vm-code-trigger:focus-visible,.vm-code-option:focus-visible{outline:2px solid #8b7bf7;outline-offset:2px}.vm-code-group .vm-code-icon{display:block;flex:none;width:16px;height:16px;margin:0;border-radius:0}.vm-code-chevron{margin-left:0.125rem;opacity:0.55;transition:transform 150ms ease}.vm-code-trigger[aria-expanded=\"true\"] .vm-code-chevron{transform:rotate(180deg)}.vm-code-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:30;min-width:156px;padding:4px;border:1px solid var(--vm-menu-border);border-radius:10px;background:var(--vm-menu-bg);box-shadow:0 8px 24px rgb(0 0 0 / 18%)}.vm-code-option{width:100%;text-align:left}.vm-code-check{margin-left:auto;opacity:0.65}@media (pointer: coarse){.vm-code-trigger,.vm-code-option{min-height:44px}}@media (prefers-reduced-motion: reduce){.vm-code-chevron{transition:none}}.vm-code-group-panel>*{margin:0!important;border:0!important;border-radius:0 0 12px 12px;box-shadow:none!important}.vm-code-group-panel[hidden]{display:none}.prose table{display:table}table{border-collapse:separate;border-spacing:0;border:1px solid #404045;border-radius:8px;width:fit-content!important}table th,table td{border-right:1px solid #404045;border-bottom:1px solid #404045;padding:12px 16px!important}table th:last-child,table td:last-child{border-right:none}table tr:last-child td{border-bottom:none}table th{background-color:#201E2C}table th:first-child{border-radius:8px 0 0 0}table th:last-child{border-radius:0 8px 0 0}[data-component-name=\"mermaid-controls-wrapper\"]{display:none!important}.mermaid svg .actor{fill:#17132E!important;stroke:#373352!important}.mermaid svg rect.actor{rx:6;ry:6}.mermaid svg text.actor>tspan{fill:#D3CFF7!important}.mermaid svg .actor-line{stroke:#464359!important;stroke-width:1!important}.mermaid svg .messageLine0,.mermaid svg .messageLine1{stroke:#464359!important;stroke-width:1.5!important}.mermaid svg #arrowhead path,.mermaid svg [id$=\"-arrowhead\"] path{fill:#464359!important;stroke:#464359!important}.mermaid svg #crosshead path,.mermaid svg [id$=\"-crosshead\"] path{stroke:#464359!important}.mermaid svg .messageText{fill:#C7C6CC!important}.mermaid svg .activation0,.mermaid svg .activation1,.mermaid svg .activation2{fill:#17132E!important;stroke:#373352!important}.mermaid svg .note{fill:#17132E!important;stroke:#373352!important}.mermaid svg .noteText,.mermaid svg .noteText>tspan{fill:#C7C6CC!important}.mermaid svg .loopText,.mermaid svg .loopText>tspan{fill:#C7C6CC!important}.mermaid svg .loopLine{stroke:#373352!important}.mermaid svg .labelBox{fill:#17132E!important;stroke:#373352!important}.mermaid svg .labelText,.mermaid svg .labelText>tspan{fill:#C7C6CC!important}.mermaid svg .sequenceNumber{fill:#D3CFF7!important}.mermaid svg .node rect,.mermaid svg .node circle,.mermaid svg .node ellipse,.mermaid svg .node polygon,.mermaid svg .node path{fill:#17132E!important;stroke:#373352!important}.mermaid svg .nodeLabel,.mermaid svg .node .label{color:#D3CFF7!important;fill:#D3CFF7!important}.mermaid svg .flowchart-link{stroke:#464359!important}.mermaid svg .edgeLabel,.mermaid svg .edge-label{color:#C7C6CC!important;fill:#C7C6CC!important}.mermaid .labelBkg,.mermaid .labelBkg *{background:transparent!important}.mermaid svg .marker{fill:#464359!important;stroke:#464359!important}.dark #sidebar [data-active=\"true\"]{background-color:#141414!important;border-radius:6px}.deposit-demo{container-type:inline-size}.deposit-demo-loading{position:absolute;inset:0;display:grid;place-items:center;margin:0}.deposit-demo-stage:has(iframe[data-ready=\"true\"]) .deposit-demo-loading{visibility:hidden}@container (max-width: 411px){.deposit-demo-stage{--deposit-demo-height: 629px}}"}],"page":{"pagePath":"home/resources/dashboard","slug":"/home/resources/dashboard","pageMetadata":{"title":"Dashboard","description":"Access the Rhinestone Dashboard and manage projects, credentials, and team access.","href":"/home/resources/dashboard"},"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: \"Access the Rhinestone Dashboard and manage projects, credentials, and team access.\"\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`,code:`code`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,Note,OptimizedImage,Step,Steps,Tab,Table,Tabs,Warning}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Use the `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev`,children:`Rhinestone Dashboard`}),` to monitor your integration and manage project credentials, sponsorship, app fees, and organization access.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sign-in-and-choose-a-project`,children:`Sign in and choose a project`}),`\n`,_jsx(_components.p,{children:`Dashboard access is invite-gated.`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Enter an invite code`,children:[_jsxs(_components.p,{children:[`Enter your invite code on the sign-in page. If you do not have one, select `,_jsx(_components.strong,{children:`Request access`}),`.`]}),_jsx(Frame,{caption:`Enter an invite code or request access.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/rhinestone/15-z7WrBdMtVrhzu/images/dashboard/access/invite-code.png?fit=max\u0026auto=format\u0026n=15-z7WrBdMtVrhzu\u0026q=85\u0026s=fdf0acb6e569c8323633d3f9f0857426`,alt:`Rhinestone Dashboard sign-in screen with an empty invite code field and a Request access link.`,\"data-og-width\":`2880`,width:`2880`,\"data-og-height\":`1800`,height:`1800`,\"data-path\":`images/dashboard/access/invite-code.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/rhinestone/15-z7WrBdMtVrhzu/images/dashboard/access/invite-code.png?w=280\u0026fit=max\u0026auto=format\u0026n=15-z7WrBdMtVrhzu\u0026q=85\u0026s=690cf89167cdc6155028115868b26912 280w, https://mintcdn.com/rhinestone/15-z7WrBdMtVrhzu/images/dashboard/access/invite-code.png?w=560\u0026fit=max\u0026auto=format\u0026n=15-z7WrBdMtVrhzu\u0026q=85\u0026s=c1454b249e6967662dec19e7e408c0cb 560w, https://mintcdn.com/rhinestone/15-z7WrBdMtVrhzu/images/dashboard/access/invite-code.png?w=840\u0026fit=max\u0026auto=format\u0026n=15-z7WrBdMtVrhzu\u0026q=85\u0026s=3a20e0ced3096a5946a3cbbd737eb2fc 840w, https://mintcdn.com/rhinestone/15-z7WrBdMtVrhzu/images/dashboard/access/invite-code.png?w=1100\u0026fit=max\u0026auto=format\u0026n=15-z7WrBdMtVrhzu\u0026q=85\u0026s=40bf8cff74834a3b409df5d892523ae6 1100w, https://mintcdn.com/rhinestone/15-z7WrBdMtVrhzu/images/dashboard/access/invite-code.png?w=1650\u0026fit=max\u0026auto=format\u0026n=15-z7WrBdMtVrhzu\u0026q=85\u0026s=33827a558fb2cee2d81dd4405adc93f7 1650w, https://mintcdn.com/rhinestone/15-z7WrBdMtVrhzu/images/dashboard/access/invite-code.png?w=2500\u0026fit=max\u0026auto=format\u0026n=15-z7WrBdMtVrhzu\u0026q=85\u0026s=bdf3c6d20d60e0827b738872621c5515 2500w`})})]}),_jsx(Step,{title:`Continue with Google or GitHub`,children:_jsx(_components.p,{children:`After the code is accepted, authenticate with Google or GitHub.`})}),_jsx(Step,{title:`Join or create a team`,children:_jsx(_components.p,{children:`Accept a pending team invitation, or create a team and optionally invite teammates during onboarding.`})}),_jsx(Step,{title:`Select a project`,children:_jsx(_components.p,{children:`Use the project switcher at the top of the sidebar. Intents, deposits, credentials, sponsorship controls, and app-fee data use the selected project.`})})]}),`\n`,_jsxs(_components.p,{children:[`Each user can belong to one organization. If you need to move an existing account to another organization, `,_jsx(_components.a,{href:`https://www.rhinestone.dev/contact`,children:`contact Rhinestone`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`navigate-the-dashboard`,children:`Navigate the dashboard`}),`\n`,_jsx(_components.p,{children:`The sidebar provides these sections:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/overview`,children:_jsx(_components.strong,{children:`Overview`})}),` — view intent and deposit volume, active users, app-fee revenue, and sponsorship spend. This section appears only where metrics are enabled.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/intents`,children:_jsx(_components.strong,{children:`Intents`})}),` — inspect submitted intents and their execution details.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/deposits`,children:_jsx(_components.strong,{children:`Deposits`})}),` — inspect deposits, configure deposit behavior, and retry or refund eligible failures.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/keys`,children:_jsx(_components.strong,{children:`API keys`})}),` — manage API keys and `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/keys/jwt`,children:`JWT signing keys`}),` for the selected project.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/oneauth`,children:_jsx(_components.strong,{children:`1auth`})}),` — `,_jsx(_components.a,{href:`#register-a-1auth-app`,children:`register embedded-wallet apps and domains`}),` and inspect attributed users where 1auth is enabled.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Settings`}),` — manage the `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/settings`,children:`team`}),`, `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/settings/sponsorship`,children:`sponsorship`}),`, `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/settings/app-fees`,children:`app fees`}),`, and `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/settings/activity`,children:`activity history`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`If the selected project has no API key, the dashboard opens its getting-started flow instead of the normal landing page.`}),`\n`,_jsx(Heading,{level:`2`,id:`manage-api-keys`,children:`Manage API keys`}),`\n`,_jsx(_components.p,{children:`API keys are long-lived project credentials. Keep them on your backend and never include one in browser or mobile application code. Owners and admins can create, rename, scope, and revoke keys; operators and members can inspect them without changing them.`}),`\n`,_jsx(Heading,{level:`3`,id:`create-a-key`,children:`Create a key`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/keys`,children:_jsx(_components.strong,{children:`API keys`})}),` and select `,_jsx(_components.strong,{children:`Create key`}),`.`]}),`\n`,_jsx(_components.li,{children:`Enter a name that identifies the environment or service using it.`}),`\n`,_jsx(_components.li,{children:`Copy the key and store it in a secret manager before closing the dialog.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`The full API key is shown only once. It cannot be recovered from the\ndashboard.`})}),`\n`,_jsx(_components.p,{children:`A project can have up to 10 active API keys.`}),`\n`,_jsx(Heading,{level:`3`,id:`restrict-a-key`,children:`Restrict a key`}),`\n`,_jsxs(_components.p,{children:[`New keys allow mainnets and default to `,_jsx(_components.strong,{children:`Write`}),` for each product scope. Open a key, adjust `,_jsx(_components.strong,{children:`Scopes`}),`, then select `,_jsx(_components.strong,{children:`Save scopes`}),`.`]}),`\n`,_jsx(Frame,{caption:`Project API key scopes in the Dashboard, using sample key data.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/api-keys/scopes.png?fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=1d673c164e5e44a6b7bf8e60f6a93332`,alt:`API key details showing the mainnet toggle and None, Read, and Write controls for Intents and Deposits.`,\"data-og-width\":`2880`,width:`2880`,\"data-og-height\":`1800`,height:`1800`,\"data-path\":`images/dashboard/api-keys/scopes.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/api-keys/scopes.png?w=280\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=e9a41a33e723799955ec7ddba03e72e3 280w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/api-keys/scopes.png?w=560\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=a6aa93595ae554ad9bc4d3f0eeb25774 560w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/api-keys/scopes.png?w=840\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=9a53cad6d6e30f5fa52893ce9a07796f 840w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/api-keys/scopes.png?w=1100\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=dec09a2c4363796a7e2b7497b841ece4 1100w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/api-keys/scopes.png?w=1650\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=761c73e4cffc2a21ebbc78ed7b79ee46 1650w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/api-keys/scopes.png?w=2500\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=db7ce585d41037073c8f034231e10b3d 2500w`})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Control`}),_jsx(_components.th,{children:`Values`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Enable mainnets`}),_jsx(_components.td,{children:`Turn off to reject requests that target mainnets.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Intents`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`None`}),` blocks intent endpoints, `,_jsx(_components.strong,{children:`Read`}),` allows reads and quotes, and `,_jsx(_components.strong,{children:`Write`}),` also allows submission.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Deposits`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`None`}),` blocks deposit endpoints, `,_jsx(_components.strong,{children:`Read`}),` allows deposit reads, and `,_jsx(_components.strong,{children:`Write`}),` also allows mutations.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`1auth`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`None`}),` blocks 1auth project routes, `,_jsx(_components.strong,{children:`Read`}),` allows application and user reads, and `,_jsx(_components.strong,{children:`Write`}),` also allows application management.`]})]})]})]}),`\n`,_jsx(_components.p,{children:`Apply least privilege separately to every key. Scope changes take effect without changing the key value.`}),`\n`,_jsx(Heading,{level:`3`,id:`rotate-or-revoke-a-key`,children:`Rotate or revoke a key`}),`\n`,_jsx(_components.p,{children:`API keys do not rotate in place:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Create and securely store a replacement.`}),`\n`,_jsx(_components.li,{children:`Deploy the replacement to every caller.`}),`\n`,_jsx(_components.li,{children:`Confirm traffic uses the replacement.`}),`\n`,_jsxs(_components.li,{children:[`Open the old key and select `,_jsx(_components.strong,{children:`Revoke`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Both keys remain valid during the overlap. Renaming a key changes only its dashboard label.`}),`\n`,_jsx(Heading,{level:`2`,id:`manage-jwt-signing-keys`,children:`Manage JWT signing keys`}),`\n`,_jsx(_components.p,{children:`JWT authentication lets your backend issue short-lived credentials instead of distributing an API key to a client. Register only the public signing key with Rhinestone; the private key stays on your backend.`}),`\n`,_jsxs(_components.p,{children:[`Owners and admins manage these keys on the `,_jsxs(_components.a,{href:`https://dashboard.rhinestone.dev/keys/jwt`,children:[_jsx(_components.strong,{children:`JWT keys`}),` screen`]}),`.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Generate a keypair`,id:`generate-a-keypair`,children:[_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Register key`}),`, then `,_jsx(_components.strong,{children:`Generate keypair`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Enter an `,_jsx(_components.strong,{children:`Integrator ID`}),` and `,_jsx(_components.strong,{children:`Key ID`}),`.`]}),`\n`,_jsx(_components.li,{children:`Create the key and download the private JWK.`}),`\n`,_jsx(_components.li,{children:`Store the private JWK in a backend secret manager before closing the dialog.`}),`\n`]}),_jsx(Frame,{caption:`Generate a JWT keypair with sample identifiers.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/jwt-keys/generate.png?fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=523a2d13d45aa499ac7bd029a8e5ce3f`,alt:`Add JWT Key dialog with Generate Keypair selected and sample Integrator ID and Key ID values.`,\"data-og-width\":`840`,width:`840`,\"data-og-height\":`692`,height:`692`,\"data-path\":`images/dashboard/jwt-keys/generate.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/jwt-keys/generate.png?w=280\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=a1e1f3550d8c8ebff2dc4296c12b18d6 280w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/jwt-keys/generate.png?w=560\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=5a1b96d14a04e6043616eacdf0c1436d 560w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/jwt-keys/generate.png?w=840\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=58ef18adc86605bfc515b802eeb8e474 840w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/jwt-keys/generate.png?w=1100\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=9716ad1fe7a5a9cad53a0c410b9d8dd3 1100w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/jwt-keys/generate.png?w=1650\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=cfc84ef20b67853501f9f0e95312487b 1650w, https://mintcdn.com/rhinestone/WRyxb2XaCMURkTeE/images/dashboard/jwt-keys/generate.png?w=2500\u0026fit=max\u0026auto=format\u0026n=WRyxb2XaCMURkTeE\u0026q=85\u0026s=5f2011e6fb28adfea969932cd87e3b0a 2500w`})}),_jsx(_components.p,{children:`The dashboard generates an ES256 key on the P-256 curve in your browser. Only the public key is registered. The private key is shown once and cannot be recovered.`})]}),_jsxs(Tab,{title:`Upload a public key`,id:`upload-a-public-key`,children:[_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Register key`}),`, then choose the public-key upload option.`]}),`\n`,_jsxs(_components.li,{children:[`Enter an `,_jsx(_components.strong,{children:`Integrator ID`}),` and `,_jsx(_components.strong,{children:`Key ID`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Paste a public JWK or upload a `,_jsx(_components.code,{children:`.json`}),` file.`]}),`\n`,_jsx(_components.li,{children:`Create the key.`}),`\n`]}),_jsx(_components.p,{children:`The dashboard accepts RSA keys for RS256 and EC P-256 keys for ES256. It rejects a JWK that contains private key material.`})]})]}),`\n`,_jsx(_components.p,{children:`The identifiers map to the tokens your backend signs:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Dashboard value`}),_jsx(_components.th,{children:`JWT field`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Integrator ID`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`iss`}),` claim`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Key ID`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`kid`}),` protected header`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Project ID`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`sub`}),` claim`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`For JWT architecture and signing examples, see `,_jsx(_components.a,{href:`/wallets/custom-signer/integration/security`,children:`Custom signer security`}),`. For embedded-wallet sponsorship claims, see `,_jsx(_components.a,{href:`/transactions/sponsorship/set-up`,children:`Sponsorship setup`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`rotate-or-disable-a-jwt-key`,children:`Rotate or disable a JWT key`}),`\n`,_jsxs(_components.p,{children:[`Register a new public key under a new Key ID, start signing with its private key, and wait for tokens signed by the old key to expire. Then open the old key and select `,_jsx(_components.strong,{children:`Disable`}),`. Tokens using a disabled key no longer verify.`]}),`\n`,_jsx(Heading,{level:`2`,id:`register-a-1auth-app`,children:`Register a 1auth app`}),`\n`,_jsxs(_components.p,{children:[`Register your application in the selected Dashboard project before `,_jsx(_components.a,{href:`/wallets/embedded-wallets/accounts`,children:`setting up an embedded wallet`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`1auth`}),` section appears only in environments where it is enabled. If it is missing, `,_jsx(_components.a,{href:`https://www.rhinestone.dev/contact`,children:`contact Rhinestone`}),` to confirm availability. Owners, admins, and operators can manage apps and domains; members have read-only access.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`create-an-app-and-verify-domains`,children:`Create an app and verify domains`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Create an app`,children:_jsxs(_components.p,{children:[`Open `,_jsx(_components.a,{href:`https://dashboard.rhinestone.dev/oneauth`,children:_jsx(_components.strong,{children:`1auth Apps`})}),`, select `,_jsx(_components.strong,{children:`Create App`}),`, enter a `,_jsx(_components.strong,{children:`Name`}),`, and submit. Open the new app’s row to view its `,_jsx(_components.strong,{children:`Client ID`}),`, domains, and WebAuthn configuration.`]})}),_jsxs(Step,{title:`Add a domain`,children:[_jsxs(_components.p,{children:[`Under `,_jsx(_components.strong,{children:`Domains`}),`, select `,_jsx(_components.strong,{children:`Add domain`}),` and enter the host name, such as `,_jsx(_components.code,{children:`app.example.com`}),`, without a scheme, path, or port.`]}),_jsxs(_components.p,{children:[`For a shared RP ID such as `,_jsx(_components.code,{children:`example.com`}),`, add both `,_jsx(_components.code,{children:`example.com`}),` and every host name that will run WebAuthn, such as `,_jsx(_components.code,{children:`app.example.com`}),` and `,_jsx(_components.code,{children:`checkout.example.com`}),`. Each must be registered and verified separately; verifying a parent does not verify its subdomains.`]})]}),_jsxs(Step,{title:`Publish the DNS record`,children:[_jsxs(_components.p,{children:[`Copy the `,_jsx(_components.strong,{children:`Name`}),` and `,_jsx(_components.strong,{children:`Value`}),` from the displayed `,_jsx(_components.strong,{children:`TXT`}),` record into your DNS provider. Use the values shown for that domain, not a record copied from another app or environment. If your DNS provider appends the zone name automatically, enter only the relative record name it requires.`]}),_jsxs(_components.p,{children:[`Select `,_jsx(_components.strong,{children:`Done`}),` if DNS is not ready yet. The pending domain retains its verification instructions in the app drawer.`]})]}),_jsxs(Step,{title:`Verify ownership`,children:[_jsxs(_components.p,{children:[`Once the TXT record is publicly resolvable, select `,_jsx(_components.strong,{children:`Verify now`}),`, or return to the app drawer and select `,_jsx(_components.strong,{children:`Verify`}),` beside the domain. Confirm that the domain’s status changes from `,_jsx(_components.strong,{children:`pending`}),` to `,_jsx(_components.strong,{children:`active`}),`.`]}),_jsx(_components.p,{children:`If verification fails, check the record name and value and allow time for DNS propagation before retrying. If attempts are rate-limited, wait for the interval shown by the Dashboard.`})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`configure-the-rp-id-and-authorized-origins`,children:`Configure the RP ID and authorized origins`}),`\n`,_jsx(_components.p,{children:`Choose the passkey namespace before onboarding users. For one host, use its host name as the RP ID. To share a namespace across subdomains, use their parent domain.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`An established RP ID cannot be changed or cleared in the Dashboard. A different RP ID selects a different passkey, on-chain signer, and smart-account namespace; existing balances do not move automatically. Treat any change as an explicit account migration, not a configuration update.`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the app drawer, find `,_jsx(_components.strong,{children:`WebAuthn RP namespace`}),` and select `,_jsx(_components.strong,{children:`Configure`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select a verified domain under `,_jsx(_components.strong,{children:`RP ID`}),`. Only exact, verified domains are eligible; a wildcard domain cannot back this configuration.`]}),`\n`,_jsxs(_components.li,{children:[`In `,_jsx(_components.strong,{children:`Ceremony origins`}),`, enter every authorized HTTPS origin, one per line.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Save configuration`}),`. For an existing RP ID, use `,_jsx(_components.strong,{children:`Edit origins`}),` to update the origin list without changing the RP ID.`]}),`\n`]}),`\n`,_jsx(Frame,{caption:`Example configuration in the Dashboard, using sample app data.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/rhinestone/bHtE4bXK8V8Ew64v/images/dashboard/oneauth-example-checkout-webauthn-rp.png?fit=max\u0026auto=format\u0026n=bHtE4bXK8V8Ew64v\u0026q=85\u0026s=2f878c9aac04c79b4962e4c7bca7181d`,alt:`Configure WebAuthn RP namespace dialog with example.com selected as the RP ID and two HTTPS ceremony origins.`,\"data-og-width\":`960`,width:`960`,\"data-og-height\":`696`,height:`696`,\"data-path\":`images/dashboard/oneauth-example-checkout-webauthn-rp.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/rhinestone/bHtE4bXK8V8Ew64v/images/dashboard/oneauth-example-checkout-webauthn-rp.png?w=280\u0026fit=max\u0026auto=format\u0026n=bHtE4bXK8V8Ew64v\u0026q=85\u0026s=d3f17ed14435eeff8ae8dc75d6ed9151 280w, https://mintcdn.com/rhinestone/bHtE4bXK8V8Ew64v/images/dashboard/oneauth-example-checkout-webauthn-rp.png?w=560\u0026fit=max\u0026auto=format\u0026n=bHtE4bXK8V8Ew64v\u0026q=85\u0026s=63e78a8d8bf40a0f1423ba4d1764bafb 560w, https://mintcdn.com/rhinestone/bHtE4bXK8V8Ew64v/images/dashboard/oneauth-example-checkout-webauthn-rp.png?w=840\u0026fit=max\u0026auto=format\u0026n=bHtE4bXK8V8Ew64v\u0026q=85\u0026s=415c8ba8aa75a04ada1b4abbedc1de56 840w, https://mintcdn.com/rhinestone/bHtE4bXK8V8Ew64v/images/dashboard/oneauth-example-checkout-webauthn-rp.png?w=1100\u0026fit=max\u0026auto=format\u0026n=bHtE4bXK8V8Ew64v\u0026q=85\u0026s=4fc1a2cf931f6aef627553325c75d82f 1100w, https://mintcdn.com/rhinestone/bHtE4bXK8V8Ew64v/images/dashboard/oneauth-example-checkout-webauthn-rp.png?w=1650\u0026fit=max\u0026auto=format\u0026n=bHtE4bXK8V8Ew64v\u0026q=85\u0026s=ed2acb34990774f0abcd7d845aaa9d41 1650w, https://mintcdn.com/rhinestone/bHtE4bXK8V8Ew64v/images/dashboard/oneauth-example-checkout-webauthn-rp.png?w=2500\u0026fit=max\u0026auto=format\u0026n=bHtE4bXK8V8Ew64v\u0026q=85\u0026s=d7a96c589530eba32ef131b7291ca762 2500w`})}),`\n`,_jsx(_components.p,{children:`For an application served from two subdomains:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Verified domains`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`example.com`}),`, `,_jsx(_components.code,{children:`app.example.com`}),`, `,_jsx(_components.code,{children:`checkout.example.com`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`RP ID`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`example.com`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Ceremony origins`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`https://app.example.com`}),` and `,_jsx(_components.code,{children:`https://checkout.example.com`}),`, on separate lines`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`An origin includes the scheme and any non-default port, but no path, query, or fragment. Its host name must equal the RP ID or be its subdomain, and must itself be an exact verified domain on this app. Wildcard origins are not accepted. For example, `,_jsx(_components.code,{children:`https://app.example.com:8443`}),` is a different origin from `,_jsx(_components.code,{children:`https://app.example.com`}),` and must be listed separately if used.`]}),`\n`,_jsx(Heading,{level:`3`,id:`connect-the-client`,children:`Connect the client`}),`\n`,_jsxs(_components.p,{children:[`Copy the app’s `,_jsx(_components.strong,{children:`Client ID`}),` into `,_jsx(_components.code,{children:`clientId`}),` in the shared `,_jsx(_components.a,{href:`/wallets/embedded-wallets/accounts#initialize-the-client`,children:`client initializer`}),`. It identifies the app; it is not a project API key or JWT signing secret. Keep those credentials on your backend.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Saving an RP ID and ceremony origins authorizes that namespace on the server; it does not activate it in the client. Set the matching `,_jsx(_components.code,{children:`webauthn.rpId`}),` using `,_jsx(_components.a,{href:`/wallets/embedded-wallets/passkeys-and-domains#share-an-account-across-subdomains`,children:`Passkeys and domains`}),`. Without that option, the SDK keeps exact-host isolation. `,_jsx(_components.code,{children:`rpOrigins`}),` is server configuration, not an SDK option.`]})}),`\n`,_jsxs(_components.p,{children:[`Before onboarding users, authenticate from each deployed origin and confirm that hosts intended to share an account return the same account address. Use the `,_jsx(_components.a,{href:`/transactions/sponsorship/set-up`,children:`sponsorship setup`}),` separately for transaction funding and backend token endpoints.`]}),`\n`,_jsx(Heading,{level:`2`,id:`manage-the-team`,children:`Manage the team`}),`\n`,_jsxs(_components.p,{children:[`Manage organization access on the Dashboard’s `,_jsxs(_components.a,{href:`https://dashboard.rhinestone.dev/settings`,children:[_jsx(_components.strong,{children:`Team`}),` screen`]}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Role`}),_jsx(_components.th,{children:`Access`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Owner`}),_jsx(_components.td,{children:`Manages the organization, roles, members, credentials, and configuration.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Admin`}),_jsx(_components.td,{children:`Manages credentials and configuration, and can invite or remove members and operators.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Operator`}),_jsx(_components.td,{children:`Includes Member access, refunds eligible deposits, and manages 1auth apps and domains.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Member`}),_jsx(_components.td,{children:`Can view dashboard resources and retry eligible deposits.`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`invite-a-teammate`,children:`Invite a teammate`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Invite member`}),`.`]}),`\n`,_jsx(_components.li,{children:`Enter the teammate’s email address.`}),`\n`,_jsxs(_components.li,{children:[`Choose a role and select `,_jsx(_components.strong,{children:`Send invite`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Owners can invite admins, operators, and members. Admins can invite operators and members. A pending invitation can be resent from the team list.`}),`\n`,_jsx(_components.p,{children:`Only owners can change roles. Owners can remove any non-owner; admins can remove operators and members.`}),`\n`,_jsx(Heading,{level:`2`,id:`sponsorship-and-monetization`,children:`Sponsorship and monetization`}),`\n`,_jsxs(_components.p,{children:[`The dashboard exposes these controls under `,_jsx(_components.strong,{children:`Settings`}),`, but their procedures live with the products they configure:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.a,{href:`/transactions/sponsorship/set-up`,children:`Sponsorship setup`}),` for card billing and credits, and `,_jsx(_components.a,{href:`/transactions/sponsorship/policies-and-security`,children:`Policies and security`}),` for spending controls.`]}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.a,{href:`/transactions/monetization/set-up`,children:`Monetization setup`}),` and `,_jsx(_components.a,{href:`/transactions/monetization/monetize-the-flow`,children:`Monetize the flow`}),` for app-fee collection, payout destinations, balances, and withdrawals.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`This page does not duplicate those procedures so their limits and commercial behavior have one source of truth.`})]})}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":"Dashboard","description":"Access the Rhinestone Dashboard and manage projects, credentials, and team access.","href":"/home/resources/dashboard"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Sign in and choose a project","slug":"sign-in-and-choose-a-project","depth":2,"children":[]},{"title":"Navigate the dashboard","slug":"navigate-the-dashboard","depth":2,"children":[]},{"title":"Manage API keys","slug":"manage-api-keys","depth":2,"children":[{"title":"Create a key","slug":"create-a-key","depth":3,"children":[]},{"title":"Restrict a key","slug":"restrict-a-key","depth":3,"children":[]},{"title":"Rotate or revoke a key","slug":"rotate-or-revoke-a-key","depth":3,"children":[]}]},{"title":"Manage JWT signing keys","slug":"manage-jwt-signing-keys","depth":2,"children":[{"title":"Rotate or disable a JWT key","slug":"rotate-or-disable-a-jwt-key","depth":3,"children":[]}]},{"title":"Register a 1auth app","slug":"register-a-1auth-app","depth":2,"children":[{"title":"Create an app and verify domains","slug":"create-an-app-and-verify-domains","depth":3,"children":[]},{"title":"Configure the RP ID and authorized origins","slug":"configure-the-rp-id-and-authorized-origins","depth":3,"children":[]},{"title":"Connect the client","slug":"connect-the-client","depth":3,"children":[]}]},{"title":"Manage the team","slug":"manage-the-team","depth":2,"children":[{"title":"Invite a teammate","slug":"invite-a-teammate","depth":3,"children":[]}]},{"title":"Sponsorship and monetization","slug":"sponsorship-and-monetization","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"rhinestone","siteName":"Rhinestone","title":"Dashboard - Rhinestone","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-22T08:57:09.004Z","originalFileLocation":"home/resources/dashboard.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";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=\"dark\"}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=\"Access the Rhinestone Dashboard and manage projects, credentials, and team access.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Rhinestone\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_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/rhinestone/3aadr-awyf35tysK/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/rhinestone/3aadr-awyf35tysK/_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/rhinestone/3aadr-awyf35tysK/_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/rhinestone/3aadr-awyf35tysK/_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/rhinestone/3aadr-awyf35tysK/_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/rhinestone/3aadr-awyf35tysK/_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/rhinestone/3aadr-awyf35tysK/_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/rhinestone/3aadr-awyf35tysK/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Dashboard - Rhinestone\">\u003cmeta data-mint-head property=\"og:description\" content=\"Access the Rhinestone Dashboard and manage projects, credentials, and team access.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Rhinestone\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.rhinestone.dev/home/resources/dashboard\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://rhinestone.mintlify.site/_mintlify/api/og/v2?division=Resources\u0026amp;title=Dashboard\u0026amp;description=Access+the+Rhinestone+Dashboard+and+manage+projects%2C+credentials%2C+and+team+access.\u0026amp;theme=480304d2cd15a3be6f477401\u0026amp;signature=c085f7f3a1d2811c4cc1fc4366b0d2368994d449a7b861753259b51dad7c59fd\">\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=\"Dashboard - Rhinestone\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Access the Rhinestone Dashboard and manage projects, credentials, and team access.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://rhinestone.mintlify.site/_mintlify/api/og/v2?division=Resources\u0026amp;title=Dashboard\u0026amp;description=Access+the+Rhinestone+Dashboard+and+manage+projects%2C+credentials%2C+and+team+access.\u0026amp;theme=480304d2cd15a3be6f477401\u0026amp;signature=c085f7f3a1d2811c4cc1fc4366b0d2368994d449a7b861753259b51dad7c59fd\">\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/rhinestone/3aadr-awyf35tysK/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Rhinestone\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f41ef\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.rhinestone.dev/home/resources/dashboard\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/home/resources/dashboard.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.rhinestone.dev/#organization\",\"name\":\"Rhinestone\",\"url\":\"https://docs.rhinestone.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/rhinestone/IVpDy9zUkncYAe5u/logo/light.svg?fit=max\u0026auto=format\u0026n=IVpDy9zUkncYAe5u\u0026q=85\u0026s=6868a5854576ff60d371d5fdc0ae55c9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.rhinestone.dev#website\",\"name\":\"Rhinestone\",\"url\":\"https://docs.rhinestone.dev\",\"publisher\":{\"@id\":\"https://docs.rhinestone.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.rhinestone.dev/home/resources/dashboard#webpage\",\"url\":\"https://docs.rhinestone.dev/home/resources/dashboard\",\"name\":\"Dashboard\",\"description\":\"Access the Rhinestone Dashboard and manage projects, credentials, and team access.\",\"dateModified\":\"2026-09-22T08:57:09.004Z\",\"isPartOf\":{\"@id\":\"https://docs.rhinestone.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.rhinestone.dev/home/resources/dashboard#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.rhinestone.dev/home/resources/dashboard#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Resources\",\"item\":\"https://docs.rhinestone.dev/home/resources/supported-chains\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dashboard\",\"item\":\"https://docs.rhinestone.dev/home/resources/dashboard\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.rhinestone.dev/home/resources/dashboard#article\",\"headline\":\"Dashboard\",\"name\":\"Dashboard\",\"description\":\"Access the Rhinestone Dashboard and manage projects, credentials, and team access.\",\"url\":\"https://docs.rhinestone.dev/home/resources/dashboard\",\"mainEntityOfPage\":{\"@id\":\"https://docs.rhinestone.dev/home/resources/dashboard#webpage\"},\"dateModified\":\"2026-09-22T08:57:09.004Z\",\"publisher\":{\"@id\":\"https://docs.rhinestone.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.rhinestone.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Rhinestone\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Rhinestone","nav":{"global":{"anchors":[{"anchor":"Create API Key","icon":"key","href":"https://tally.so/r/wg22x4"}]},"tabs":[{"tab":"Home","groups":[{"group":"Introduction","public":true,"pages":[{"title":"Rhinestone","sidebarTitle":"Introduction","href":"/home/introduction"}]},{"group":"Products","public":true,"pages":[{"title":"Wallets","href":"/home/products/wallets"},{"title":"Transactions","href":"/home/products/transactions"},{"title":"Deposits","href":"/home/products/deposits"},{"title":"Fiat integrations","href":"/home/products/fiat"}]},{"group":"Concepts","public":true,"pages":[{"title":"Intents","href":"/home/concepts/intents"},{"title":"Smart accounts","href":"/home/concepts/smart-accounts"},{"title":"Passkeys","href":"/home/concepts/passkeys"},{"title":"Session keys","href":"/home/concepts/session-keys"}]},{"group":"Resources","public":true,"pages":[{"title":"Supported chains","description":"View the current mainnet and testnet chains and tokens supported by Rhinestone.","href":"/home/resources/supported-chains"},{"title":"Dashboard","href":"/home/resources/dashboard"},{"title":"Pricing","description":"Rates for embedded wallets, transactions, and deposits.","href":"/home/resources/pricing"},{"title":"Self-custody","href":"/home/resources/self-custody"},{"title":"ERC-7579","href":"/home/resources/erc-7579"},{"title":"Changelog","href":"/home/resources/changelog"},{"title":"Audits","href":"/home/resources/audits"}]}]},{"tab":"Wallets","menu":[{"item":"Overview","pages":[{"title":"Overview","href":"/wallets/overview"}]},{"item":"Embedded wallets","pages":[{"title":"Embedded wallets","href":"/wallets/embedded-wallets/overview"}]},{"item":"Session keys","pages":[{"title":"Session keys","href":"/wallets/session-keys/overview"}]},{"item":"Recovery","pages":[{"title":"Recovery","href":"/wallets/recovery/overview"}]},{"item":"Custom signer","pages":[{"title":"Custom signer","href":"/wallets/custom-signer/overview"}]}],"pages":[{"title":"Wallets","href":"/wallets/overview"}]},{"tab":"Transactions","menu":[{"item":"Overview","pages":[{"title":"Overview","href":"/transactions/overview"}]},{"item":"Relaying","pages":[{"title":"Relaying","href":"/transactions/relaying/overview"}]},{"item":"Multichain","pages":[{"title":"Multichain","href":"/transactions/multichain/overview"}]},{"item":"Trading","pages":[{"title":"Trading","href":"/transactions/trading/overview"}]},{"item":"Sponsorship \u0026 monetization","pages":[{"title":"Sponsorship \u0026 monetization","href":"/transactions/sponsorship/overview"}]}],"pages":[{"title":"Transactions","href":"/transactions/overview"}]},{"tab":"Deposits","menu":[{"item":"Overview","pages":[{"title":"Overview","href":"/deposits/overview/overview"}]},{"item":"Onramps","pages":[{"title":"Onramps","href":"/deposits/onramps/overview"}]},{"item":"Crypto","pages":[{"title":"Crypto","href":"/deposits/crypto/overview"}]},{"item":"Exchanges","pages":[{"title":"Exchanges","href":"/deposits/exchanges/overview"}]},{"item":"Headless","pages":[{"title":"Headless","href":"/deposits/headless/overview"}]}],"pages":[{"title":"Deposits","href":"/deposits/overview/overview"}]},{"tab":"Fiat integrations","pages":[{"title":"Fiat integrations","href":"/fiat/overview"}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"basePath":"","title":"Dashboard - Rhinestone","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-CK6QbnxT.js","DynamicMarkdown-BKiHAm_d.js","zoom-image-lightbox-CLQdF-Ar.js","lightbox-handle-r17bVUz3.js"]}