> ## Documentation Index
> Fetch the complete documentation index at: https://docs.walletsuite.io/llms.txt
> Use this file to discover all available pages before exploring further.

# WalletSuite

> Wallet infrastructure as a service: one REST API from balances to broadcast, across 80+ chains and any signer. Powers Web3 apps, stablecoin and cross-border payments, fintech backends, and AI agents.

export const WalletSuiteHero = () => {
  const audiences = useMemo(() => ["AI agents", "Web3 apps", "stablecoin flows", "cross-border payments", "fintech backends"], []);
  const [state, setState] = useState({
    i: 0,
    phase: "in"
  });
  useEffect(() => {
    const word = audiences[state.i];
    if (state.phase === "in") {
      const t = setTimeout(() => setState(s => ({
        ...s,
        phase: "out"
      })), 4200);
      return () => clearTimeout(t);
    }
    const outMs = 500 + word.length * 25 + 80;
    const t = setTimeout(() => setState(s => ({
      i: (s.i + 1) % audiences.length,
      phase: "in"
    })), outMs);
    return () => clearTimeout(t);
  }, [state, audiences]);
  const word = audiences[state.i];
  return <section className="ws-hero not-prose" aria-label="WalletSuite hero" suppressHydrationWarning>
      <div className="ws-hero-bg" aria-hidden />
      <div className="ws-hero-grid" aria-hidden />
      <div className="ws-hero-content">
        <h1 className="ws-hero-title">
          The wallet operations layer for
          <br />
          <span className={`ws-word ${state.phase}`} aria-label={word}>
            {word.split("").map((c, idx) => <span key={`${state.i}-${idx}`} className="ws-char" style={{
    ["--i"]: String(idx)
  }} aria-hidden>
                {c === " " ? "\u00A0" : c}
              </span>)}
          </span>
        </h1>
        <p className="ws-hero-sub">
          One REST API from balances to broadcast. Any signer.
        </p>
      </div>
      <style>{`
        .ws-hero{
          --ws-bg:#fafafb;
          --ws-border:rgba(15,23,42,.08);
          --ws-text:#0f172a;
          --ws-text-muted:rgba(15,23,42,.66);
          --ws-grid:rgba(15,23,42,.06);
          --ws-wash-a:rgba(60,190,194,.12);
          --ws-wash-b:rgba(41,218,218,.10);
          --ws-aurora-a:rgba(60,190,194,.26);
          --ws-aurora-b:rgba(94,190,146,.18);
          --ws-accent-1:#1B677D;
          --ws-accent-2:#238587;
          --ws-accent-3:#7c3aed;
          position:relative;overflow:hidden;border-radius:22px;padding:56px 44px;
          background:
            radial-gradient(120% 100% at 0% 0%, var(--ws-wash-a), transparent 55%),
            radial-gradient(120% 100% at 100% 100%, var(--ws-wash-b), transparent 55%),
            var(--ws-bg);
          border:1px solid var(--ws-border);margin:0 0 40px
        }
        .dark .ws-hero, html[data-theme="dark"] .ws-hero{
          --ws-bg:#08090c;
          --ws-border:rgba(255,255,255,.06);
          --ws-text:#fff;
          --ws-text-muted:rgba(255,255,255,.7);
          --ws-grid:rgba(255,255,255,.04);
          --ws-wash-a:rgba(41,218,218,.18);
          --ws-wash-b:rgba(41,218,218,.16);
          --ws-aurora-a:rgba(41,218,218,.40);
          --ws-aurora-b:rgba(111,196,126,.28);
          --ws-accent-1:#1C6CAC;
          --ws-accent-2:#3CBEC2;
          --ws-accent-3:#a78bfa;
        }
        .ws-hero-bg{position:absolute;inset:-30%;background:
          radial-gradient(42% 42% at 22% 30%, var(--ws-aurora-a), transparent 60%),
          radial-gradient(40% 40% at 80% 25%, var(--ws-aurora-b), transparent 60%);
          filter:blur(34px);animation:ws-drift 24s ease-in-out infinite alternate;z-index:0}
        .ws-hero-grid{position:absolute;inset:0;background-image:
          linear-gradient(var(--ws-grid) 1px, transparent 1px),
          linear-gradient(90deg, var(--ws-grid) 1px, transparent 1px);
          background-size:40px 40px;mask-image:radial-gradient(ellipse at 50% 30%, #000 30%, transparent 75%);z-index:0;opacity:.55}
        .ws-hero-content{position:relative;z-index:1}
        .ws-hero-title{font-size:clamp(30px,4.5vw,52px);line-height:1.12;font-weight:700;color:var(--ws-text);margin:0 0 16px;letter-spacing:-0.02em;perspective:600px}
        .ws-hero-sub{color:var(--ws-text-muted);font-size:clamp(14px,1.6vw,18px);margin:0;max-width:680px;line-height:1.5}
        .ws-word{display:inline-block;transform-style:preserve-3d;white-space:nowrap}
        .ws-char{display:inline-block;background:linear-gradient(180deg,var(--ws-accent-1) 0%,var(--ws-accent-2) 50%,var(--ws-accent-3) 100%);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;transform-origin:50% 80%;will-change:transform,opacity,filter}
        .ws-word.in .ws-char{animation:ws-char-in .72s cubic-bezier(.2,.7,.2,1) both;animation-delay:calc(var(--i) * 0.035s)}
        .ws-word.out .ws-char{animation:ws-char-out .5s cubic-bezier(.6,0,.3,1) both;animation-delay:calc(var(--i) * 0.025s)}
        @keyframes ws-char-in{from{opacity:0;transform:translateY(6px) rotateX(-70deg);filter:blur(3px)}to{opacity:1;transform:translateY(0) rotateX(0);filter:blur(0)}}
        @keyframes ws-char-out{from{opacity:1;transform:translateY(0) rotateX(0);filter:blur(0)}to{opacity:0;transform:translateY(-6px) rotateX(70deg);filter:blur(3px)}}
        @keyframes ws-drift{0%{transform:translate3d(0,0,0) rotate(0)}100%{transform:translate3d(-8%,5%,0) rotate(8deg)}}
        @media (prefers-reduced-motion:reduce){.ws-word.in .ws-char,.ws-word.out .ws-char{animation:none;opacity:1;transform:none;filter:none}.ws-hero-bg{animation:none}}
      `}</style>
    </section>;
};

<WalletSuiteHero />

export const WalletSuiteManifesto = () => <section className="ws-banner not-prose" aria-label="WalletSuite architecture promise">
    <div className="ws-banner-wash" aria-hidden />
    <div className="ws-banner-content">
      <p className="ws-banner-line">Agents can't overreach. </p>
      <p className="ws-banner-line">No single party can sign alone. </p>
      <p className="ws-banner-line">Every signature clears policy before it's made. </p>
      <p className="ws-banner-closer">
        That's not a feature. <span className="ws-shimmer">It's the architecture.</span>
      </p>
    </div>
    <style>{`
      .ws-banner{
        --wb-bg:#fafafb;
        --wb-border:rgba(15,23,42,.08);
        --wb-text:#0f172a;
        --wb-text-muted:rgba(15,23,42,.66);
        --wb-wash-a:rgba(60,190,194,.12);
        --wb-wash-b:rgba(41,218,218,.10);
        --wb-aurora-a:rgba(60,190,194,.26);
        --wb-aurora-b:rgba(94,190,146,.18);
        --wb-s1:#1B677D;
        --wb-s2:#7c3aed;
        --wb-s3:#238587;
        position:relative;overflow:hidden;border-radius:22px;padding:44px 44px;
        background:
          radial-gradient(120% 100% at 100% 0%, var(--wb-wash-a), transparent 55%),
          radial-gradient(120% 100% at 0% 100%, var(--wb-wash-b), transparent 55%),
          var(--wb-bg);
        border:1px solid var(--wb-border);
        margin:0 0 40px;
      }
      .dark .ws-banner, html[data-theme="dark"] .ws-banner{
        --wb-bg:#08090c;
        --wb-border:rgba(255,255,255,.06);
        --wb-text:#fff;
        --wb-text-muted:rgba(255,255,255,.82);
        --wb-wash-a:rgba(41,218,218,.18);
        --wb-wash-b:rgba(41,218,218,.16);
        --wb-aurora-a:rgba(41,218,218,.40);
        --wb-aurora-b:rgba(111,196,126,.28);
        --wb-s1:#3CBEC2;
        --wb-s2:#a78bfa;
        --wb-s3:#29DADA;
      }
      .ws-banner-wash{position:absolute;inset:-30%;background:
        radial-gradient(38% 38% at 78% 20%, var(--wb-aurora-a), transparent 60%),
        radial-gradient(36% 36% at 20% 80%, var(--wb-aurora-b), transparent 60%);
        filter:blur(34px);animation:ws-drift 24s ease-in-out infinite alternate;z-index:0;pointer-events:none}
      .ws-banner-content{position:relative;z-index:1;max-width:820px}
      .ws-banner-line{font-size:clamp(20px,2.4vw,30px);font-weight:700;color:var(--wb-text);line-height:1.3;margin:0 0 10px;letter-spacing:-0.015em}
      .ws-banner-closer{font-size:clamp(20px,2.4vw,30px);font-weight:600;color:var(--wb-text-muted);line-height:1.3;margin:24px 0 0;letter-spacing:-0.015em}
      .ws-shimmer{display:inline-block;background:linear-gradient(90deg,var(--wb-s1) 0%,var(--wb-s1) 35%,var(--wb-s2) 50%,var(--wb-s3) 65%,var(--wb-s3) 100%);background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;animation:ws-shimmer-sweep 5.5s linear infinite;font-weight:700}
      @keyframes ws-shimmer-sweep{0%{background-position:220% 0}100%{background-position:-120% 0}}
      @keyframes ws-drift{0%{transform:translate3d(0,0,0) rotate(0)}100%{transform:translate3d(-8%,5%,0) rotate(8deg)}}
      @media (prefers-reduced-motion:reduce){
        .ws-banner-wash{animation:none}
        .ws-shimmer{animation:none;background:linear-gradient(90deg,var(--wb-s1) 0%,var(--wb-s3) 100%);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent}
      }
    `}</style>
  </section>;

<CardGroup cols={2}>
  <Card title="Quickstart" icon="bolt" href="/getting-started/paths" horizontal>
    Pick your integration path: Wallet API (REST), SDK, or AI Agents.
  </Card>

  <Card title="Credentials" icon="key" href="/getting-started/prerequisites/credentials-and-authentication" horizontal>
    How to obtain and use your WalletSuite API key.
  </Card>
</CardGroup>

## Three products, one platform

Whether you need chain data over REST, a typed SDK, or a governed wallet for AI agents, WalletSuite is the wallet layer you don't have to build.

<CardGroup cols={2}>
  <Card title="Wallet API" icon="database" href="/wallet-api/overview">
    One REST API for every wallet operation: balances, token prices, asset metadata, transaction history and status, fee calculation, transaction preparation, simulation, swaps, webhooks, and broadcast across 80+ chains.

    * Reads take any address, with no wallet registration
    * Preparation computes everything and returns the transaction ready to sign
    * Works with any signer, including keys WalletSuite never sees

    [Explore the Wallet API →](/wallet-api/overview)
  </Card>

  <Card title="AI Agents" icon="microchip" href="/ai-agents/overview">
    Give every AI agent a financial identity — authenticated, scoped, and revocable — with policy-gated execution and signing keys the model never sees.

    * Each agent is a scoped, revocable principal
    * Every transaction clears your policy engine before it's signed
    * Non-custodial MPC signing - no single party can sign alone
    * Tamper-evident audit trail for compliance

    [Explore the agent platform →](/ai-agents/overview)
  </Card>

  <Card title="Wallet SDK" icon="code" href="/sdk/overview">
    A typed, non-custodial wallet platform for engineering teams who need multi-chain operations in production without owning the chain infrastructure.

    * Generate wallets, prepare, sign, and broadcast through a single entry point
    * Signer-agnostic: bring your own (KMS / HSM / multisig) or use WalletSuite's hosted MPC signing
    * One normalized schema for balances, prices, fees, and history across chains
    * [Signed webhooks](/webhooks/overview) for reacting to on-chain events in real time

    [Install the SDK →](/sdk/overview)
  </Card>
</CardGroup>

## Governance

<CardGroup cols={2}>
  <Card title="Agents & Authority" icon="user-shield" href="/core-concepts/agents-and-authority">
    An agent is a non-human principal with delegated, revocable authority. The agent proposes. The policy engine authorizes. It never signs alone.
  </Card>

  <Card title="Policy Gates" icon="traffic-light" href="/core-concepts/policy-gates">
    Deny-by-default allowlist rules: typed operation types, contract and method pinning, per-transaction amount caps, and expiring rules. Evaluated before any key is touched.
  </Card>

  <Card title="Execution Levels" icon="sliders" href="/ai-agents/execution-levels">
    Read, prepare, execute, governed autonomous. Each agent gets only the capability its tool profile and token scopes grant.
  </Card>

  <Card title="Structured Errors" icon="message-exclamation" href="/core-concepts/structured-errors">
    Every error includes a category, code, and required action. Agents recover programmatically, not by guessing.
  </Card>
</CardGroup>

See also: [Architecture](/core-concepts/architecture) and [Transaction Lifecycle](/core-concepts/transaction-lifecycle) for the deeper system view.

## Security

WalletSuite is non-custodial - no single party can move funds alone.

* **Non-custodial MPC threshold signing** - no single party can sign alone, no full private key ever exists, and keys never enter the model. See the [trust model](/security/overview#trust-model).

<WalletSuiteManifesto />

## Support

<CardGroup cols={2}>
  <Card title="Website" icon="globe" href="https://walletsuite.io/">
    [walletsuite.io](https://walletsuite.io/)
  </Card>

  <Card title="Email" icon="envelope" href="mailto:support@walletsuite.io">
    [support@walletsuite.io](mailto:support@walletsuite.io)
  </Card>

  <Card title="GitHub" icon="github" href="https://github.com/walletsuite">
    Issues, discussions, and source
  </Card>

  <Card title="X" icon="x-twitter" href="https://x.com/WalletSuite_">
    Updates and announcements
  </Card>
</CardGroup>
