Sponsorship configuration differs by client. Embedded wallets give Rhinestone a short-lived application token and a separate, single-use sponsorship grant. Custom signer integrations prepare sponsored transactions on a backend that holds the project API key.
Keep private signing keys and API keys on your backend. Never put either
credential in browser or mobile code.
Embedded wallet
Custom signer
Embedded wallets backend
Embedded wallets use two endpoints on your backend:Use the values from the JWT key registered on the Dashboard’s JWT keys screen:@rhinestone/1auth/server reads these values from RHINESTONE_JWT_PRIVATE_KEY, RHINESTONE_INTEGRATOR_ID, RHINESTONE_PROJECT_ID, RHINESTONE_APP_ID, and RHINESTONE_KEY_ID. Its extensionToken() helper normalizes both 1auth request shapes to the canonical intent input before signing.Mount each operation at the URL used by your client. Authenticate your normal application session before minting:requireApplicationSession represents your application’s session validation.This minimal route shape is not a production policy. Configure issuance
checks, bind the requested account to the authenticated session, and
understand the current enforcement boundary described in Policies and
security. Embedded wallets client
Use these endpoint URLs in the shared client initialization:The embedded wallet sends cookies to these endpoint URLs. Your backend still decides how to authenticate the application session and whether to issue a sponsorship grant.The access token identifies the app and project. The embedded wallet needs it for both sponsored and user-paid intents. Only an extension token grants permission to spend sponsorship, and each jti can be redeemed once.Validate the full request before minting. The embedded intent digest is carried in the grant, but it is not currently a downstream product-policy enforcement boundary. See Policies and security before exposing token endpoints to an untrusted client.Run the sponsorship-enabled SDK flow on your backend with its project API key:Authenticate your application’s request, validate the account and transaction, then use this backend SDK instance to prepare, sign, and submit according to your signer architecture. Follow the Custom signer quickstart for account initialization; do not duplicate its signer configuration in a browser-facing sponsorship client.The SDK’s experimental_jwt mode authenticates direct clients. From SDK
2.16.2 it presents the intent extension when it prepares a sponsored
transaction, but Rhinestone does not yet compare the grant’s digest with the
request (see Policies and
security), so a
modified client can spend a grant on a different intent. Do not use it as a
replacement for the backend API-key flow when requesting sponsorship.
Next, choose which fees to sponsor and configure policies and budgets.