Skip to main content
The three surfaces are not tiers of the same thing. They answer different questions about who owns the user’s account and the invest UI, and that is what should decide it — not how much code you feel like writing.

Start with one question

Do your users invest as Cesto users, or as your users?

As Cesto users

They sign in to Cesto (email, Google, or a Solana wallet), and Cesto holds the wallet and the position. Your product supplies the audience and the entry point. → Widgets or the Web SDK.

As your users

They never see Cesto. Your product holds the accounts and the wallets — Cesto-managed or your own — and you build the whole experience. → Server SDK.
If the answer is “as Cesto users”, the follow-up is just where the invest happens: on app.cesto.co in a new tab (Widgets), or in a dialog on your own page with events you can act on (Web SDK).

Decision table

What each surface costs you

You write: an <iframe> tag.You get: a live, themeable basket card — banner, chart, allocation, Invest CTA.You give up: the invest itself happens on app.cesto.co in a new tab, and you get no events back. Content and the invest destination are fixed; only styling is yours.Overview · Usage · Playground

Keys, in one line each

  • Widgets — no key. Any origin can embed them.
  • Web SDK — a publishable cesto_pk_…, safe in your client bundle, valid only on the origins registered for it.
  • Server SDK — a secret cesto_sk_…, server-side only, read- or write-scoped.
Details, and how to request each: API keys.

Still not sure?

Pick the smallest surface that answers your question today. Moving from a widget to the Web SDK is a script tag; moving from the Web SDK to the Server SDK is a new integration but not a migration — positions opened either way are the same positions, readable through positions.list.