مستندات API دایرکت اینستاگرام (رسمی)

این سند، مرجع کامل اتصال به سرویس دایرکت و کامنت اینستاگرام از طریق BoxAPI است. تمامی اندپوینت‌ها، پارامترهای ورودی، نمونه درخواست و پاسخ در ادامه آورده شده است.

احراز هویت (Authentication)

تمامی اندپوینت‌های این API از روش احراز هویت مبتنی بر هدر استفاده می‌کنند. برای هر درخواست باید هدر زیر را ارسال کنید:

Header مقدار توضیحات
X-Api-Key YOUR_ACCESS_TOKEN توکن دسترسی اختصاصی شما. این توکن را می‌توانید از بخش «تنظیمات API» در پنل کاربری BoxAPI دریافت کنید.
نکته امنیتی: توکن دسترسی خود را هرگز در کدهای سمت کلاینت (Frontend) یا مخازن عمومی قرار ندهید. تمامی درخواست‌ها باید از سمت سرور (Backend) ارسال شوند.

وبهوک (Webhook)

برای دریافت رویدادهای لحظه‌ای مانند پیام‌های دایرکت، کامنت‌ها و پاسخ اکشن‌های آسنکرون (مانند follow_status و list_posts)، باید یک آدرس Webhook در بخش «تنظیمات API» پنل کاربری خود ثبت کنید.

  • آدرس Webhook می‌تواند متعلق به سرویس اختصاصی شما، وبهوک n8n یا هر نرم‌افزار اتوماسیون دیگری باشد.
  • متد ارسال درخواست به Webhook می‌تواند POST یا GET باشد.

نمونه Webhook:

[
  {
    "headers": {
      "host": "https://YOURWEBSITE.COM",
      "x-real-ip": "1.1.1.1",
      "content-type": "application/json"
    },
    "params": {},
    "query": {},
    "body": {
      "event_id": "client_ig_111111111_1111111116",
      "event_type": "messaging",
      "account_id": "00000000-0000-0000-0000-000000000000",
      "data": {
        "time": 1785081317446,
        "id": "1234567890",
        "messaging": [
          {
            "sender": { "id": "1234567890" },
            "recipient": { "id": "1234567890" },
            "timestamp": 1785081317081,
            "message": {
              "mid": "abcxyz",
              "text": "سلام"
            }
          }
        ]
      }
    },
    "webhookUrl": "https://YOURWEBSITE.COM/webhook/zzzzzzzz",
    "executionMode": "test"
  }
]
راهنما: مقدار data.messaging[].sender.id همان recipient_id است که در اندپوینت ارسال پیام (send_message) استفاده می‌شود.

دامنه (Domain) و Redirect URL

دامنه سرویس

دامنه سرویس شما باید در پنل کاربری ثبت شود. در صورتی که دامنه‌ای ثبت نکرده باشید، به‌صورت پیش‌فرض مقدار https://boxapi.ir در نظر گرفته می‌شود.

Redirect URL

در بخش «تنظیمات API» می‌توانید یک Redirect URL تعریف کنید. کاربران پس از ورود موفق به پیج اینستاگرام خود (از طریق لینک ورود رسمی اینستاگرام) به این آدرس هدایت می‌شوند.

محدودیت مهم: مقدار Redirect URL باید زیرمجموعه‌ای از Domain ثبت‌شده شما باشد و امکان تعیین آدرسی خارج از دامنه ثبت‌شده وجود ندارد.

دریافت اطلاعات سرویس

GET
/service/info

اطلاعات کامل حساب کاربری، پلن اشتراک، تنظیمات دامنه/ریدایرکت و لیست پیج‌های متصل را برمی‌گرداند.

پارامترها

نام محل نوع الزامی توضیحات
X-Api-Key Header string بله توکن دسترسی کاربر

نمونه پاسخ ۲۰۰ OK

{
  "success": true,
  "message": "string",
  "status_code": 0,
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "domain": "string",
    "token": "string",
    "login_redirect_url": "string",
    "instagram_oauth_url": "string",
    "user": {
      "id": "00000000-0000-0000-0000-000000000000",
      "name": "string",
      "email": "string",
      "phone_number": "string"
    },
    "plan": {
      "name": "string",
      "slug": "string",
      "description": "string",
      "account_limit": 0,
      "price": 0,
      "duration_days": 0,
      "items": ["string"]
    },
    "accounts": [
      {
        "id": "00000000-0000-0000-0000-000000000000",
        "username": "string",
        "instagram_user_id": "string",
        "profile_photo": "string",
        "internal_token": "string",
        "is_active": true,
        "expires_at": "2026-07-26T15:40:14.480Z"
      }
    ]
  }
}

توضیح فیلدهای پاسخ

فیلد توضیحات
data.domain دامنه ثبت‌شده کاربر (یا مقدار پیش‌فرض boxapi.ir)
data.token توکن دسترسی فعلی کاربر (X-Api-Key)
data.login_redirect_url آدرس ریدایرکت پس از ورود موفق کاربر به اینستاگرام
data.instagram_oauth_url لینک اختصاصی ورود رسمی اینستاگرام برای اتصال پیج جدید
data.plan اطلاعات پلن اشتراک فعلی از جمله سقف تعداد پیج مجاز (account_limit)
data.accounts لیست پیج‌های اینستاگرام متصل‌شده به این حساب

ارسال پیام دایرکت

POST
/service/actions/send_message

این اندپوینت برای ارسال پیام متنی یا پیام دکمه‌دار (Button Template) در دایرکت اینستاگرام استفاده می‌شود.

پارامترهای بدنه درخواست (Body)

نام نوع الزامی توضیحات
account_id string (UUID) بله آیدی پیج اینستاگرامی که پیام از طریق آن ارسال می‌شود (از خروجی /service/accounts)
recipient_id string بله آیدی گیرنده پیام. این مقدار از فیلد sender.id در Webhook دریافت می‌شود
message string بله متن پیام ارسالی
buttons array خیر آرایه‌ای از دکمه‌ها برای ارسال پیام تعاملی (اختیاری)

ساختار هر آیتم در آرایه buttons

نام نوع توضیحات
type string نوع دکمه؛ مقادیر مجاز: postback یا web_url
title string عنوان نمایشی دکمه
payload string مقدار بازگشتی هنگام کلیک (فقط برای نوع postback)
url string آدرس مقصد (فقط برای نوع web_url)

نمونه درخواست ساده

{
  "account_id": "00000000-0000-0000-0000-000000000000",
  "recipient_id": "1234567890",
  "message": "Hello"
}

نمونه درخواست همراه با دکمه

{
  "account_id": "00000000-0000-0000-0000-000000000000",
  "recipient_id": "1234567890",
  "message": "برای ادامه یکی را انتخاب کنید",
  "buttons": [
    { "type": "postback", "title": "شروع", "payload": "START" },
    { "type": "web_url", "title": "سایت", "url": "https://example.com" }
  ]
}

پاسخ به کامنت

POST
/service/actions/reply_comment

این اندپوینت برای ارسال پاسخ (ریپلای) به یک کامنت مشخص روی پست اینستاگرام استفاده می‌شود.

پارامترهای بدنه درخواست (Body)

نام نوع الزامی توضیحات
account_id string (UUID) بله آیدی پیج اینستاگرامی که کامنت روی پست آن قرار دارد
comment_id string بله آیدی کامنت مورد نظر؛ این مقدار از طریق Webhook دریافت می‌شود
message string بله متن پاسخ کامنت

نمونه درخواست

{
  "account_id": "00000000-0000-0000-0000-000000000000",
  "comment_id": "1234567890",
  "message": "پاسخ کامنت"
}

بررسی وضعیت فالو

POST
/service/actions/follow_status

این اندپوینت مشخص می‌کند که آیا کاربری که پیام یا کامنت ارسال کرده، پیج مورد نظر را فالو کرده است یا خیر. این اندپوینت به‌صورت آسنکرون کار می‌کند.

پارامترهای بدنه درخواست (Body)

نام نوع الزامی توضیحات
account_id string (UUID) بله آیدی پیج اینستاگرامی مبدأ بررسی
customer_id string بله آیدی کاربری که وضعیت فالوی او بررسی می‌شود (همان آیدی ارسال‌کننده پیام یا کامنت)

نمونه درخواست

{
  "account_id": "00000000-0000-0000-0000-000000000000",
  "customer_id": "1234567890"
}
پاسخ: این اندپوینت پاسخ فوری بازنمی‌گرداند؛ نتیجه بررسی پس از پردازش از طریق آدرس Webhook ثبت‌شده شما ارسال خواهد شد.

دریافت لیست پست‌ها

POST
/service/actions/list_posts

این اندپوینت، لیست پست‌های منتشرشده در پیج را برمی‌گرداند. نتیجه درخواست پس از پردازش، از طریق Webhook ارسال می‌شود.

پارامترهای بدنه درخواست (Body)

نام نوع الزامی توضیحات
account_id string (UUID) بله آیدی پیج اینستاگرامی مورد نظر
fields array of string خیر لیست فیلدهایی که برای هر پست بازگردانده شود؛ مثال: id, media_type, media_url, permalink, caption, timestamp
limit number خیر تعداد پست‌های بازگشتی

نمونه درخواست

{
  "account_id": "00000000-0000-0000-0000-000000000000",
  "fields": ["id", "media_type", "media_url", "permalink", "caption", "timestamp"],
  "limit": 10
}
پاسخ: نتیجه نهایی این درخواست از طریق Webhook برای شما ارسال خواهد شد، نه در پاسخ مستقیم HTTP.

دریافت لیست پیج‌های متصل

GET
/service/accounts

این اندپوینت اطلاعات تمامی پیج‌هایی که از طریق لینک ورود اختصاصی شما (instagram_oauth_url) لاگین شده‌اند را به‌صورت صفحه‌بندی‌شده برمی‌گرداند.

نمونه پاسخ ۲۰۰ OK

{
  "success": true,
  "message": "string",
  "status_code": 0,
  "data": [
    {
      "id": "00000000-0000-0000-0000-000000000000",
      "username": "string",
      "instagram_user_id": "string",
      "profile_photo": "string",
      "internal_token": "string",
      "is_active": true,
      "expires_at": "2026-07-26T19:49:40.273Z"
    }
  ],
  "pagination": {
    "current_page": 0,
    "last_page": 0,
    "per_page": 0,
    "total": 0,
    "from": 0,
    "to": 0
  }
}

توضیح فیلدهای هر پیج

فیلد توضیحات
id آیدی داخلی پیج؛ همان مقداری که در سایر اندپوینت‌ها به‌عنوان account_id استفاده می‌شود
username نام کاربری پیج اینستاگرام
instagram_user_id آیدی عددی رسمی پیج در اینستاگرام
is_active وضعیت فعال بودن اتصال پیج
expires_at تاریخ انقضای دسترسی پیج؛ در صورت انقضا نیاز به ورود مجدد است

مشاهده پروفایل کاربر

POST
/service/actions/show_profile

این اندپوینت اطلاعات پروفایل عمومی یک کاربر اینستاگرام (نام کاربری، نام نمایشی و عکس پروفایل) را برمی‌گرداند. این اندپوینت به‌صورت آسنکرون کار می‌کند.

پارامترهای بدنه درخواست (Body)

نام نوع الزامی توضیحات
account_id string (UUID) بله آیدی پیج اینستاگرامی مبدأ درخواست
sender_id string بله آیدی کاربری که اطلاعات پروفایل او درخواست می‌شود؛ همان آیدی ارسال‌کننده پیام یا کامنت

نمونه درخواست

{
  "sender_id": "1111111111111111111",
  "account_id": "2222222222"
}

فیلدهای بازگشتی از طریق Webhook

فیلد توضیحات
username نام کاربری اینستاگرام کاربر
name نام نمایشی (Display Name) کاربر
profile_pic آدرس عکس پروفایل کاربر
پاسخ: نتیجه نهایی این درخواست از طریق Webhook برای شما ارسال خواهد شد، نه در پاسخ مستقیم HTTP.
محدودیت مهم: اطلاعات پروفایل فقط برای کاربرانی قابل دریافت است که پیش‌تر با پیج مورد نظر تعامل داشته‌اند (پیام دایرکت ارسال کرده یا کامنتی گذاشته باشند). برای کاربرانی که هیچ تعاملی با پیج نداشته‌اند، اطلاعاتی بازگردانده نمی‌شود.

حذف پیج

DELETE
/service/accounts/{id}

این اندپوینت برای حذف کامل یک پیج از حساب کاربری شما استفاده می‌شود.

پارامترهای مسیر (Path Parameters)

نام نوع الزامی توضیحات
id string (UUID) بله همان account_id پیج مورد نظر برای حذف

نمونه پاسخ ۲۰۰ OK

{
  "success": true,
  "message": "Account deleted successfully",
  "status_code": 200,
  "data": null
}
هشدار (عملیات غیرقابل بازگشت): با حذف پیج، تمامی اطلاعات مربوط به آن حتی در سمت BoxAPI نیز به‌طور کامل حذف می‌شود و تا زمان ورود مجدد، دیگر دسترسی به آن پیج نخواهید داشت.

محدودیت درخواست (Rate Limit)

محدودیت ارسال درخواست در BoxAPI دقیقاً بر مبنای همان محدودیت‌های رسمی «Instagram API with Instagram Login» متعلق به متا (Meta for Developers) اعمال می‌شود. این محدودیت‌ها به‌صورت جداگانه برای هر پیج اینستاگرامی (Instagram Professional Account) محاسبه می‌شوند، نه به‌صورت استخر مشترک بین پیج‌ها.

محدودیت پیام دایرکت (send_message)

نوع محتوای پیام سقف مجاز به ازای هر پیج
پیام متنی، لینک، Reaction و استیکر ۱۰۰ درخواست در ثانیه
پیام حاوی فایل صوتی یا ویدیویی ۱۰ درخواست در ثانیه

محدودیت پاسخ به کامنت (reply_comment)

پاسخ‌های ارسالی به کامنت‌های پست و ریلز (Private Reply) با نرخ ساعتی محدود می‌شوند، نه ثانیه‌ای:

نوع اکشن سقف مجاز به ازای هر پیج
پاسخ به کامنت پست/ریلز ۷۵۰ درخواست در ساعت
نکته: این اعداد مستقیماً توسط زیرساخت رسمی متا برای مسیر Instagram API with Instagram Login تعیین شده‌اند و BoxAPI صرفاً همین مقادیر را به ازای هر پیج متصل، بدون کم یا زیاد کردن، اعمال می‌کند.

نحوه محاسبه در حساب‌های چندپیجی

هر پیج، سهمیه اختصاصی و مستقل خود را دارد و این سهمیه بین پیج‌های مختلف حساب شما به اشتراک گذاشته نمی‌شود؛ یعنی رسیدن یک پیج به سقف مجاز، هیچ تأثیری بر سهمیه سایر پیج‌های متصل ندارد.

تعداد پیج‌های متصل سقف پیام متنی/لینک/استیکر سقف پیام صوتی/ویدیویی سقف پاسخ کامنت
۱ پیج ۱۰۰ درخواست/ثانیه ۱۰ درخواست/ثانیه ۷۵۰ درخواست/ساعت
هر پیج اضافه ۱۰۰ درخواست/ثانیه (مستقل و جداگانه برای همان پیج) ۱۰ درخواست/ثانیه (مستقل و جداگانه برای همان پیج) ۷۵۰ درخواست/ساعت (مستقل و جداگانه برای همان پیج)

مدیریت خودکار توسط BoxAPI

نیازی به محاسبه دستی یا مدیریت این سهمیه از سمت شما نیست؛ سیستم BoxAPI به‌صورت خودکار مصرف درخواست‌های هر پیج را پایش می‌کند و در صورت نزدیک شدن به سقف مجاز، مانع از بروز خطا در سمت سیستم شما می‌شود. درخواست‌های مازاد بر سهمیه لحظه‌ای، به‌جای رد شدن، در صف قرار گرفته و پس از آزاد شدن ظرفیت (باز شدن پنجره ثانیه‌ای یا ساعتی) به‌صورت خودکار ارسال می‌شوند.

نکته: این محدودیت از سمت زیرساخت رسمی متا/اینستاگرام اعمال می‌شود و BoxAPI صرفاً آن را به‌صورت شفاف مدیریت و بهینه‌سازی می‌کند؛ افزایش این سقف برای یک پیج مشخص امکان‌پذیر نیست، اما با اتصال پیج‌های بیشتر، هر پیج جدید سهمیه مستقل و کامل خود را طبق جدول بالا در اختیار خواهد داشت.

نکات مهم و حریم خصوصی

  • حذف دسترسی از سمت کاربر اینستاگرام: در صورتی که کاربر نهایی دسترسی سرویس را از تنظیمات اینستاگرام خود حذف کند، یا درخواست حذف به BoxAPI ارسال شود، این عملیات بدون اطلاع‌رسانی قبلی انجام خواهد شد.
  • پاک‌سازی کامل اطلاعات: در صورت حذف دسترسی پیج — چه از سمت کاربر، چه از سمت BoxAPI و چه از سمت شما — اطلاعات آن پیج به‌طور کامل و غیرقابل بازگشت حذف می‌شود.
  • حریم خصوصی داده‌ها: هیچ‌یک از اطلاعات کاربران به‌صورت مستقیم از سمت اینستاگرام در اختیار شما (توسعه‌دهنده) قرار نمی‌گیرد؛ تمامی اطلاعات صرفاً نزد BoxAPI نگهداری و پردازش می‌شود.
  • عدم امکان ارسال پیام انبوه: ساخت ربات ارسال پیام انبوه (Bulk Messaging) در اینستاگرام از طریق این سرویس امکان‌پذیر نیست. صرفاً امکان ارسال پیام به کاربرانی وجود دارد که پیش‌تر با پیج شما تعامل داشته‌اند؛ یعنی کامنتی گذاشته‌اند یا پیامی در دایرکت ارسال کرده‌اند. در صورت شناسایی رفتار اسپم‌گونه، حساب کاربری بسته خواهد شد.
  • تخلف و قطع دسترسی: در صورت مشاهده هرگونه تخلف از قوانین استفاده از این API، BoxAPI می‌تواند دسترسی شما به سرویس را بدون اطلاع قبلی و به‌طور یک‌طرفه قطع کند.