Server API

Base URL (dev): https://devlive-api.thinkbeyondcorporate.com/v1. Every call: Authorization: Bearer vr_sk_test_… (your secret key, server only). JSON in and out.

Responses. Success is Lovense's envelope: { "result": true, "code": <status>, "message": "ok", "data": … }. Errors: { "statusCode", "message": <code>, "error" }; branch on message (errors).

Models are keyed on your own model id: a model token never goes in a URL.

Scales. Strength is Lovense's vLevel 0–20; times are seconds.

Limits. 600 calls a minute per key, 3,000 per IP (429 rate_limited).

POST /partner/models/token

Mint or return a model's token (Lovense getToken).

Body
modelIdyour id for the model, 1–191 chars
modelNamedisplay name, 1–120 chars

Lovense form also accepted: mInfo ({"mId","mName"}, JSON string or object) and dToken (the key, instead of the header).

200 → data: { mId, modelToken, mToken } (mToken = modelToken, for Lovense parsers). Same token on every call until rotated.

POST /partner/models/{modelId}/rotate

A new token; the old one dies at once (its panel and live.js are disconnected). 200 → data: { mId, modelToken, mToken }. Use it if a token leaked; then reload the model's page with the new one.

POST /partner/tips

A verified tip. Header Idempotency-Key (required, 1–100 visible ASCII): your own id for the tip. A retry with the same key is answered duplicate: true and never plays twice.

Body
modelId or modelTokenwhich model (send exactly one)
tipperdisplay name, 1–120 chars
amounttokens, whole number ≥ 1
noteoptional, ≤ 255 chars; a #tag can fire a special
isAnonoptional boolean
AnswerMeaning
202 {accepted, duplicate, tipId, action, held}Taken. action: what it plays (kind, vLevel, time s, rule; null = below the menu). held: true: the panel is open but the toy is off; it plays when the toy is back
409 toy_offlineNo panel open for this model. Nothing recorded; retry with the same key once the model is online

GET /partner/models/{modelId}/menu

The model's tip menu (Lovense getSettings shape): data: { mId, version, levels, specials, perks }. See the tip menu.

GET /partner/models/{modelId}/status

data: { mId, panelConnected, toyOnline, battery, toyModel, queueLength, paused, held }. Good for a "toy online" badge on the model's profile.

Test and live

Test keys (vr_sk_test_…) reach test models only, live keys live models only (403 wrong_environment). Test tokens start vlm_test_, live ones vlm_live_; only test models may use the virtual toy.