roblox keysystem
Vine KeySystem
Get started
Sign up, create a project with your prefix, then generate keys.
Welcome back, 🌿
Projects
Keys
Keys are minted automatically when players finish checkpoints — there is no manual minting. New keys for this project require 0 checkpoint(s).
Player key page:
Need a key programmatically? Call POST /v1/generate with your owner login token (see Guide).
Pricing
Start free. Upgrade when your hub grows.
Free
$0
- 500 keys / month
- 1 project
- 10k verify / month
- 30 rpm
- 1 checkpoint
- 32kb per request
Plus
$5
- 50k keys / month
- 5 projects
- 200k verify / month
- 120 rpm
- 5 checkpoints
- 128kb per request
Ultra
$30
- 1M keys / month
- 30 projects
- 2M verify / month
- 600 rpm
- 15 checkpoints
- 256kb per request
Guide
How to run your hub on Vine — checkpoints, keys, and the loader.
For players — getting a key
- Open your hub's key page (
/key.html?project=…). - Press Start and complete each checkpoint (Linkvertise / LootLabs / Work.ink).
- Copy the key and paste it into the script's key prompt. Done.
- Paste it into the script's key prompt. Done.
For developers — setting up a project
- Create a project in Get Started — the prefix becomes your brand (
WOLF_HUB-…). - Click Add checkpoint — Vine shows its redirect URL. Create your ad around it: in the provider dashboard make a new ad (e.g. work.ink/1212/vine) with the redirect URL as Target / Destination.
- Paste the finished ad link back into the checkpoint, repeat for 2, 3…, set the key expiry (0 = lifetime), and save. After the final step the player gets the key — nothing to configure there.
- Share your key page URL (
/key.html?project=YOUR_ID) in your Discord / script. - Need keys without checkpoints (testing, staff, premium)? Call
POST /v1/generatewith your owner login token — same math keys, no UI, no storage. - Verify keys from your loader with
GET /v1/verify:
local HttpService = game:GetService("HttpService")
local res = request({
Url = "https://vinekey.space/v1/verify?project=" .. HttpService:UrlEncode("YOUR_PROJECT_ID"),
Method = "GET",
Headers = {
["x-api-key"] = "vine_YOUR_PROJECT_KEY",
["x-project-id"] = "YOUR_PROJECT_ID",
["x-key"] = Key,
["x-hwid"] = gethwid and gethwid() or "unknown",
},
})
local data = HttpService:JSONDecode(res.Body)
if data.valid then print("welcome") else print(data.reason) end
Full loader with key prompt: vine_keysystem.lua
Fast loader — verify + auto-run
Set your hub's Main script in Project settings, then ship this loader. It verifies the key with GET /v1/verify, fetches your script with GET /v1/script?key= (valid keys only), and runs it — calling your callback after:
local Vine = loadstring(game:HttpGet("https://vinekey.space/vine_loader.lua"))()
Vine.Config.ProjectId = "YOUR_PROJECT_ID"
Vine.Config.ApiKey = "vine_YOUR_PROJECT_KEY"
Vine.Prompt(function(ok, err)
if not ok then return end
end)
Loader source: vine_loader.lua · the UI is draggable, closable, has a Get Key button (copies the key-page link with the player's HWID prefilled), and rate-limits attempts. No script set? The loader reports no_script_set — use the verify-only flow instead.
About + API
Endpoints
POST /v1/generate (owner JWT + projectId, expiresInHours, hwid?) → { key }
GET /v1/verify?key= (x-api-key + x-project-id + x-hwid) → { valid }
GET /v1/status?key= (lightweight poll, no quota burn)
GET/PATCH /v1/projects (owner JWT — checkpoints, expiry defaults)
POST /v1/checkpoint/start · GET /v1/checkpoint/go · GET /v1/checkpoint/return · POST /v1/checkpoint/redeem
GET /v1/project-info?project= (public key-page card) · GET /v1/usage
GET /v1/script?key= (x-api-key + x-project-id — main script for valid keys only)
LuaU: vine_loader.lua (verify + auto-run) · vine_keysystem.lua (verify only) · embed widget