توسعه‌دهندگان

API v2

یک اندپوینت، فقط POST، پاسخ JSON. همان کاتالوگ و همان قیمت‌های پنل، از سایت، بات یا صفحه‌گسترده‌ی خودتان.

چهار چیزی که باید اول بدانید

01

کلید شما کیف پول شماست

آن را در صفحه حساب بسازید. خرج کردن را مجاز می‌کند، پس جایش در پیکربندی سرور است. اگر حتی یک بار به مرورگر، گفت‌وگو یا اسکرین‌شات رسید، آن را عوض کنید.

02

محدودیت‌ها برای هر سرویس جداست

حداقل و حداکثر تعداد جداگانه تعیین می‌شود — یک سرویس از 10 واحد شروع می‌شود، سرویس بعدی از 500 000. آن‌ها را از services بخوانید و پیش از فرستادن سفارش اعتبارسنجی کنید.

03

سفارش‌ها از موجودی خرج می‌کنند

مرحله صورتحساب وجود ندارد. add تنها تا زمانی موفق می‌شود که موجودی سفارش را پوشش دهد، پس balance را poll کنید و صف خود را پیش از رسیدن به صفر متوقف کنید.

04

از قبل پنل دارید؟ بدون کد

PerfectPanel و بیشتر اسکریپت‌های پنل این قالب را به‌صورت بومی می‌خوانند. در ادمین خود به Providers → Add provider بروید و نشانی سایت را بچسبانید — https://autosmo.com/، فقط همین، نه endpoint. کلید خود را بیفزایید، کاتالوگ را همگام کنید، حاشیه سود خود را تعیین کنید.

یک درخواست، از آغاز تا پایان

مثال حل‌شده
سفارشی ثبت کنید و آن را بازخوانی کنید
curl -X POST https://autosmo.com/api/v2 \\
  -d key=YOUR_KEY \\
  -d action=add \\
  -d service=6758 \\
  -d link=https://instagram.com/yourprofile \\
  -d quantity=100

{"order": 8231455}

curl -X POST https://autosmo.com/api/v2 -d key=YOUR_KEY -d action=status -d order=8231455

{"charge": "0.016", "start_count": "2841", "status": "Completed",
 "remains": "0", "currency": "USD"}

سرویس 6758 یک id واقعی از کاتالوگ است. تعدادهای کمتر از حداقل یک سرویس رد می‌شوند، نه اینکه به بالا گرد شوند.

آن را به یک عامل بسپارید

کپی & چسباندن

این را در ChatGPT، Claude یا Cursor بچسبانید، زبان خود را نام ببرید، و یک کلاینت کارآمد می‌گیرید. فهرست کامل فراخوان‌ها را به‌همراه رفتارهایی که به‌آسانی اشتباه می‌شوند در خود دارد.

پرامپت یکپارچه‌سازی
Build me a client for the AutoSMO SMM API (v2), in a language I will name.

ENDPOINT
POST https://autosmo.com/api/v2 — form-encoded body, JSON response, no other verbs.
Authentication is the field `key`, sent with every call. Server-side only.

CALLS
action=services -> array of { service, name, type, category, rate (per 1000),
                              min, max, refill:bool, cancel:bool }
action=add      params: service, link, quantity [, runs, interval]  -> { "order": id }
                custom comments: service, link, comments
action=status   params: order | orders (comma separated, max 100)
                -> { charge, start_count, status, remains, currency }
action=refill   params: order | orders (max 100)   -> { "refill": id }
action=refill_status  params: refill | refills     -> { "status": ... }
action=cancel   params: orders (max 100)
action=balance                                      -> { balance, currency }

BEHAVIOUR THAT COSTS MONEY IF IGNORED
- A timed-out `add` is not a failed `add`. The order may exist and be paid for.
  Surface it for a human; do not resend it on a timer.
- Quantity outside a service's own min/max is refused outright, so read those
  bounds from the catalogue and check before sending.
- Status is polled with `orders` and up to 100 ids at once. Per-order polling
  works in testing and dies in production.
- A 200 response can still contain per-entry errors when several ids were
  requested. Walk the entries; do not trust the envelope.
- "Partial" is a delivery that stopped early: `remains` is the shortfall and
  `charge` is the real cost. Pass that difference back to your buyer.
- Refill and cancel exist only where the catalogue flags say so.

WHAT I EXPECT FROM YOU
- One function per call, with the response parsed into typed structures.
- My order reference stored next to the id this API returns.
- Two background jobs: refresh the catalogue, and follow orders still open.
- A rehearsal switch that logs calls without sending them, and a single
  end-to-end test using the cheapest service in the catalogue.

فهرست بازبینی پیش از راه‌اندازی

کلید در هیچ چیزی که مشتری بتواند باز کند نیست

نه در JavaScript سمت کاربر، نه در بسته موبایل، نه در مخزن عمومی. هر کس آن را داشته باشد می‌تواند به حساب موجودی شما سفارش ثبت کند.

وقفه‌های زمانی برای یک انسان در صف قرار می‌گیرند، نه اینکه دوباره تلاش شوند

چون add کلید idempotency ندارد، تلاش خودکار دوباره همان راهی است که یک سفارش مشتری به دو سفارش پرداخت‌شده تبدیل می‌شود.

نسخه کاتالوگ شما طبق زمان‌بندی تازه می‌شود

نرخ‌ها، محدودیت‌ها و موجودی زمانی تغییر می‌کنند که تأمین‌کنندگان مال خود را تغییر دهند. یک نسخه محلی کهنه با قیمت‌هایی می‌فروشد که دیگر ندارید.

سفارش‌های ناقص به‌صورت ناقص به مشتری شما می‌رسند

remains را به منطق بازپرداخت خودتان نگاشت کنید. علامت‌زدن یک تحویل ناقص به‌عنوان کامل، سریع‌ترین راه برای دریافت یک chargeback است.

یک سفارش واقعی را از آغاز تا پایان دنبال کرده‌اید

کوچک‌ترین سفارشی را که کاتالوگ اجازه می‌دهد ثبت کنید، تا تکمیل آن poll کنید، و پیش از جابه‌جایی ترافیک تأیید کنید که سمت شما تا آخرین سنت با charge می‌خواند.

مرجع کامل، تولیدشده توسط پنل

API

متد HTTP POST
نشانی API https://autosmo.com/api/v2
قالب پاسخ JSON

Service list

Parameters Description
key Your API key
action services

نمونه پاسخ

[
    {
        "service": 1,
        "name": "Followers",
        "type": "Default",
        "category": "First Category",
        "rate": "0.90",
        "min": "50",
        "max": "10000",
        "refill": true,
        "cancel": true
    },
    {
        "service": 2,
        "name": "Comments",
        "type": "Custom Comments",
        "category": "Second Category",
        "rate": "8",
        "min": "10",
        "max": "1500",
        "refill": false,
        "cancel": true
    }
]

Add order

نمونه پاسخ

{
    "order": 23501
}

Order status

Parameters Description
key Your API key
action status
order Order ID

نمونه پاسخ

{
    "charge": "0.27819",
    "start_count": "3572",
    "status": "Partial",
    "remains": "157",
    "currency": "USD"
}

Multiple orders status

Parameters Description
key Your API key
action status
orders Order IDs (separated by a comma, up to 100 IDs)

نمونه پاسخ

{
    "1": {
        "charge": "0.27819",
        "start_count": "3572",
        "status": "Partial",
        "remains": "157",
        "currency": "USD"
    },
    "10": {
        "error": "Incorrect order ID"
    },
    "100": {
        "charge": "1.44219",
        "start_count": "234",
        "status": "In progress",
        "remains": "10",
        "currency": "USD"
    }
}

Create refill

Parameters Description
key Your API key
action refill
order Order ID

نمونه پاسخ

{
    "refill": "1"
}

Create multiple refill

Parameters Description
key Your API key
action refill
orders Order IDs (separated by a comma, up to 100 IDs)

نمونه پاسخ

[
    {
        "order": 1,
        "refill": 1
    },
    {
        "order": 2,
        "refill": 2
    },
    {
        "order": 3,
        "refill": {
            "error": "Incorrect order ID"
        }
    }
]

Get refill status

Parameters Description
key Your API key
action refill_status
refill Refill ID

نمونه پاسخ

{
    "status": "Completed"
}

Get multiple refill status

Parameters Description
key Your API key
action refill_status
refills Refill IDs (separated by a comma, up to 100 IDs)

نمونه پاسخ

[
    {
        "refill": 1,
        "status": "Completed"
    },
    {
        "refill": 2,
        "status": "Rejected"
    },
    {
        "refill": 3,
        "status": {
            "error": "Refill not found"
        }
    }
]

Create cancel

Parameters Description
key Your API key
action cancel
orders Order IDs (separated by a comma, up to 100 IDs)

نمونه پاسخ

[
    {
        "order": 9,
        "cancel": {
            "error": "Incorrect order ID"
        }
    },
    {
        "order": 2,
        "cancel": 1
    }
]

User balance

Parameters Description
key Your API key
action balance

نمونه پاسخ

{
    "balance": "100.84292",
    "currency": "USD"
}
نمونه کد PHP