Soul
AgentConsoleThe loopPress itDevelopers
Developers

Try it end to end.

Install it, render it, and watch the engine work on real signal. Nothing here is a mockup.

One embed, or one command.

paste this
<div id="soul"></div>
<script src="https://www.soulverified.com/sdk.js"></script>
<script>
  Soul.init({
    partner: 'YOUR_SLUG',
    key: 'YOUR_KEY',
    user: currentUser.id,
    city: 'New York',
    accent: '#7fd0c0'
  });

  Soul.Community({ el: '#soul' });
</script>
or scaffold the whole thing
curl -fsSL https://www.soulverified.com/install | sh

Detects your framework and writes the component, the env file and the README.

or write no javascript at all
<script src="https://www.soulverified.com/sdk.js"></script>
<div data-soul partner="YOUR_SLUG" data-user="123" data-city="New York"></div>

For Webflow, Squarespace, Framer, a CMS field. Anywhere you can paste HTML.

or hand it to your coding agent
set up https://www.soulverified.com/SKILL.md

Paste into any coding agent. It reads the API and wires it up. No key needed.

Every method, running on this page.

The same sdk.js you install, calling the same endpoints your app would.

loading sdk.js
Oura
run it
// pick a method. the real request and the real response land here.
your callbacksSoul.on('rsvp', fn)
nothing yet. rsvp inside the tab on the left and it fires here.

One script tag. The whole layer.

Soul.Community({ el })The full tab, inline
Soul.present()The daily deck, over your app
Soul.open() / .close()The same tab, as an overlay
Soul.badge({ el })A live count for your nav
Soul.events()The board as JSON
Soul.rsvp(id, going)Commit without our UI
Soul.checkin(id)Did they turn up
Soul.identify(user, { tags })Send your own signal
Soul.connect(source)The real consent screen
Soul.host({ title, when })Host your own, or a collab
Soul.on(event, fn)Know what your users did
POST /api/embed/webhookYour backend, without polling

Full referenceTypesAgent install

The numbers, before the pitch.

bundlemeasured live
dependenciesNone
typessoul.d.ts
failure modeResolves, never rejects
rate limits60 / 40 / 30 / 20 / 10 per min
authKey in the body or query
isolationRendered in an iframe
data outOne user id

It looks like whoever installs it.

Every one of these is the same embed reading a different brand. Yours would sit here too.

Ouramatched to your rhythm
Lightyour offline circle
Whooppeople who push like you
Spotifymatched on your artists
Stravamatched on your pace

Watch it match, and check our arithmetic.

step 1 · the signal

Switch on what your app already knows.

Your users connect a source, or you send the signal server-side. Soul stores the derived tags, never the raw data.

loading sources…

what Soul derives

Switch on a source.

step 2 · the matching

The people they would click with.

Switch on a source to run the engine.

No matches yet.

No black box, and nothing trained on your users.

One user id goes in. Derived tags come back, never raw records. The whole data and security posture, including what we do not have, is in the docs.

Ready to give your users each other?

Book a demo →
© 2026 The Soul Company, Inc.
PricingDocsPrivacyTermsDPABook a demo