Read your affiliate record, referrals, commissions and payouts, change your payout settings and request a payout. Every endpoint acts on the affiliate account that owns the API token.
Create a token in Account, then Developers, and give it the scopes the endpoints below need. An account that is not an affiliate gets 404 from every endpoint except signup.
| Endpoint | Scope | Description |
|---|---|---|
GET /affiliates/me/ | affiliates:read | Your affiliate record, balance and referral link |
GET /affiliates/referrals/ | affiliates:read | Accounts that signed up through your link |
GET /affiliates/commissions/ | affiliates:read | Commissions earned on your referrals' payments |
GET /affiliates/payouts/ | affiliates:read | Payouts requested and paid |
PATCH /affiliates/settings/ | affiliates:update | Change payout method, PayPal email, Stripe account or minimum payout amount min_payout_amount ≥ 10.00 |
POST /affiliates/request-payout/ | affiliates:create | Request a payout of your balance once it reaches your minimum. Only one pending payout at a time. |
POST /affiliates/signup/ | affiliates:create | Join the affiliate program. Send payout_method (paypal or stripe) with paypal_email or stripe_account_id. |
The referrals, commissions and payouts lists are paginated: each response has count, next, previous and results. Use page to move through them and page_size to change how many items each page holds. Money values are returned as decimal strings. page_size: 25 (default), 100 (max)
curl -X GET "https://admin.vps.org/api/v1/affiliates/me/" \
-H "Authorization: Bearer YOUR_API_TOKEN"
import requests
headers = {"Authorization": "Bearer YOUR_API_TOKEN"}
base = "https://admin.vps.org/api/v1/affiliates"
me = requests.get(f"{base}/me/", headers=headers).json()
print(me["balance"], me["total_earned"])
# Walk every page of commissions
url = f"{base}/commissions/?page_size=100"
while url:
page = requests.get(url, headers=headers).json()
for c in page["results"]:
print(c["created_at"], c["amount"], c["status"])
url = page["next"]
const res = await fetch('https://admin.vps.org/api/v1/affiliates/me/', {
headers: { 'Authorization': 'Bearer YOUR_API_TOKEN' }
});
const me = await res.json();
console.log(me.balance, me.referral_url);
{
"uuid": "9f2c4e7a1b3d4c5e8f6a7b8c9d0e1f2a",
"user_email": "you@example.com",
"referral_code": "AB12CD34",
"referral_url": "https://vps.org/?ref=AB12CD34",
"status": "active",
"commission_rate": "20.00",
"cookie_days": 90,
"payout_method": "paypal",
"paypal_email": "you@example.com",
"stripe_account_id": null,
"min_payout_amount": "10.00",
"balance": "42.50",
"total_earned": "142.50",
"total_paid": "100.00",
"created_at": "2026-09-01T12:00:00Z"
}
| Field | Type | Description |
|---|---|---|
status | string | pending, active, suspended or terminated. Only active affiliates can request payouts. |
commission_rate | decimal string | Commission as a percentage, not a fraction 20.00 = 20% |
cookie_days | integer | How many days a click on your link is remembered |
balance | decimal string | Earned and not yet paid out |
total_earned / total_paid | decimal string | Lifetime commission earned and lifetime amount paid out |
Each item in results has these fields:
| Endpoint | Field |
|---|---|
/affiliates/referrals/ | uuid, referred_email, status, created_at |
/affiliates/commissions/ | uuid, referred_email, amount, rate, original_amount, status, created_at |
/affiliates/payouts/ | uuid, amount, method, status, created_at, processed_at, error_message |
Referral status is pending, active or cancelled. Commission status is pending, approved, paid or cancelled. Payout status is pending, processing, completed or failed.
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"uuid": "3b1e9c0d2a4f4e6b8c7d5e4f3a2b1c0d",
"referred_email": "customer@example.com",
"amount": "2.00",
"rate": "20.00",
"original_amount": "10.00",
"status": "approved",
"created_at": "2026-09-20T08:15:00Z"
}
]
}
| 200 | Success |
| 403 | Missing or invalid API token, or the token lacks the required permission |
| 404 | This account is not an affiliate yet |
The machine-readable spec for every endpoint, including these, is below, and you can browse it interactively on the API reference page.
https://admin.vps.org/api/v1/schema/
Rate limit per account: 1000 / hour