رفتن به محتوا

پیشنهاد خرید هر کالای فیزیکی

GET
/v1/purchase-suggestions
curl --request GET \
--url 'https://api.seller360.ir/v1/purchase-suggestions?page=1&size=50&status=out_of_stock&actionable=0' \
--header 'Authorization: Bearer <token>'

هر ردیف یک کالای فیزیکی است: تنوع‌های فعال و تاییدشده با یک کد فروشنده، یا یک تنوع بدون کد (#<variant_id>). همه‌ی اعداد بر حسب واحد فیزیکی و برآوردی‌اند (estimated: true):

  • daily_sales = جمع فروش روزانه‌ی وزن‌دار (۷، ۳۰ و ۹۰ روز) تنوع‌های کنارگذاشته‌نشده × ضریب اطمینان پنل
  • stock.on_hand = seller_available + owed + warehouse_available
  • stock.total = on_hand + open_purchase_orders
  • quantity = daily_sales × (زمان تامین + روزهای پوشش + روزهای اطمینان) − stock.total (حداقل صفر)
  • order_by = امروز + stock.total ÷ daily_sales − زمان تامین − روزهای اطمینان

مقدار مثبت quantity فقط برای وضعیت‌های out_of_stock، order_now و order_soon برمی‌گردد. ترتیب: وضعیت (فوری‌تر اول)، سپس نزدیک‌ترین مهلت سفارش.

page
integer
default: 1 >= 1
size
integer
default: 50 >= 1 <= 500
status

out_of_stock «ناموجود»؛ order_now «همین حالا سفارش دهید» (مهلت امروز یا گذشته)؛ order_soon «به‌زودی سفارش دهید» (مهلت تا ۷ روز دیگر)؛ healthy «سالم»؛ overstock «مازاد» (بیش از دو برابر روزهای پوشش)؛ no_data «داده‌ی ناکافی»؛ excluded «خارج از برنامه‌ریزی».

string
Allowed values: out_of_stock order_now order_soon healthy overstock no_data excluded

فقط این وضعیت.

actionable
string
Allowed values: 0 1

فقط کالاهایی که خرید لازم دارند (1: out_of_stock، order_now یا order_soon).

group_key
string
<= 120 characters

فقط این کالای فیزیکی (کد فروشنده، یا #<variant_id>).

یک صفحه از پیشنهادها.

Media typeapplication/json
object
status
required
Allowed value: ok
data
required
pager
required

همان نام فیلدهای صفحه‌بندی دیجی‌کالا.

object
page
required
integer
item_per_page
required
integer
total_pages
required
integer
total_rows
required
integer
data
Array<object>
object
group_key
required

کد فروشنده، یا #<variant_id> برای تنوع بدون کد.

string
supplier_code
string | null
variant_id

پرفروش‌ترین تنوع کالا (نماینده).

integer
product_id
integer | null
title
string
image_url
string | null format: uri
status
required

out_of_stock «ناموجود»؛ order_now «همین حالا سفارش دهید» (مهلت امروز یا گذشته)؛ order_soon «به‌زودی سفارش دهید» (مهلت تا ۷ روز دیگر)؛ healthy «سالم»؛ overstock «مازاد» (بیش از دو برابر روزهای پوشش)؛ no_data «داده‌ی ناکافی»؛ excluded «خارج از برنامه‌ریزی».

string
Allowed values: out_of_stock order_now order_soon healthy overstock no_data excluded
quantity
required

تعداد پیشنهادی خرید (واحد فیزیکی).

integer
daily_sales
required

فروش روزانه پس از ضریب اطمینان.

number
days_left

stock.on_hand ÷ daily_sales.

number | null
stockout_on
string | null format: date
cover_days_total

stock.total ÷ daily_sales.

number | null
days_to_order

cover_days_total − زمان تامین − روزهای اطمینان.

number | null
order_by

آخرین مهلت ثبت سفارش خرید.

string | null format: date
confidence

میزان اطمینان به سرعت فروش؛ manual یعنی برآورد دستی شما.

string
Allowed values: high medium low manual
low_confidence
boolean
stock
required
object
seller_available
required
integer
owed
required

واحدهای برداشته‌شده‌ی تقسیم موجودی که هنوز برنگشته‌اند (موجودی فیزیکی).

integer
warehouse_available
required
integer
consignment_in_transit
required

فقط برای نمایش؛ داخل seller_available است.

integer
open_purchase_orders
required

سفارش‌داده و هنوز نرسیده.

integer
on_hand
required
integer
total
required
integer
periods
required
object
lead_time_days
required
integer
cover_days
required
integer
safety_days
required
integer
excluded
boolean
draft_quantity

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

integer
unit_cost

ریال.

integer | null
line_cost

quantity × unit_cost به ریال.

integer | null
variants
Array<object>
object
variant_id
required
integer
title
string
daily_sales
required
number
excluded
boolean
pack_size

تعداد واحد در هر بسته‌ی این تنوع.

integer
confidence
string
Allowed values: high medium low manual
quantity
required

سهم این تنوع از تعداد پیشنهادی.

integer
estimated
required

Example

{
"status": "ok",
"pager": {
"page": 1,
"item_per_page": 50,
"total_pages": 12,
"total_rows": 587
},
"data": [
{
"group_key": "5144",
"supplier_code": "5144",
"variant_id": 84780448,
"product_id": 22961150,
"status": "out_of_stock",
"quantity": 120,
"daily_sales": 3.2,
"days_left": 11.3,
"stockout_on": "2026-11-23",
"cover_days_total": 18.8,
"days_to_order": 4.8,
"order_by": "2026-11-16",
"confidence": "high",
"stock": {
"seller_available": 30,
"owed": 0,
"warehouse_available": 6,
"consignment_in_transit": 12,
"open_purchase_orders": 24,
"on_hand": 36,
"total": 60
},
"periods": {
"lead_time_days": 7,
"cover_days": 30,
"safety_days": 7
},
"draft_quantity": 0,
"unit_cost": 185000000,
"line_cost": 22200000000,
"variants": [
{
"variant_id": 84780448,
"daily_sales": 2.1,
"pack_size": 1,
"confidence": "high",
"quantity": 79
}
],
"estimated": true
}
]
}
X-Request-Id
string

کد پیگیری این درخواست.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).

پارامتر یا بدنه‌ی نامعتبر.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}
X-Request-Id
string

کد پیگیری این درخواست.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).

کلید ارسال نشده یا نامعتبر است.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}

کلید دسترسی لازم را ندارد، یا ماژول یا پنل فعال نیست.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}

سقف درخواست گذشته است.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}
Retry-After
integer

چند ثانیه صبر کنید و دوباره تلاش کنید.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).