VPS.org API

REST API Documentation

Affiliates API

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.

Endpoints 7 endpoints
Base Path /api/v1/affiliates

Endpoints and Token Scopes

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:readYour affiliate record, balance and referral link
GET /affiliates/referrals/affiliates:readAccounts that signed up through your link
GET /affiliates/commissions/affiliates:readCommissions earned on your referrals' payments
GET /affiliates/payouts/affiliates:readPayouts requested and paid
PATCH /affiliates/settings/affiliates:updateChange payout method, PayPal email, Stripe account or minimum payout amount min_payout_amount ≥ 10.00
POST /affiliates/request-payout/affiliates:createRequest a payout of your balance once it reaches your minimum. Only one pending payout at a time.
POST /affiliates/signup/affiliates:createJoin 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)

GET /api/v1/affiliates/me/

Get Your Affiliate Record

Example Request

cURL
Python
JavaScript
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);

Example Response

{
  "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"
}

Response Fields

Field Type Description
statusstringpending, active, suspended or terminated. Only active affiliates can request payouts.
commission_ratedecimal stringCommission as a percentage, not a fraction 20.00 = 20%
cookie_daysintegerHow many days a click on your link is remembered
balancedecimal stringEarned and not yet paid out
total_earned / total_paiddecimal stringLifetime commission earned and lifetime amount paid out

Referrals, Commissions and Payouts

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"
    }
  ]
}

Response Status Codes

200 Success
403 Missing or invalid API token, or the token lacks the required permission
404 This account is not an affiliate yet

OpenAPI Specification

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