رفتن به محتوا

تخفیف هوشمند و کمپین‌ها

مخاطب: برنامه‌نویس یا فروشنده‌ای که می‌خواهد تخفیف هوشمند تنوع‌ها را از نرم‌افزار خود ثبت و پایش کند، تخفیف خودکار را تنظیم کند یا کالاها را به کمپین‌های دیجی‌کالا بفرستد.

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

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

با مسیرهای این صفحه می‌توانید:

کار مسیر در دسترس
تخفیف هوشمند همه‌ی تنوع‌ها GET /v1/promotions فعال
تخفیف هوشمند یک تنوع GET /v1/promotions/{variant_id} فعال
ثبت یا ویرایش تخفیف PUT /v1/promotions/{variant_id} فعال
پایان تخفیف DELETE /v1/promotions/{variant_id} فعال
تخفیف گروهی در صف POST /v1/promotions/batch فاز ۲
خواندن تنظیمات تخفیف پله‌ای و تمدید GET /v1/promotion-settings فعال
تغییر تنظیمات تخفیف پله‌ای و تمدید PUT /v1/promotion-settings فعال
کمپین‌های باز GET /v1/campaigns فعال
یک کمپین و کالاهای شما در آن GET /v1/campaigns/{campaign_id} فعال
پیوستن به کمپین POST /v1/campaigns/{campaign_id}/join فاز ۳
خروج از کمپین POST /v1/campaigns/{campaign_id}/leave فاز ۳
ارزها، نرخ روز و استراتژی‌های ارزی GET /v1/fx فعال
قیمت‌گذاری ارزی تنوع‌ها GET /v1/fx/variants فعال
تعیین استراتژی ارزی یک تنوع PUT /v1/fx/variants/{variant_id} فعال
تایید قیمت ارزی منتظر تایید POST /v1/fx/variants/{variant_id}/confirm فعال

و با رویدادهای وب‌هوک promotion.ending، promotion.rejected و promotion.below_floor از پایان، رد و تخفیف‌های زیر حداقل قیمت خبردار شوید.

دسترسی برای
promotions:read خواندن تخفیف‌ها، تنظیمات و کمپین‌ها، و رویدادهای promotion.*
promotions:write ثبت، ویرایش و پایان تخفیف، تخفیف گروهی، تنظیمات، پیوستن و خروج از کمپین
prices:read خواندن قیمت ارزی (/v1/fx)
prices:write تعیین استراتژی ارزی و تایید قیمت ارزی

جزئیات ساخت کلید در صفحه‌ی ورود و دسترسی‌ها آمده است.

ماژول «API و وب‌هوک» باید برای پنل فعال باشد؛ در غیر این صورت همه‌ی مسیرها با کد 403 و خطای module_inactive (ماژول API) یا module_required (ماژول این بخش، با نام آن در detail) پاسخ می‌دهند. مسیرهای /v1/fx به ماژول اختیاری «قیمت ارزی» هم نیاز دارند و بدون آن همان خطا را می‌دهند. برای پنلی که اشتراک آن به پایان رسیده است، هر ثبت در دیجی‌کالا با خطای subscription_inactive رد می‌شود.

https://api.seller360.ir
مقدار برچسب در پنل معنی
ok — تخفیف دستی ممکن است.
blocked «حداقل قیمت اجازه‌ی تخفیف نمی‌دهد» سقف قیمت تخفیف دیجی‌کالا کمتر از حداقل قیمت شماست؛ تخفیفی ثبت‌شدنی نیست.
no_floor «حداقل قیمت ندارد» تنوع حداقل قیمت ندارد؛ تخفیف ثبت نمی‌شود.
bot — ربات با روش «تخفیف هوشمند» قیمت این تنوع را تعیین می‌کند؛ تغییر دستی ممکن نیست.
فیلد برچسب در پنل معنی
eligible — دیجی‌کالا تخفیف هوشمند را برای این تنوع مجاز می‌داند.
reference_price «قیمت مرجع» درصد تخفیف نسبت به آن است.
base_price «قیمت فروش فعلی (خط‌خورده)» قیمت فروش پایه.
customer_price «قیمت برای مشتری» قیمتی که خریدار می‌پردازد.
floor، floor_source «حداقل قیمت شما» حداقل قیمت و منشا آن.
cap «سقف مجاز» بیشترین قیمت تخفیفی که دیجی‌کالا می‌پذیرد؛ قیمت تخفیف باید کمتر یا برابر آن باشد.
cap_pct — کمترین درصد تخفیف قابل قبول دیجی‌کالا.
floor_pct — بیشترین درصد تخفیفی که حداقل قیمت شما اجازه می‌دهد.
min_discount_pct «حداقل تخفیف دیجی‌کالا» حداقل درصد تخفیف دسته‌ی کالا.
order_limit_min، order_limit_max — بازه‌ی مجاز سقف تعداد در هر سفارش.
stock — موجودی قابل فروش.
discount — تخفیف فعال؛ خالی یعنی تخفیفی در جریان نیست (جدول بعد).
step_level — پله‌ی فعلی تخفیف پله‌ای؛ ۰ یعنی بدون پله.
last_error، last_error_at — آخرین پیام رد دیجی‌کالا در ۲ روز گذشته.
synced_at — زمان آخرین به‌روزرسانی نسخه‌ی محلی.

تخفیف فعال (discount)

فیلد معنی
promotion_variant_id شناسه‌ی رکورد تخفیف در دیجی‌کالا.
promotion_price قیمت تخفیف به ریال.
discount_pct درصد تخفیف نسبت به قیمت مرجع.
started_at، end_at شروع و پایان.
limit تعداد کالا در تخفیف.
order_limit سقف تعداد در هر سفارش.
status وضعیت در دیجی‌کالا: active، approved، pending (منتظر تایید دیجی‌کالا)، draft یا partially_approved.
source منشا تخفیف (جدول بعد).

منشا تخفیف (source)

مقدار معنی
external بیرون از سلر ۳۶۰ ثبت شده است؛ مثلا در پنل دیجی‌کالا.
manual ثبت دستی در سلر ۳۶۰ یا از همین API.
bot ربات قیمت‌گذاری با روش تخفیف هوشمند.
auto_step تخفیف پله‌ای کالای کم‌فروش.
auto_renew تمدید خودکار.
max(floor, 1100) ≤ price ≤ cap و price مضرب ۱۰۰ ریال

مدت تخفیف ۱ تا ۳۰ روز است و سقف تعداد در هر سفارش باید داخل order_limit_min تا order_limit_max باشد.

⚙️ تخفیف پله‌ای و تمدید خودکار

Section titled “⚙️ تخفیف پله‌ای و تمدید خودکار”

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

تخفیف پله‌ای کالای کم‌فروش: کالایی که در step_window_days روز گذشته step_max_sales واحد یا کمتر فروخته و دست‌کم step_min_stock موجودی دارد، تخفیف step_pct درصد نسبت به قیمت مرجع می‌گیرد. هر step_every_days روز یک پله (step_pct درصد دیگر) اضافه می‌شود تا step_max_pct. تخفیف هر پله دست‌کم برابر حداقل تخفیف دسته‌ی دیجی‌کالاست و هرگز از حداقل قیمت پایین‌تر نمی‌رود. وقتی کالا دوباره فروش داشته باشد، تخفیف پله‌ای برداشته می‌شود.

تمدید خودکار: تخفیف فعالی که کمتر از renew_before_hours ساعت به پایان آن مانده است، با همان قیمت برای renew_days روز دیگر تمدید می‌شود.

فیلد برچسب در پنل بازه پیش‌فرض معنی
step_enabled «تخفیف پله‌ای برای کالای کم‌فروش» true یا false false روشن بودن تخفیف پله‌ای.
step_window_days «بازه‌ی بررسی (روز)» ۳ تا ۹۰ ۱۴ بازه‌ی بررسی فروش.
step_max_sales «حد فروش» ۰ تا ۱۰۰۰ ۱ فروش کمتر یا برابر این عدد در بازه یعنی کم‌فروش.
step_min_stock «حداقل موجودی» ۱ تا ۱۰۰٬۰۰۰ ۱ کالای با موجودی کمتر تخفیف پله‌ای نمی‌گیرد.
step_pct «تخفیف هر پله (درصد)» ۰٫۵ تا ۵۰ ۳ درصد تخفیف هر پله نسبت به قیمت مرجع.
step_every_days «فاصله‌ی پله‌ها (روز)» ۱ تا ۳۰ ۷ فاصله‌ی پله‌ها.
step_max_pct «حداکثر تخفیف (درصد)» ۱ تا ۸۰ ۲۰ حداکثر درصد تخفیف پله‌ای؛ نباید از step_pct کمتر باشد.
renew_enabled «تمدید خودکار» true یا false false روشن بودن تمدید خودکار.
renew_before_hours «زمان تمدید (ساعت)» ۱ تا ۱۶۸ ۲۴ چند ساعت پیش از پایان تمدید شود.
renew_days «مدت تمدید (روز)» ۱ تا ۳۰ ۷ مدت تمدید.
last_run_at، last_run_note — فقط خواندنی — زمان و خلاصه‌ی آخرین اجرا.

یک مثال با تنظیمات پیش‌فرض: کالایی که ۱۴ روز فروشی نداشته است، ابتدا ۳ درصد، پس از ۷ روز ۶ درصد و به همین ترتیب تا ۲۰ درصد تخفیف می‌گیرد؛ مگر حداقل قیمت زودتر مانع شود.

فیلد معنی
id، title شناسه و عنوان کمپین در دیجی‌کالا.
nature نوع کمپین؛ مقادیر شناخته‌شده incredible_offer (شگفت‌انگیز)، mega_promotion (مگاکمپین) و deal_of_the_day (شگفت‌انگیز روز). دیجی‌کالا ممکن است نوع تازه‌ای اضافه کند.
status وضعیت کمپین در دیجی‌کالا.
start_at، end_at شروع و پایان کمپین.
join_deadline، deadline_passed مهلت پیوستن و گذشتن آن.
conditions شرایط کمپین به متن دیجی‌کالا.
min_discount_pct حداقل درصد تخفیف.
min_qty حداقل تعداد کالا در کمپین.
potential_variants تعداد تنوع‌های شما که می‌توانند بپیوندند.
participants تعداد شرکت‌کنندگان.
joined دست‌کم یکی از کالاهای شما در کمپین است.
commission_discount کمپین تخفیف کمیسیون دارد.
link، synced_at پیوند کمپین و زمان خواندن از دیجی‌کالا.

کالا در کمپین (mine و candidates)

Section titled “کالا در کمپین (mine و candidates)”
فیلد برچسب در پنل معنی
promotion_variant_id — شناسه‌ی حضور کالا در کمپین؛ برای خروج لازم است.
selling_price، promotion_price «قیمت فروش»، «قیمت کمپین» قیمت فروش و قیمت کمپین.
cap — بیشترین قیمت مجاز در کمپین.
floor «حداقل قیمت شما» حداقل قیمت شما.
stock — موجودی.
state — ok (پیوستن ممکن است)، blocked (سقف قیمت کمپین کمتر از حداقل قیمت شماست) یا no_floor (تنوع حداقل قیمت ندارد).
status — وضعیت در کمپین (جدول بعد).
rejection_reason — دلیل رد دیجی‌کالا.
in_other_incredible — کالا در شگفت‌انگیز دیگری هم هست.
buy_box_winner — برنده‌ی بای‌باکس است.
sales_last_week — فروش هفته‌ی گذشته.
وضعیت کالا (status) معنی
draft ثبت‌شده، در انتظار بررسی دیجی‌کالا.
pending، partially_approved در انتظار تایید.
approved تاییدشده.
rejected، partially_rejected ردشده توسط دیجی‌کالا؛ دلیل در rejection_reason.
active فعال.
ended پایان‌یافته.

ماژول اختیاری «قیمت ارزی» قیمت فروش را از قیمت خرید ارزی و نرخ روز می‌سازد. هر تنوع یا با ربات قیمت‌گذاری می‌شود یا با استراتژی ارزی، هرگز با هر دو: دادن استراتژی ارزی، استراتژی ربات را برمی‌دارد و ربات تنوع را خاموش می‌کند. قیمت‌های ارزی از همان صف تغییر دستی پنل (پیش از ربات) در دیجی‌کالا ثبت می‌شوند و در تاریخچه‌ی قیمت با منشا fx می‌آیند؛ تغییر دستی قیمت چنین تنوعی خطای price_managed_by_fx می‌دهد (قیمت فروش).

مفهوم فیلد معنی
ارزهای فعال currencies کد ISO 4217، برچسب، rate_mode (auto نرخ روز، manual نرخ دلخواه شما) و surcharge_pct (درصد افزوده بر نرخ).
نرخ امروز rates ریال برای یک واحد ارز، روز، منبع (tgju، priceto، tgju_history یا manual) و زمان نرخ.
استراتژی ارزی strategies net_profit_pct (سود خالص هدف به درصد قیمت خرید، پس از کمیسیون، هزینه‌ها و مالیات)، rounding، confirm_above_pct و in_smart_discount.

گرد کردن (rounding)، همیشه به بالا: r1k تا ۱۰٬۰۰۰ ریال، r10k تا ۱۰۰٬۰۰۰ ریال، r100k تا ۱٬۰۰۰٬۰۰۰ ریال، و nine ختم به ۹۹٬۰۰۰ ریال.

وضعیت تنوع ارزی (status)

مقدار معنی
ok قیمت ثبت شده است.
queued قیمت در صف ثبت است.
confirm تغییر از آستانه‌ی تایید (confirm_above_pct) بیشتر است و قیمت تازه (pending_price) منتظر تایید شماست.
held نگه داشته شده است؛ دلیل در status_note، مثلا تنوعی که ربات هم دارد.
idle استراتژی ارزی ندارد.
  • تخفیف‌ها: نسخه‌ی محلی هر ساعت از دیجی‌کالا به‌روز می‌شود (synced_at). ثبت، ویرایش و حذف از API پس از پاسخ دیجی‌کالا برمی‌گردند.
  • تخفیف پله‌ای و تمدید: هر ساعت یک بار اجرا می‌شوند (last_run_at).
  • کمپین‌ها: در لحظه‌ی درخواست از دیجی‌کالا خوانده می‌شوند؛ به همین دلیل ممکن است با 502 یا 503 پاسخ دهند.
  • پیام‌های رد: last_error فقط پیام‌های ۲ روز گذشته را نگه می‌دارد.

GET /v1/promotions — تخفیف هوشمند تنوع‌ها فعال

Section titled “GET /v1/promotions — تخفیف هوشمند تنوع‌ها ”

هر تنوعی که واجد شرایط تخفیف هوشمند است یا تخفیف فعال دارد.

GET /v1/promotions?active=1&ending_within_hours=48 HTTP/1.1
Host: api.seller360.ir
Authorization: Bearer s360_live_...
پارامتر نوع اجباری توضیح
state ok، blocked، no_floor یا bot خیر فقط تنوع‌هایی با این وضعیت.
active 0 یا 1 خیر فقط تنوع‌هایی که تخفیف فعال دارند (1) یا ندارند (0).
source یکی از مقادیر منشا خیر فقط تخفیف‌هایی با این منشا.
ending_within_hours عدد ۱ تا ۷۲۰ خیر فقط تخفیف‌هایی که در این تعداد ساعت آینده تمام می‌شوند.
page، size عدد خیر صفحه‌بندی.

پاسخ نمونه

{
"status": "ok",
"data": [
{
"variant_id": 84780448,
"sku": "PE-5144",
"eligible": true,
"state": "ok",
"reference_price": 24500000,
"base_price": 23990000,
"customer_price": 23490000,
"floor": 21800000,
"floor_source": "cost_plus",
"cap": 24010000,
"cap_pct": 2,
"floor_pct": 11,
"min_discount_pct": 2,
"order_limit_min": 1,
"order_limit_max": 1000,
"stock": 38,
"discount": {
"promotion_variant_id": 51820044,
"promotion_price": 23490000,
"discount_pct": 4,
"started_at": "2026-11-09T00:00:00+03:30",
"end_at": "2026-11-16T00:00:00+03:30",
"limit": 38,
"order_limit": 2,
"status": "active",
"source": "manual"
},
"step_level": 0,
"last_error": null,
"last_error_at": null,
"synced_at": "2026-11-12T10:00:00+03:30"
}
],
"pager": { "page": 1, "item_per_page": 50, "total_pages": 1, "total_rows": 12 }
}

GET /v1/promotions/{variant_id} — تخفیف یک تنوع فعال

Section titled “GET /v1/promotions/{variant_id} — تخفیف یک تنوع ”

همان ساختار، برای یک تنوع. اگر تنوع در این پنل نباشد، کد 404 و خطای variant_not_found برمی‌گردد.

PUT /v1/promotions/{variant_id} — ثبت یا ویرایش تخفیف فعال

Section titled “PUT /v1/promotions/{variant_id} — ثبت یا ویرایش تخفیف ”

تخفیف را در دیجی‌کالا ثبت یا ویرایش می‌کند و پاسخ را پس از پاسخ دیجی‌کالا برمی‌گرداند. پیش از ارسال همه‌ی قواعد بررسی می‌شود:

  1. تنوع باید واجد شرایط باشد (promotion_not_eligible).
  2. ربات نباید با روش تخفیف هوشمند قیمت این تنوع را تعیین کند (promotion_managed_by_bot).
  3. تنوع باید حداقل قیمت داشته باشد (promotion_no_floor) و قیمت تخفیف کمتر از آن نباشد (promotion_below_floor).
  4. قیمت مضرب ۱۰۰، بیشتر از ۱٬۰۰۰ ریال و حداکثر برابر cap؛ مدت ۱ تا ۳۰ روز؛ سقف تعداد در هر سفارش داخل بازه‌ی دیجی‌کالا (promotion_invalid، با detail).
PUT /v1/promotions/84780448 HTTP/1.1
Host: api.seller360.ir
Authorization: Bearer s360_live_...
Idempotency-Key: promo-84780448-1405-08-22
Content-Type: application/json
{ "price": 23290000, "days": 7, "order_limit": 2 }
فیلد بدنه نوع اجباری توضیح
price عدد بله قیمت تخفیف به ریال؛ دست‌کم ۱٬۱۰۰، مضرب ۱۰۰، حداکثر برابر cap و دست‌کم برابر حداقل قیمت شما.
days عدد خیر مدت تخفیف به روز، ۱ تا ۳۰؛ پیش‌فرض ۷.
order_limit عدد خیر سقف تعداد در هر سفارش، داخل order_limit_min تا order_limit_max؛ پیش‌فرض مقدار تخفیف فعلی یا کمترین مقدار مجاز.

پاسخ نمونه (کد 200)

{
"status": "ok",
"data": {
"promotion": {
"variant_id": 84780448,
"eligible": true,
"state": "ok",
"customer_price": 23290000,
"floor": 21800000,
"cap": 24010000,
"discount": {
"promotion_variant_id": 51820044,
"promotion_price": 23290000,
"discount_pct": 5,
"end_at": "2026-11-16T00:00:00+03:30",
"order_limit": 2,
"status": "active",
"source": "manual"
},
"synced_at": "2026-11-12T10:21:09+03:30"
},
"replaced": false,
"warning": null
}
}

خطاهای این مسیر

کد HTTP خطا معنی تکرار بی‌خطر است؟
400 invalid_parameter بدنه نامعتبر است. خیر؛ بدنه را اصلاح کنید.
403 subscription_inactive اشتراک فعال نیست. خیر.
404 variant_not_found تنوعی با این شناسه در این پنل نیست. خیر.
409 promotion_managed_by_bot ربات با تخفیف هوشمند این تنوع را قیمت‌گذاری می‌کند. خیر؛ ابتدا شیوه‌ی اعمال قیمت استراتژی را تغییر دهید.
409 idempotency_mismatch این کلید یکتا قبلا با بدنه‌ی دیگری استفاده شده است. خیر؛ کلید تازه بسازید.
409 idempotency_in_progress درخواستی با همین کلید در حال انجام است. بله، چند ثانیه بعد.
422 promotion_not_eligible دیجی‌کالا تخفیف این تنوع را مجاز نمی‌داند. خیر.
422 promotion_no_floor تنوع حداقل قیمت ندارد. خیر؛ ابتدا حداقل قیمت تعیین کنید.
422 promotion_below_floor قیمت تخفیف کمتر از حداقل قیمت شماست. خیر؛ قیمت را اصلاح کنید.
422 promotion_invalid با قواعد دیجی‌کالا سازگار نیست؛ جزئیات در detail. خیر؛ بدنه را اصلاح کنید.
502 digikala_refused دیجی‌کالا تخفیف را نپذیرفت؛ پیام دیجی‌کالا در detail. پس از بررسی علت.
503 digikala_rate_limited سقف درخواست دیجی‌کالا پر است. بله، پس از Retry-After و با همان Idempotency-Key.
503 digikala_unavailable دیجی‌کالا در دسترس نیست. بله، پس از Retry-After و با همان Idempotency-Key.

فهرست همه‌ی خطاها در صفحه‌ی خطاها است.

DELETE /v1/promotions/{variant_id} — پایان تخفیف فعال

Section titled “DELETE /v1/promotions/{variant_id} — پایان تخفیف ”

تخفیف فعال تنوع را در دیجی‌کالا حذف می‌کند و وضعیت تخفیف پس از حذف را برمی‌گرداند. اگر تنوع تخفیف فعالی نداشته باشد، کد 422 و خطای promotion_not_active برمی‌گردد. خطاهای digikala_refused، digikala_rate_limited و digikala_unavailable همان معنی مسیر ثبت را دارند.

POST /v1/promotions/batch — تخفیف گروهی در صف فاز ۲

Section titled “POST /v1/promotions/batch — تخفیف گروهی در صف ”

تا ۱۰۰ تنوع در هر درخواست، یکی از دو شکل:

  • با قیمت جداگانه برای هر تنوع (items)؛
  • با یک درصد برای همه (variant_ids و pct، درصد نسبت به قیمت مرجع، بیشتر از ۰ و کمتر از ۹۰).

هر قلم با همان قواعد تخفیف تکی بررسی می‌شود. با replace_live: false تنوع‌هایی که تخفیف فعال دارند دست نمی‌خورند (پیش‌فرض true). مدت با days (پیش‌فرض ۷). پاسخ 202 با کار promotion_batch؛ نتیجه با GET /v1/jobs/{job_id} و رویداد job.completed (کارهای در صف).

POST /v1/promotions/batch HTTP/1.1
Host: api.seller360.ir
Authorization: Bearer s360_live_...
Idempotency-Key: promo-batch-yalda-1405
Content-Type: application/json
{ "variant_ids": [84780448, 84780449], "pct": 5, "days": 3, "replace_live": false }

GET /v1/promotion-settings و PUT — تخفیف پله‌ای و تمدید خودکار فعال

Section titled “GET /v1/promotion-settings و PUT — تخفیف پله‌ای و تمدید خودکار ”

با PUT فقط فیلدهای ارسال‌شده تغییر می‌کنند و دست‌کم یک فیلد لازم است. هر مقدار بیرون از بازه‌ی خود با خطای invalid_parameter رد می‌شود. فقط تنظیمات سلر ۳۶۰ تغییر می‌کند.

PUT /v1/promotion-settings HTTP/1.1
Host: api.seller360.ir
Authorization: Bearer s360_live_...
Idempotency-Key: promo-settings-2026-11-12
Content-Type: application/json
{ "step_enabled": true, "step_pct": 3, "step_max_pct": 15, "renew_enabled": true }

پاسخ نمونه

{
"status": "ok",
"data": {
"step_enabled": true,
"step_window_days": 14,
"step_max_sales": 1,
"step_pct": 3.0,
"step_every_days": 7,
"step_max_pct": 15.0,
"step_min_stock": 1,
"renew_enabled": true,
"renew_days": 7,
"renew_before_hours": 24,
"last_run_at": "2026-11-12T10:00:00+03:30",
"last_run_note": "۳ تخفیف تمدید و ۲ پله‌ی تازه ثبت شد."
}
}

GET /v1/campaigns — کمپین‌های باز فعال

Section titled “GET /v1/campaigns — کمپین‌های باز ”

کمپین‌هایی که مهلت پیوستن به آن‌ها نگذشته است، نزدیک‌ترین مهلت اول؛ در لحظه از دیجی‌کالا خوانده می‌شود.

{
"status": "ok",
"data": [
{
"id": 30512,
"title": "شگفت‌انگیز آخر هفته",
"nature": "incredible_offer",
"status": "open",
"start_at": "2026-11-20T00:00:00+03:30",
"end_at": "2026-11-22T00:00:00+03:30",
"join_deadline": "2026-11-17T23:59:00+03:30",
"deadline_passed": false,
"conditions": ["حداقل ۱۰ درصد تخفیف", "حداقل ۵ عدد کالا"],
"min_discount_pct": 10,
"min_qty": 5,
"potential_variants": 37,
"participants": 1240,
"joined": false,
"commission_discount": true,
"link": null,
"synced_at": "2026-11-12T10:30:02+03:30"
}
]
}

GET /v1/campaigns/{campaign_id} — یک کمپین فعال

Section titled “GET /v1/campaigns/{campaign_id} — یک کمپین ”

شرایط کمپین (campaign)، باز بودن مهلت (open)، کالاهای شما در کمپین (mine) و کالاهایی که می‌توانند بپیوندند (candidates، فقط تا پیش از مهلت). کمپین ناموجود: 404 campaign_not_found.

POST /v1/campaigns/{campaign_id}/join — پیوستن به کمپین فاز ۳

Section titled “POST /v1/campaigns/{campaign_id}/join — پیوستن به کمپین ”

تا ۵۰ تنوع در هر درخواست. حداقل قیمت شما در کمپین هم مرز قطعی است: کالای بدون حداقل قیمت نمی‌پیوندد و قیمت پیشنهادی کمتر از حداقل رد می‌شود. پاسخ 202 با کار campaign_join (هشدار ۴).

POST /v1/campaigns/30512/join HTTP/1.1
Host: api.seller360.ir
Authorization: Bearer s360_live_...
Idempotency-Key: campaign-30512-join-01
Content-Type: application/json
{ "items": [ { "variant_id": 84780448, "price": 21990000, "qty": 10, "order_limit": 2 } ] }
فیلد هر قلم نوع اجباری توضیح
variant_id عدد بله شناسه‌ی تنوع.
price عدد بله قیمت پیشنهادی در کمپین به ریال، مضرب ۱۰۰ و حداکثر برابر cap کالا.
qty عدد بله تعداد کالا در کمپین؛ دست‌کم برابر min_qty کمپین.
order_limit عدد خیر سقف تعداد در هر سفارش.
کد HTTP خطا معنی تکرار بی‌خطر است؟
400 invalid_parameter بدنه نامعتبر است. خیر؛ بدنه را اصلاح کنید.
404 campaign_not_found کمپینی با این شناسه برای این پنل نیست. خیر.
422 campaign_closed مهلت پیوستن گذشته است. خیر.
409 idempotency_mismatch این کلید یکتا قبلا با بدنه‌ی دیگری استفاده شده است. خیر؛ کلید تازه بسازید.

POST /v1/campaigns/{campaign_id}/leave — خروج از کمپین فاز ۳

Section titled “POST /v1/campaigns/{campaign_id}/leave — خروج از کمپین ”

بدنه: { "promotion_variant_id": 51820044 }، شناسه‌ی حضور کالا در کمپین از mine در جزئیات کمپین. پاسخ 202 با کار campaign_leave.

GET /v1/fx و GET /v1/fx/variants — قیمت ارزی فعال

Section titled “GET /v1/fx و GET /v1/fx/variants — قیمت ارزی ”

GET /v1/fx ارزهای فعال، نرخ امروز و استراتژی‌های ارزی را برمی‌گرداند. GET /v1/fx/variants قیمت‌گذاری ارزی تنوع‌ها را با پارامترهای status و strategy_id فهرست می‌کند.

PUT /v1/fx/variants/{variant_id} و POST .../confirm — تغییر قیمت ارزی فعال

Section titled “PUT /v1/fx/variants/{variant_id} و POST .../confirm — تغییر قیمت ارزی ”

PUT با بدنه‌ی { "strategy_id": 7 } استراتژی ارزی تنوع را تعیین می‌کند و strategy_id: null آن را برمی‌دارد (استراتژی ناموجود: 404 fx_strategy_not_found). confirm قیمت منتظر تایید را در صف تغییر دستی می‌گذارد (202، کار fx_confirm)؛ اگر قیمتی منتظر تایید نباشد، 422 fx_no_pending_price.

همه‌ی رویدادهای این بخش با دسترسی promotions:read دریافت می‌شوند.

رویداد چه وقت
promotion.ending تخفیفی که دستی یا بیرون از سلر ۳۶۰ ثبت شده، کمتر از ۲۴ ساعت دیگر تمام می‌شود و تمدید خودکار خاموش است. تخفیف‌های ربات و تخفیف پله‌ای این رویداد را نمی‌فرستند؛ آن‌ها به‌موقع جایگزین می‌شوند.
promotion.rejected دیجی‌کالا ثبت یا ویرایش تخفیف هوشمند (kind: smart_discount) یا حضور کالا در کمپین (kind: campaign) را رد کرد. تنوع‌هایی که ربات با تخفیف هوشمند قیمت‌گذاری می‌کند این رویداد را نمی‌فرستند؛ ربات خودکار به روش عادی برمی‌گردد.
promotion.below_floor تخفیف فعال یک تنوع کمتر از حداقل قیمت شماست (هشدار ۵).

نمونه‌ی پیام promotion.rejected

{
"id": "evt_01J0D9KP",
"type": "promotion.rejected",
"created_at": "2026-11-13T09:12:40+03:30",
"panel_id": 1,
"livemode": true,
"data": {
"variant_id": 84780448,
"sku": "PE-5144",
"kind": "campaign",
"campaign_id": 30512,
"reason": "قیمت تخفیف از سقف مجاز بیشتر است."
}
}

پیام‌ها ممکن است تکراری یا جابه‌جا برسند (معرفی وب‌هوک). پیش از استفاده از هر پیام، امضای آن را بررسی کنید.

💻 نمونه‌کد: ثبت تخفیف هوشمند

Section titled “💻 نمونه‌کد: ثبت تخفیف هوشمند”
Terminal window
curl -X PUT https://api.seller360.ir/v1/promotions/84780448 \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Idempotency-Key: promo-84780448-1405-08-22" \
-H "Content-Type: application/json" \
-d '{"price": 23290000, "days": 7, "order_limit": 2}'