Open the panel

Customers PRO ​

A customer is identified by their avatar UUID. GET /customers/{key}/purchases is the route most games and HUDs use.

Did this avatar buy it? ​

GET/customers/{key}/purchases
Scope customers:readLimit read (600 per minute)

What the avatar owns from your store: bought for themselves or received as a gift, refunds excluded. Filter by product_id (or several) or group_id to check a license in a game or HUD. Older versions of a product count too.

This is the license check. It answers 200 with purchased: false when the avatar does not own it, never an error, so a stranger touching your object is a normal answer.

Ask for limit=1 when you only need yes or no.

See Unlock something for buyers.

Path

NameTypeRequiredDescription
keystringYesAvatar UUID (key).

Query

NameTypeRequiredDescription
product_idstringNoOne product id, or several separated by commas (up to 50).
group_idstringNoAny product of this group of variations.
cursorstringNoThe next_cursor of the previous page.
limitintegerNoPage size (default 50, max 200).

Example

bash
curl "https://api.fastyvendor.com/api/v1/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d/purchases?product_id=prd_mxbjm9xtpchmet&limit=1" \
  -H "Authorization: Bearer $FASTY_KEY"
js
const res = await fetch('https://api.fastyvendor.com/api/v1/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d/purchases?product_id=prd_mxbjm9xtpchmet&limit=1', {
  headers: {
    Authorization: `Bearer ${process.env.FASTY_KEY}`,
  },
})
const data = await res.json()
python
import os, requests

res = requests.get(
    "https://api.fastyvendor.com/api/v1/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d/purchases?product_id=prd_mxbjm9xtpchmet&limit=1",
    headers={"Authorization": f"Bearer {os.environ['FASTY_KEY']}"},
)
data = res.json()
lsl
llHTTPRequest(API + "/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d/purchases?product_id=prd_mxbjm9xtpchmet&limit=1",
    [HTTP_CUSTOM_HEADER, "Authorization", "Bearer " + KEY,
     HTTP_BODY_MAXLENGTH, 16384],
    "");

Response: 200 OK

json
{
  "avatar_key": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
  "purchased": true,
  "count": 1,
  "items": [
    {
      "sale_id": "10f87f28-3705-420d-ae55-8087666e3540",
      "product": {
        "id": "prd_mxbjm9xtpchmet",
        "name": "Riot Boots"
      },
      "status": "received",
      "amount": 0,
      "gift_from": null,
      "created_at": "2026-11-04T18:27:03.573Z"
    }
  ],
  "next_cursor": "b:1793816823573000~10f87f28-3705-420d-ae55-8087666e3540"
}

List customers ​

GET/customers
Scope customers:readLimit read (600 per minute)

Top spenders first.

Query

NameTypeRequiredDescription
qstringNoName or avatar UUID.
cursorstringNoThe next_cursor of the previous page.
limitintegerNoPage size (default 50, max 200).

Example

bash
curl "https://api.fastyvendor.com/api/v1/customers?limit=2" \
  -H "Authorization: Bearer $FASTY_KEY"
js
const res = await fetch('https://api.fastyvendor.com/api/v1/customers?limit=2', {
  headers: {
    Authorization: `Bearer ${process.env.FASTY_KEY}`,
  },
})
const data = await res.json()
python
import os, requests

res = requests.get(
    "https://api.fastyvendor.com/api/v1/customers?limit=2",
    headers={"Authorization": f"Bearer {os.environ['FASTY_KEY']}"},
)
data = res.json()
lsl
llHTTPRequest(API + "/customers?limit=2",
    [HTTP_CUSTOM_HEADER, "Authorization", "Bearer " + KEY,
     HTTP_BODY_MAXLENGTH, 16384],
    "");

Response: 200 OK

json
{
  "items": [
    {
      "key": "b2c3d4e5-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
      "name": "Nyxie Moonlight",
      "spent": 13218,
      "purchases": 14,
      "first_purchase_at": "2023-12-08T02:40:17.000Z",
      "last_purchase_at": "2026-01-06T00:51:11.000Z"
    },
    {
      "key": "c3d4e5f6-7a8b-4c9d-8e1f-2a3b4c5d6e7f",
      "name": "Kai Rivers",
      "spent": 13189,
      "purchases": 11,
      "first_purchase_at": "2024-04-08T22:00:38.000Z",
      "last_purchase_at": "2025-10-06T21:47:40.000Z"
    }
  ],
  "next_cursor": "13189~394a100a-8583-47b2-8eba-4087f3a1935b"
}

Get a customer ​

GET/customers/{key}
Scope customers:readLimit read (600 per minute)

Path

NameTypeRequiredDescription
keystringYesAvatar UUID (key).

Example

bash
curl "https://api.fastyvendor.com/api/v1/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d" \
  -H "Authorization: Bearer $FASTY_KEY"
js
const res = await fetch('https://api.fastyvendor.com/api/v1/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d', {
  headers: {
    Authorization: `Bearer ${process.env.FASTY_KEY}`,
  },
})
const data = await res.json()
python
import os, requests

res = requests.get(
    "https://api.fastyvendor.com/api/v1/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
    headers={"Authorization": f"Bearer {os.environ['FASTY_KEY']}"},
)
data = res.json()
lsl
llHTTPRequest(API + "/customers/a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
    [HTTP_CUSTOM_HEADER, "Authorization", "Bearer " + KEY,
     HTTP_BODY_MAXLENGTH, 16384],
    "");

Response: 200 OK

json
{
  "key": "a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
  "name": "Luna Caelum",
  "spent": 3382,
  "purchases": 87,
  "refunded": 5,
  "gifts_sent": 3,
  "gifts_received": 0,
  "points": 21,
  "first_purchase_at": "2026-10-05T18:24:26.949Z",
  "last_purchase_at": "2026-11-04T18:02:55.895Z"
}

The customer object ​

FieldTypeDescription
keystringAvatar UUID (key).
namestringThe name.
spentintegerL$ spent in the store (refunds excluded). From -9,007,199,254,740,991 to 9,007,199,254,740,991.
purchasesintegerHow many purchases. From -9,007,199,254,740,991 to 9,007,199,254,740,991.
first_purchase_atstring or nullISO 8601 date and time (UTC), or null.
last_purchase_atstring or nullISO 8601 date and time (UTC), or null.