Follow Order System
中文 EN Login

API Documentation

Upload follow orders and query status with your API Key. All requests need the header X-API-Key: 你的KEY

🔑 Authentication

Every request must include your key. Invalid/disabled keys return 401.

X-API-Key: fk_你的key

Auth failure

HTTP 401
{"detail": "Invalid or inactive API key"}

💰 Check Balance

GET /api/v1/balance

curl "https://你的域名/api/v1/balance" -H "X-API-Key: 你的KEY"

Response

{"success": true, "balance": 9.9500, "price": 0.001}

balance = account balance (USD), price = per-follower price. Uploads are rejected when balance is insufficient.

⬆️ Upload (Place Order)

POST /api/v1/upload

FieldDescription
dataInstagram links text (multiple ok). Only instagram.com links accepted.
quantityFollowers per target. Default 1.

Cost = targets × quantity × price, charged upfront; unfilled part is refunded.

curl -X POST "https://你的域名/api/v1/upload" \
  -H "X-API-Key: 你的KEY" -H "Content-Type: application/json" \
  -d '{"data": "https://www.instagram.com/kinlock", "quantity": 100}'

📋 Response Examples

✅ Success

Valid targets accepted, charged, returns orders & balance.

{
  "success": true,
  "message": "成功 1 条,失败 0 条",
  "accepted_count": 1,
  "rejected_count": 0,
  "quantity_per_target": 100,
  "unit_price": 0.001,
  "charged": 0.1000,          // charged this time
  "balance": 9.9000,          // balance after
  "orders": [
    {"id": "57e34a3a3e1d478a", "username": "kinlock", "quantity": 100, "status": "pending"}
  ],
  "rejected": []
}

⚠️ Partially accepted

Valid → orders; invalid → rejected (echoed + reason). Only valid ones are charged.

{
  "success": true,
  "message": "成功 1 条,失败 1 条",
  "accepted_count": 1,
  "rejected_count": 1,
  "orders": [ {"id":"6f83...", "username":"kinlock", "quantity":100, "status":"pending"} ],
  "rejected": [
    {"raw": "https://tiktok.com/bad", "reason": "not an instagram.com link / 非 instagram 链接"}
  ]
}

❌ All rejected

{
  "success": false,
  "message": "成功 0 条,失败 1 条",
  "accepted_count": 0,
  "rejected_count": 1,
  "orders": [],
  "rejected": [ {"raw":"https://youtube.com/abc", "reason":"not an instagram.com link / 非 instagram 链接"} ]
}

💸 Insufficient balance

HTTP 402
{"detail": "余额不足 / insufficient balance: 需 $0.1000 (1目标×100个×$0.001), 余额 $0.0500"}

🔑 Invalid key

HTTP 401
{"detail": "Invalid or inactive API key"}

⏱️ Rate limited

HTTP 429  (Retry-After header)
{"detail": "Too Many Requests:上传超过 5 次/1秒"}

Limit: 5 req/sec per key. On 429, retry after Retry-After seconds.

🔍 Query Orders

GET /api/v1/orders

Optional params: status_filter (pending/processing/completed/failed)、startend (YYYY-MM-DD)

curl "https://你的域名/api/v1/orders?status_filter=completed&start=2026-07-01" \
  -H "X-API-Key: 你的KEY"

Response

{
  "success": true, "count": 1,
  "orders": [{
    "id":"57e3...", "username":"kinlock", "status":"completed",
    "quantity":100, "done":100, "uid":"25025320",
    "followers_start":"500", "followers_end":"600",
    "created_at":"2026-07-23 10:00:00", "updated_at":"2026-07-23 10:30:00"
  }]
}

status: pending / processing / completed / failed (incl. partial+refund). done = completed count, quantity = requested.

💻 Python Example

import requests
BASE = "https://你的域名"
KEY  = "你的KEY"
h = {"X-API-Key": KEY}

# check balance
print(requests.get(f"{BASE}/api/v1/balance", headers=h).json())

# order: 100 followers for kinlock
r = requests.post(f"{BASE}/api/v1/upload", headers=h,
    json={"data": "https://www.instagram.com/kinlock", "quantity": 100})
print(r.json())   # see charged/balance/orders

# query status
print(requests.get(f"{BASE}/api/v1/orders", headers=h,
    params={"status_filter": "completed"}).json())