Skip to content

Reframe Wallet-as-a-Service doc around the platform offering - #806

Open
lacrossehub wants to merge 1 commit into
mainfrom
connor/waas-doc-platform-framing
Open

Reframe Wallet-as-a-Service doc around the platform offering#806
lacrossehub wants to merge 1 commit into
mainfrom
connor/waas-doc-platform-framing

Conversation

@lacrossehub

@lacrossehub lacrossehub commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Summary

The WaaS page led with the 2-of-2 root quorum as the defining pattern of Wallet-as-a-Service. This reframes the page around that, and moves co-signing into a new Hardening your platform section.

Changes

Framing. Intro, "What makes Wallet-as-a-Service different," and the transaction authorization flow now describe the baseline model: your platform holds the sole API key, end users authenticate to your platform, your backend approves. Turnkey stays behind your SDK. Added a note that this baseline is custodial, pointing to co-signing and custody models for teams that need verifiable non-custody.

Hardening your platform (new). Six optional controls, ordered by how often they'd apply: end-user co-signing (2-of-2), IP allowlisting, captcha, MFA policies, least-privilege API key scoping, and webhook-based activity monitoring. Each gets a one-line "when to use" and a link to the feature doc.

Implementation: five steps → three. The old Steps 1–3 split tenant mapping, the control model, and sub-org creation across two bullet lists that largely restated each other and the Architecture section above them. Now: create a sub-org per end user (with the end-user authenticator, Delegated Access, and export policy as clearly optional additions), build your integration surface, wire it into your platform flow. The staged 1-of-2 → 2-of-2 setup moved to the co-signing section, where it belongs.

Fact corrections

Checked each hardening claim against the underlying feature docs:

  • IP allowlisting applies to the parent org only — sub-orgs don't inherit it and can't define their own, so requests authenticated against a sub-org (including your platform's transaction approvals) aren't evaluated. Added the fail-closed footgun (enabling with no CIDRs blocks all traffic) and corrected the tier to Enterprise clients on Scale or higher.
  • Captcha enforcement is automatic only for @turnkey/react-wallet-kit v2.4.0+. Relevant here, since WaaS platforms typically build their own UI on @turnkey/core and must integrate Turnstile themselves.
  • MFA policies are per-user via CreateMfaPolicy with an ordered list of required steps; added the session and OAuth factors.
  • ACTIVITY_UPDATES covers the parent plus all sub-orgs from a single parent-owned endpoint.
  • Export under 2-of-2 — explained the mechanism: root actions bypass the policy engine, but an explicit policy can let an individual root user act alone, which is what keeps the export escape hatch working.

Also

  • Moved waas-tx-auth.png (the co-signing sequence diagram) from Architecture into the co-signing section it actually illustrates.
  • Replaced the broken /get-started/about-turnkey#activities anchor — that page has no activities heading. Now points to #core-concepts.
  • All other internal links verified to resolve to existing files.

Open question

The "When to use" row "You want per-user key isolation with no shared state" isn't WaaS-specific — consumer and business wallets get sub-org isolation too. Happy to drop it if reviewers agree it dilutes the table.

🤖 Generated with Claude Code

The page led with the 2-of-2 root quorum as the defining pattern of
Wallet-as-a-Service. That's one configuration, not the offering: the
distinguishing trait is owning the developer surface. Reframe the intro,
"what makes this different," and the transaction flow around the baseline
single-API-key model, and move co-signing into a new "Hardening your
platform" section alongside IP allowlisting, captcha, MFA, least-privilege
key scoping, and webhook monitoring.

Collapse Implementation from five steps to three. The old Steps 1-3 split
tenant mapping, the control model, and sub-org creation across two bullet
lists that restated each other and the Architecture section above them.

Fact corrections against the feature docs:

- IP allowlisting applies to the parent org only; sub-org-authenticated
  requests (including platform transaction approvals) are not evaluated.
  Note the fail-closed footgun and correct the tier to Enterprise/Scale+.
- Captcha enforcement is automatic only for react-wallet-kit v2.4.0+;
  platforms building on @turnkey/core must integrate Turnstile themselves.
- MFA policies are per-user via CreateMfaPolicy with ordered steps; add
  the session and OAuth factors.
- ACTIVITY_UPDATES covers parent plus all sub-orgs from one parent-owned
  endpoint.
- Explain why export survives a 2-of-2 quorum: root actions bypass the
  policy engine, but an explicit policy lets a single root user act alone.

Add a note that the baseline model is custodial, move the co-signing
sequence diagram to the section it illustrates, and replace the broken
/get-started/about-turnkey#activities anchor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant