Velvet Live quickstart
For cam sites: let tips from your viewers drive your performers' Velvet toys, the way Lovense's Cam Kit does. Connect a test model's toy and play tips from your site, in the sandbox, in about fifteen minutes.
Dev hosts (the sandbox): API https://devlive-api.thinkbeyondcorporate.com/v1, panel and live.js on https://devlive.thinkbeyondcorporate.com. Production hosts come with your live key.
1. Get a test secret key
- Sign up or log in here with a Velvet account.
- On the dashboard, create your test app and a secret key (
vr_sk_test_…). It's shown once. It's for your server only: never put it in a page. - Send us the app id (, pick “Cam site”). We enable it for Velvet Live (until then every call answers
403 not_a_partner).
You can try everything below without writing code first: sign in to the sandbox with the same Velvet account.
2. Mint a model token (your server)
One token per model. The same modelId always returns the same token until you rotate it, so you can call this every time the model opens her page.
curl -X POST https://devlive-api.thinkbeyondcorporate.com/v1/partner/models/token \
-H "Authorization: Bearer vr_sk_test_…" \
-H "Content-Type: application/json" \
-d '{"modelId":"model-4821","modelName":"Mia"}'
{ "result": true, "code": 200, "message": "ok",
"data": { "mId": "model-4821", "modelToken": "vlm_test_…", "mToken": "vlm_test_…" } }
The model token is a bearer secret for that model's toy: send it only to that model's own page. Lovense's getToken form (mInfo={"mId","mName"}, form or JSON) works too.
3. Show the panel on the model's page
<div id="velvet-panel"></div>
<script src="https://devlive.thinkbeyondcorporate.com/sdk/v1/live.js"></script>
<script>
VelvetLive.initCamApi(MODEL_TOKEN); // from your server, step 2
VelvetLive.mount('#velvet-panel'); // the toy panel, in an iframe with allow="bluetooth"
</script>
The model pairs her toy in the panel (Chrome or Edge on a computer or Android) and sees what plays, with a big Stop. See Iframe & browsers if your page sets a Content Security Policy or Permissions Policy.
4. Send tips
Pick one, or both:
From the model's page (like Lovense receiveTip), when your page already sees each tip:
VelvetLive.receiveTip('raj_k', 25, '#wave'); // tipper, tokens, note
From your server (verified; idempotent on your own tip id):
curl -X POST https://devlive-api.thinkbeyondcorporate.com/v1/partner/tips \
-H "Authorization: Bearer vr_sk_test_…" \
-H "Idempotency-Key: tip-99812" \
-H "Content-Type: application/json" \
-d '{"modelId":"model-4821","tipper":"raj_k","amount":25,"note":"#wave"}'
202 means taken (held: true if the panel is open but the toy is off: it plays when the toy is back). 409 toy_offline means no panel is open: nothing was recorded, and a retry with the same key is safe.
5. Show the menu to viewers
curl https://devlive-api.thinkbeyondcorporate.com/v1/partner/models/model-4821/menu \
-H "Authorization: Bearer vr_sk_test_…"
Or await VelvetLive.getSettings() on the model's page. The shape is the tip menu.
Next
- Server API: every route, rotation and status.
- live.js: events for your own UI (toy status, queue, now playing).
- Errors.