Subscription Import: Link, QR, Updating
Subscription import works almost the same across all clients — grasp the mechanics once and you can explain it to a client on any app. Below are three ways to load a subscription, how updating works, and why the client almost never has to reinstall the profile. Substitute your subscription link into the builder above.
This material is about engineering your own infrastructure and is educational in nature. You are responsible for complying with the laws of your own jurisdiction.
What a subscription link is
The client gets one link from your bot, of the form https://sub.your-domain.com/xxxxxxxx. This isn't a single server — it's the address at which the current list of all your servers for this client lives. The app fetches it and pulls the configs. The magic is that you change the contents at the link on your side (in the panel), and on the client's side an update pulls in the new version — without touching the link itself.
That's exactly why the client almost never has to reinstall anything: you changed a node's IP, added a server, tweaked routing — the client just updates the subscription and gets the fresh version.
Method 1: by link from the clipboard
The most common one. It works the same in all clients:
- The client copies the link from the bot (usually the bot has a "Copy" button).
- In the app they tap + (plus) → Add from clipboard. The app picks up the link from the clipboard itself.
- The profile appears with a list of servers.
If there's no "from clipboard" button — there's "Import by link" / "Add from URL," where the link is pasted manually.
Method 2: by QR code
Convenient when the client opens the bot on a computer but installs the VPN on the phone — no point forwarding the link. You give a QR as an image, and the client:
- In the app taps + → Scan QR.
- Points the camera at the code.
- The profile is added automatically.
A QR is the same subscription link, just encoded into an image. Many bots can serve it with a "Show QR" button — worth enabling, it removes the "how do I move it to the phone" questions.
Method 3: by config file (desktop)
On desktop clients (Hiddify, NekoBox) you can drag and drop a config file into the app window or import via the menu. The method is niche — for most the link is simpler. It comes in handy when a config is distributed not via a subscription service but as a file.
Updating the subscription — the key mechanic
This is what's worth explaining to the client right away, because it removes the panic at the first outage.
When you've changed something on your side (swapped a burned IP, added a node, tweaked rules) — the client doesn't need to delete and re-create the profile. It's enough to:
- In the app open the profile → "Update subscription" (Update subscription / pull down to refresh).
- The fresh list of servers gets pulled in via the same link.
Many clients (Happ, Hiddify) update the subscription themselves on a schedule — then the client does nothing at all, the fresh version arrives automatically. Check that a reasonable auto-update interval is set in the subscription template — this saves you "server down" tickets after every IP rotation.
When to reinstall the profile after all
Rarely, but it happens: if you changed the subscription format (say, switched to a json subscription) or the client caught a desync, a plain "Update" may not rebuild everything. Then — delete the profile and re-add by link. This rebuilds the config from scratch, including routing. In practice it's needed rarely, but put it in the support checklist as the last step.
A short script for support
Hand the client this sequence — it closes 90% of import problems:
- Copy the link from the bot.
- In the app: + → add from clipboard (or by link / QR).
- No servers appeared — tap "Update subscription."
- Still empty — delete the profile, re-add by link.
- Didn't help — to support: which app, what exactly is on screen.
The mechanics of each client individually we cover in the articles on Happ, Hiddify, v2rayTun, and Streisand. And how to make the client see human-readable labels in the list instead of VLESS | TCP | REALITY — in the article "Server Description: Hints to the Client in Happ/INCY."