مستندات API پافرلند
با API کلاینت پافرلند میتوانید بهصورت برنامهنویسیشده به سرورهای خود دسترسی داشته باشید؛ از مدیریت فایل و دیتابیس گرفته تا کنسول، بکاپ و زمانبندی وظایف.
آدرس پایه (Base URL)
تمام درخواستها به آدرس پایهی زیر ارسال میشوند و مسیر هر endpoint در ادامهی مستندات، نسبی به همین آدرس است:
https://pufferland.ir/api/clientاحراز هویت
برای استفاده از API به یک کلید API نیاز دارید. کلید خود را از بخش «کلیدهای API» در حساب کاربری پنل (یا از منوی کاربری در بالای سایت) بسازید. کلید ساختهشده فقط یک بار نمایش داده میشود — آن را در جای امنی ذخیره کنید.
هر درخواست باید هدر احراز هویت را همراه داشته باشد:
Authorization: Bearer ptlc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxهدرهای درخواست
| هدر | توضیح |
|---|---|
Authorization | کلید API بهصورت Bearer <کلید> — برای همهی درخواستها الزامی است. |
Content-Type | application/json — برای درخواستهایی که بدنه دارند (بهجز موارد خاص مثل نوشتن فایل). |
Accept | application/json — برای دریافت پاسخ JSON توصیه میشود. |
نمونهی یک درخواست کامل با چند زبان:
# فهرست سرورهای شما
curl https://pufferland.ir/api/client \
-H "Authorization: Bearer ptlc_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Accept: application/json"const res = await fetch('https://pufferland.ir/api/client', {
headers: {
Authorization: 'Bearer ptlc_xxxxxxxxxxxxxxxxxxxxxxxx',
Accept: 'application/json',
},
});
const data = await res.json();
console.log(data.data);import requests
r = requests.get(
"https://pufferland.ir/api/client",
headers={
"Authorization": "Bearer ptlc_xxxxxxxxxxxxxxxxxxxxxxxx",
"Accept": "application/json",
},
)
print(r.json())$ch = curl_init('https://pufferland.ir/api/client');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ptlc_xxxxxxxxxxxxxxxxxxxxxxxx',
'Accept: application/json',
],
]);
$data = json_decode(curl_exec($ch), true);
var_dump($data);قالب پاسخ
پاسخها با ساختار JSON استاندارد برمیگردند. یک منبع تکی به این شکل است:
{
"object": "server",
"attributes": {
"identifier": "1a7ce997",
"name": "Minecraft Server",
"...": "..."
},
"meta": { "...": "..." }
}و لیستها بهصورت آرایهای از منابع به همراه اطلاعات صفحهبندی:
{
"object": "list",
"data": [ { "object": "...", "attributes": { "...": "..." } } ],
"meta": {
"pagination": {
"total": 12, "count": 2, "per_page": 2,
"current_page": 1, "total_pages": 6,
"links": { "next": "..." }
}
}
}پارامترهای عمومی
| پارامتر | مثال | توضیح |
|---|---|---|
?include= | ?include=egg,subusers | بارگذاری روابط اضافه در پاسخ. |
?page= | ?page=2 | شماره صفحه در لیستهای صفحهبندیشده. |
?per_page= | ?per_page=50 | تعداد آیتم هر صفحه (حداکثر ۱۰۰). |
?filter[]= | ?filter[name]=mc | فیلتر کردن نتایج. |
?sort= | ?sort=-created_at | مرتبسازی؛ پیشوند - یعنی نزولی. |
پارامترهای مسیر
در مستندات، مقادیری مثل {server} یا {database} پارامتر مسیر هستند؛ یعنی باید مقدار واقعی مربوط به منبع خودتان را جایگزین آنها کنید. این جدول میگوید هر پارامتر چه چیزی است و مقدارش را از کجا پیدا کنید:
| پارامتر | یعنی چه؟ | از کجا پیدا میشود؟ |
|---|---|---|
{server} | شناسهی (Identifier) سرور — همان کد کوتاه ۸ کاراکتری که برای هر سرور شما ساخته میشود (مثل 1a85a183) | پاسخ GET /api/client → attributes.identifier هر سرور. UUID کامل سرور هم بهجای آن پذیرفته میشود. |
{identifier} | شناسهی کلید API | پاسخ لیست کلیدها → attributes.identifier هر کلید |
{database} | شناسهی دیتابیس | پاسخ لیست دیتابیسها → attributes.id (مثل YkxXVk6W) |
{backup} | شناسهی UUID بکاپ | پاسخ لیست بکاپها → attributes.uuid |
{schedule} | شناسهی عددی زمانبندی | پاسخ لیست زمانبندیها → attributes.id |
{task} | شناسهی عددی وظیفه | پاسخ لیست وظایف → attributes.id |
{allocation} | شناسهی عددی آدرس (پورت) | پاسخ لیست آدرسها → attributes.id |
{user} | شناسهی UUID زیرکاربر | پاسخ لیست زیرکاربران → attributes.uuid |
GET /api/client/servers/{server}/resources روی سروری با identifier 1a85a183، آدرس نهایی میشود:https://pufferland.ir/api/client/servers/1a85a183/resourcesمحدودیت تعداد درخواست (Rate Limit)
هر کلید API میتواند حداکثر ۲۴۰ درخواست در دقیقه ارسال کند. وضعیت فعلی از طریق هدرهای پاسخ قابل بررسی است:
| هدر | توضیح |
|---|---|
X-RateLimit-Limit | سقف درخواستها در بازهی زمانی. |
X-RateLimit-Remaining | تعداد درخواستهای باقیمانده. |
X-RateLimit-Reset | زمان (یونیکس) ریستشدن سقف. |
در صورت عبور از سقف، پاسخ 409 Too Many Requests دریافت میکنید. بهتر است برنامهی شما هدرهای بالا را رصد و بین درخواستها فاصله بگذارد.
خطاها
خطاها با ساختار زیر برمیگردند؛ فیلد code برای تشخیص برنامهنویسیشدهی نوع خطا و detail برای نمایش پیام است:
{
"errors": [
{
"code": "NotFoundHttpException",
"status": "404",
"detail": "The requested resource could not be found."
}
]
}| کد وضعیت | معنی |
|---|---|
400 | درخواست نامعتبر یا تداخل با وضعیت فعلی سرور. |
401 | کلید API نامعتبر یا ارسالنشده. |
403 | دسترسی کافی ندارید (مجوز لازم را ندارید). |
404 | منبع درخواستی یافت نشد. |
409 | تداخل — مانند عبور از سقف Rate Limit. |
422 | دادهی ارسالی از اعتبارسنجی رد شد. |