XToys webhook
XToys is a cloud relay for many additional toys. Wire ToyControl through XToys to drive devices we do not yet support directly.
XToys is a popular browser-based toy controller with native support for a wide range of devices, and it can also bridge to buttplug.io. It also exposes a webhook that any external app can call to drive an XToys-connected toy.
ToyControl uses this webhook as a fallback for toys we do not yet support directly. If you have a toy that is not in our supported list, XToys may already handle it, and ToyControl can drive it through XToys.
When to use the XToys webhook
- Your toy is not in ToyControl's catalog.
- Your toy is in XToys' supported list (check xtoys.app).
- You are willing to keep an XToys browser tab open during the session.
If your toy is supported by ToyControl directly, do not use XToys. The direct path is faster and does not require a second tab.
What you need
- An XToys account (free).
- Your toy paired in XToys (their own pairing flow).
- ToyControl open in another browser tab.
Step 1: Pair your toy in XToys
- Open xtoys.app in another tab.
- Sign in.
- Use XToys' own connect flow to pair your toy. They have device-specific guides on their site.
Step 2: Get your XToys webhook URL
- In XToys, find your toy in the connected devices list.
- Look for the webhook URL associated with that toy. XToys provides a unique URL per device.
- Copy the URL.
The URL looks like https://xtoys.app/api/... followed by your toy's unique identifier.
Step 3: Add the webhook backend in ToyControl
- In ToyControl, click the + in the Devices section of the sidebar.
- Pick XToys Webhook from the catalog.
- A field appears asking for the webhook URL.
- Paste the URL you copied from XToys.
- Click Save or Add device.
ToyControl adds a row in the sidebar for the XToys-relayed toy. From now on, any source you run (Script Player, Patterns, Game Link, Connect to VR, Remote Control) drives this toy through XToys.
What this does
ToyControl's engine sends intensity values to the XToys webhook URL. XToys receives them and forwards to your toy via their relay. Latency is typically 100-300 ms (similar to The Handy's cloud path).
The two browser tabs (ToyControl and XToys) do not need to talk to each other directly. ToyControl sends to XToys' cloud; XToys' cloud relays to your toy.
Tuning the feel
Use ToyControl's standard controls:
- Multiplier in the bottom bar.
- Speed range max to cap intensity.
- Per-device intensity for fine-tuning.
The webhook path adds a small amount of latency on top of normal Bluetooth, which is unavoidable with cloud relays.
Multi-device sessions
You can mix and match. Pair a Lovense Lush directly in ToyControl, add a Magic Motion Eidolon through XToys Webhook, and run both in the same session. ToyControl handles them in parallel.
Privacy
XToys is a third-party service. Their privacy policy applies to anything you do in their app. Their relay sees the intensity commands that pass through. For maximum privacy, prefer ToyControl-direct supported toys; use the XToys webhook only when you need a toy we cannot reach.
Troubleshooting
Webhook URL does not work
- Make sure you copied the full URL.
- Make sure the toy is still paired in XToys (check their app).
- XToys webhooks are tied to your XToys account; if you signed out of XToys, the URL may stop working.
Toy responds late
- Cloud-relay latency is the cause. There is no fix on the ToyControl side. Use a Bluetooth toy directly if you need lower latency.
Toy works in XToys but not through ToyControl
- Double-check the webhook URL.
- Open the browser console; ToyControl logs webhook errors there.
- Send us a bug report (the Report a bug button in the top-right of the app) with the toy model and the XToys URL pattern.