The Fasty API PRO
The API lets your own code talk to your store. It speaks JSON over HTTPS, so it works from LSL scripts, websites, Discord bots, spreadsheets or anything else that can make a web request.
What you can build
| You want to… | Use | Guide |
|---|---|---|
| Unlock a game or HUD only for buyers | GET /customers/{key}/purchases | Unlock something for buyers |
| Give points to the winner of a round | POST /customers/{key}/points | Reward players with points |
| Send a prize to a contest winner | POST /products/{id}/send | Send prizes to winners |
| Keep your sales in a database or sheet | GET /sales | Keep a copy of your sales |
| Change hundreds of prices at once | PATCH /products | Change many prices at once |
| Show your newest products on a website | GET /products | Products |
Is this for you?
You don't need the API to run your store: everything here also exists in the panel. It's for when you want your own code to do it.
Your first request
Five minutes, and you'll know your key works.
Create a key. In the panel, open Store settings → API and click New key. Give it a name and keep the default permissions, which can only read. Copy the key now: it starts with
fsk_and is shown only once.Make a request. Open a terminal and run this, with your key in place of
fsk_…:bashcurl https://api.fastyvendor.com/api/v1/me \ -H "Authorization: Bearer fsk_…"Read the answer. You get your store, what the key can do and how much of your limits you've used today:
json{ "store": { "id": "st_k4x9m2p7q1zw8c", "name": "Luna Couture", "plan": "pro", "pro_until": "2027-10-05T19:30:28.348Z", "suspended": false }, "key": { "id": "ak_7mq2vh3kd9ps4x", "name": "My card game", "hint": "a1b2", "scopes": ["products:read", "sales:read"] }, "access": "full", "limits": { "reads_per_minute": 600, "writes_per_minute": 120 }, "usage": { "day": "2026-11-04", "requests": 1, "deliveries": 0 } }
Now list your products
The same request in four languages. Set your key in FASTY_KEY first, so it never sits in your code.
curl "https://api.fastyvendor.com/api/v1/products?limit=5" \
-H "Authorization: Bearer $FASTY_KEY"const res = await fetch('https://api.fastyvendor.com/api/v1/products?limit=5', {
headers: { Authorization: `Bearer ${process.env.FASTY_KEY}` },
})
const { items } = await res.json()
for (const product of items) console.log(product.name, product.price)import os, requests
res = requests.get(
"https://api.fastyvendor.com/api/v1/products",
params={"limit": 5},
headers={"Authorization": f"Bearer {os.environ['FASTY_KEY']}"},
)
for product in res.json()["items"]:
print(product["name"], product["price"])string KEY = "fsk_…"; // this script must be no-copy and no-modify
default
{
touch_start(integer n)
{
llHTTPRequest("https://api.fastyvendor.com/api/v1/products?limit=5",
[HTTP_CUSTOM_HEADER, "Authorization", "Bearer " + KEY,
HTTP_BODY_MAXLENGTH, 16384], "");
}
http_response(key id, integer status, list meta, string body)
{
integer i;
for (i = 0; i < 5; ++i)
{
string name = llJsonGetValue(body, ["items", i, "name"]);
if (name != JSON_INVALID) llOwnerSay(name);
}
}
}Where to go next
- Keys and permissions: what each permission opens, and how to keep a key safe.
- How requests work: pages, safe retries and the format of dates and prices.
- Using the API from LSL: complete scripts, and what is different in Second Life.
- Errors and Limits: what can go wrong, and how to handle it.
- API Reference: every route, with examples and real responses.
What the API can't do
No key can move L$. Refunds, sending L$ and profit shares stay in the panel, so a leaked key can never empty your store. Your team, plan and account aren't in the API either.