رفتن به محتوا

ساخت تنوع و کالای تازه

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

در دیجی‌کالا دو راه برای فروش کالای تازه وجود دارد: اگر کالا (کد DKP) از قبل در دیجی‌کالا هست، روی آن تنوع می‌سازید (رنگ یا اندازه، گارانتی، قیمت و موجودی)؛ اگر نیست، کالای تازه می‌سازید که پیش از فروش باید تیم محتوای دیجی‌کالا آن را تایید کند. اگر تیم محتوا کالایی را برگشت دهد، باید آن را ویرایش و دوباره ارسال کنید. سلر ۳۶۰ هر سه کار را مثل صفحه‌ی «درج کالا و تنوع» پنل انجام می‌دهد: هر ردیف پیش از ارسال با همان بررسی‌های پنل سنجیده می‌شود، ساخت‌ها در صف و یکی‌یکی انجام می‌شوند و نتیجه‌ی هر ردیف با کار ثبت‌شده و وب‌هوک اعلام می‌شود.

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

کار مسیر در دسترس
فهرست درخواست‌های ساخت تنوع GET /v1/catalog/variant-requests فعال
ساخت تنوع‌های تازه (در صف) POST /v1/catalog/variant-requests فعال
یک درخواست با وضعیت هر ردیف GET /v1/catalog/variant-requests/{request_id} فعال
خارج کردن ردیف‌های در صف از ساخت POST /v1/catalog/variant-requests/{request_id}/cancel فعال
کالاهای تازه و وضعیت تایید محتوا GET /v1/catalog/product-drafts فعال
ساخت کالای تازه (در صف) POST /v1/catalog/product-drafts فعال
یک کالای تازه GET /v1/catalog/product-drafts/{draft_id} فعال
کالاهای برگشتی از تیم محتوا GET /v1/catalog/returned-products فعال
کالای برگشتی با دلایل برگشت GET /v1/catalog/returned-products/{product_id} فعال
ویرایش کالای برگشتی و ارسال دوباره PUT /v1/catalog/returned-products/{product_id} فعال

و با رویدادهای وب‌هوک variant.request_completed و product.moderation_changed از پایان ساخت و تغییر وضعیت تایید محتوا خبردار شوید.

دسترسی برچسب در پنل برای
catalog:read «خواندن کاتالوگ کالا» همه‌ی مسیرهای خواندن این صفحه، و جست‌وجوی دسته و برند
catalog:write «تغییر کاتالوگ و جفت کردن کد کالا» ساخت تنوع و کالا، لغو ردیف‌ها و ویرایش کالای برگشتی

فعال بودن ماژول و اشتراک

Section titled “فعال بودن ماژول و اشتراک”

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

آنچه پیش از ساخت لازم دارید

Section titled “آنچه پیش از ساخت لازم دارید”
برای از کجا
کد کالا (product_id) برای ساخت تنوع صفحه‌ی کالا در دیجی‌کالا، یا GET /v1/products برای کالاهای پنل خودتان
شناسه‌ی دسته‌ی برگ (category_id) برای کالای تازه GET /v1/catalog/categories
شناسه‌ی برند (brand_id) برای کالای تازه GET /v1/catalog/brands
https://api.seller360.ir

درخواست ساخت تنوع (VariantRequest)

Section titled “درخواست ساخت تنوع (VariantRequest)”

یک درخواست تا ۳۰۰ ردیف دارد و هر ردیف یک تنوع است.

فیلد برچسب در پنل معنی
id — شناسه‌ی درخواست.
source — از کجا ساخته شد: builder «تنوع جدید»، similar «تنوع مشابه»، panel «کپی از پنل دیگر»، excel «فایل اکسل» یا api.
title — نام دلخواه شما برای پیگیری.
created_at، finished_at — زمان ثبت و پایان.
counts — تعداد ردیف‌ها در هر وضعیت.
items — ردیف‌ها؛ فقط در پاسخ یک درخواست و در وب‌هوک.
فیلد اجباری معنی
product_id بله کد DKP کالایی که تنوع روی آن ساخته می‌شود؛ اگر کالا در پنل شما نباشد، ابتدا به پنل افزوده می‌شود.
theme_value_id خیر شناسه‌ی رنگ یا اندازه از تنظیمات کالا در دیجی‌کالا؛ برای کالای بدون تنوع خالی.
warranty_id بله شناسه‌ی گارانتی.
shipping_type بله digikala «ارسال دیجی‌کالا»، seller «ارسال فروشنده» یا both هر دو.
three_hour_delivery خیر ارسال ۳ ساعته؛ ارسال فروشنده را هم لازم دارد. پیش‌فرض false.
price بله قیمت فروش به ریال.
stock بله موجودی فروشنده.
order_limit خیر سقف تعداد در هر سفارش؛ اگر فرستاده نشود ۱ در نظر گرفته می‌شود.
lead_time بله زمان آماده‌سازی به روز.
fbs_lead_time خیر زمان آماده‌سازی ارسال فروشنده به روز.
supplier_code خیر کد فروشنده‌ی تنوع تازه؛ تا ۱۰۰ نویسه.
is_active خیر تنوع پس از ساخت فعال باشد؛ پیش‌فرض true.
status معنی
waiting در صف.
sending در حال ارسال به دیجی‌کالا.
unknown ارسال شده و پاسخ دیجی‌کالا نرسیده است؛ پیش از هر کار دیگری در دیجی‌کالا جست‌وجو می‌شود و هرگز «ناموفق» گزارش نمی‌شود (هشدار ۲).
done ساخته شد؛ variant_id کد DKPC تنوع تازه است.
failed ناموفق؛ علت در message.
skipped تکراری بود: همان رنگ یا اندازه و همان گارانتی روی همان کالا از قبل وجود دارد.
cancelled پیش از ارسال لغو شد.
archived ساخته و سپس بایگانی شد.
فیلد معنی
id شناسه‌ی پیش‌نویس در سلر ۳۶۰.
status وضعیت (جدول بعد).
category_id، category_title دسته.
title_fa عنوان فارسی.
product_id کد DKP کالا در دیجی‌کالا، پس از ثبت.
moderation_status وضعیت تایید محتوا به نام دیجی‌کالا (مثلا waiting_for_confirm)؛ فهرست کامل مقادیر اعلام نشده است.
moderation_checked_at آخرین بررسی وضعیت.
source_product_id کالایی که از روی آن کپی شده است.
publish پس از ساخت برای تیم محتوا فرستاده شود.
message علت ناموفق بودن مرحله، به فارسی.
created_at، updated_at، sent_at زمان‌ها.
status کالای تازه معنی
editing در حال تکمیل.
queued در صف ساخت.
staged پیش‌نویس در دیجی‌کالا ساخته شد و برای تیم محتوا ارسال نشد (publish: false).
failed ناموفق؛ علت در message.
sent در انتظار بررسی دیجی‌کالا.
approved تایید شد.
rejected نیاز به ویرایش.
removed حذف شد.

کالایی که تیم محتوای دیجی‌کالا برای ویرایش برگشت داده است؛ چه با سلر ۳۶۰ ساخته شده باشد، چه جای دیگر.

فیلد معنی
product_id، title، image_url، category_title کالا.
status نوع برگشت به نام دیجی‌کالا: in_review یا in_review_after_approved.
first_seen_at اولین باری که سلر ۳۶۰ کالا را برگشتی دید.
last_seen_at آخرین باری که کالا برگشتی دیده شد.
resolved_at زمانی که کالا دیگر برگشتی نبود.
before_tracking کالا پیش از شروع پیگیری برگشتی بوده و first_seen_at تاریخ واقعی برگشت نیست.

جزئیات یک کالای برگشتی (ReturnedProductDetail) به‌علاوه‌ی این‌ها مشخصات پایه (basic)، ویژگی‌ها (attributes)، عکس‌ها با دلیل برگشت هر عکس، دلایل برگشت هر بخش (reasons)، فیلدهای قابل ویرایش (enabled_fields؛ خالی یا ALL یعنی همه) و locked را دارد.

  • ساخت تنوع: هر پنل حداکثر یک ساخت در هر ۱۵ ثانیه دارد؛ درخواستی با ۳۰۰ ردیف دست‌کم ۷۵ دقیقه طول می‌کشد. ربات قیمت‌گذاری اولویت دارد: تا وقتی مسیر تغییر قیمت ربات در دیجی‌کالا به سقف رسیده است، ساختی فرستاده نمی‌شود. اگر دیجی‌کالا به ساختی پاسخ «تعداد درخواست بیش از حد» (429) بدهد، صف پنل تا زمان اعلام‌شده‌ی دیجی‌کالا متوقف می‌شود.
  • تایید محتوا: وضعیت کالاهای تازه هر ۳۰ دقیقه از دیجی‌کالا بررسی و تغییر آن با product.moderation_changed اعلام می‌شود.
  • کالاهای برگشتی: فهرست هر ۳۰ دقیقه از دیجی‌کالا به‌روز می‌شود. جزئیات یک کالا همان لحظه از دیجی‌کالا خوانده می‌شود تا دلایل و فیلدهای قابل ویرایش تازه باشند.

POST /v1/catalog/variant-requests — ساخت تنوع‌های تازه فعال

Section titled “POST /v1/catalog/variant-requests — ساخت تنوع‌های تازه ”
POST /v1/catalog/variant-requests HTTP/1.1
Host: api.seller360.ir
Authorization: Bearer s360_live_...
Idempotency-Key: colors-PE5144-1405-08-23
Content-Type: application/json
{
"title": "رنگ‌های تازه‌ی PE5144",
"rows": [
{
"product_id": 22961150,
"theme_value_id": 2,
"warranty_id": 18421,
"shipping_type": "digikala",
"price": 32500000,
"stock": 10,
"order_limit": 5,
"lead_time": 1,
"supplier_code": "5144"
}
]
}
فیلد بدنه نوع اجباری توضیح
title متن خیر نام دلخواه برای پیگیری؛ تا ۲۰۰ نویسه.
rows فهرست بله تا ۳۰۰ ردیف؛ ساختار هر ردیف در جدول «ردیف ورودی» بالا.

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

{
"status": "ok",
"data": {
"id": "job_3b91d4",
"kind": "variant_request",
"status": "queued",
"created_at": "2026-11-13T11:02:15+03:30",
"finished_at": null,
"result": null
}
}

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

کد HTTP خطا معنی تکرار بی‌خطر است؟
400 invalid_parameter فیلدی نادرست است یا بیش از ۳۰۰ ردیف فرستاده شده است. خیر؛ بدنه را اصلاح کنید.
403 subscription_inactive اشتراک پنل فعال نیست. خیر.
409 demo_panel_unsupported این بخش در پنل نمایشی در دسترس نیست. خیر.
422 catalog_row_invalid ردیفی با قواعد دیجی‌کالا سازگار نیست؛ جزئیات در detail. خیر؛ ردیف‌ها را اصلاح کنید.
409 idempotency_mismatch این کلید یکتا قبلا با بدنه‌ی دیگری استفاده شده است. خیر؛ کلید تازه بسازید.
409 idempotency_in_progress درخواستی با همین کلید در حال انجام است. بله، چند ثانیه بعد.

اگر پاسخ همین درخواست را دریافت نکردید، آن را با همان Idempotency-Key تکرار کنید تا درخواست دوم در صف نرود.

GET /v1/catalog/variant-requests — درخواست‌ها فعال

Section titled “GET /v1/catalog/variant-requests — درخواست‌ها ”

درخواست‌های ساخت تنوع از پنل و API، تازه‌ترین اول، بدون فهرست ردیف‌ها. پارامترها: page و size.

GET /v1/catalog/variant-requests/{request_id} — یک درخواست فعال

Section titled “GET /v1/catalog/variant-requests/{request_id} — یک درخواست ”
{
"status": "ok",
"data": {
"id": 57,
"source": "api",
"title": "رنگ‌های تازه‌ی PE5144",
"created_at": "2026-11-13T11:02:15+03:30",
"finished_at": null,
"counts": { "waiting": 1, "sending": 0, "unknown": 1, "done": 2, "failed": 0, "skipped": 1, "cancelled": 0, "archived": 0 },
"items": [
{
"id": 1903,
"position": 0,
"product_id": 22961150,
"product_title": "محافظ ولتاژ پارت الکتریک مدل PE5144",
"label": "آبی · گارانتی ۱۸ ماهه پارت الکتریک · ارسال دیجی‌کالا",
"status": "done",
"variant_id": 91200417,
"message": null,
"attempts": 1,
"sent_at": "2026-11-13T11:02:31+03:30",
"finished_at": "2026-11-13T11:02:33+03:30"
},
{
"id": 1905,
"position": 2,
"product_id": 22961150,
"product_title": "محافظ ولتاژ پارت الکتریک مدل PE5144",
"label": "قرمز · گارانتی ۱۸ ماهه پارت الکتریک · ارسال دیجی‌کالا",
"status": "unknown",
"variant_id": null,
"message": null,
"attempts": 1,
"sent_at": "2026-11-13T11:03:02+03:30",
"finished_at": null
}
]
}
}

POST /v1/catalog/variant-requests/{request_id}/cancel — لغو ردیف‌های در صف فعال

Section titled “POST /v1/catalog/variant-requests/{request_id}/cancel — لغو ردیف‌های در صف ”

بدنه ندارد. ردیف‌های waiting لغو می‌شوند (هشدار ۳). پاسخ موفق: کد 200 با درخواست.

POST /v1/catalog/product-drafts — ساخت کالای تازه فعال

Section titled “POST /v1/catalog/product-drafts — ساخت کالای تازه ”

همان مراحل «کالای جدید» پنل در صف انجام می‌شود: اعتبارسنجی دسته و مشخصات، ویژگی‌ها، عنوان، تصاویر و ثبت در دیجی‌کالا.

{
"category_id": 8925,
"brand_id": 61944,
"basic": {
"model": "PE6100",
"description": "محافظ ولتاژ دیجیتال با تاخیر قابل تنظیم",
"is_iranian": true
},
"attributes": { "1290": "یخچال و فریزر" },
"images": ["https://dkstatic1.digikala.com/digikala-products/pe6100-main.jpg", "https://dkstatic1.digikala.com/digikala-products/pe6100-side.jpg"],
"publish": true
}
فیلد بدنه نوع اجباری توضیح
category_id عدد بله دسته‌ی برگ.
brand_id عدد بله برند.
source_product_id عدد خیر کپی از این کالا.
basic شیء بله مشخصات پایه با نام‌های دیجی‌کالا (model، description، advantages، disadvantages، is_iranian، ابعاد و وزن بسته و کالا، …).
attributes شیء بله مقدار ویژگی‌های دسته؛ کلید شناسه‌ی ویژگی است.
title_fa، title_en متن خیر تا ۳۰۰ نویسه؛ title_fa خالی یعنی عنوان پیشنهادی دیجی‌کالا.
images فهرست نشانی بله ۱ تا ۱۵ نشانی؛ اولی عکس اصلی است. در حال حاضر فقط نشانی‌های میزبان تصویر دیجی‌کالا (https://dkstatic*.digikala.com) پذیرفته می‌شوند، همانند «کپی کالا» در پنل.
publish true یا false خیر false: فقط پیش‌نویس در دیجی‌کالا ساخته شود و برای تیم محتوا نرود. پیش‌فرض true.

پاسخ موفق: کد 202 با کار product_draft. خطاها همانند ساخت تنوع‌اند.

GET /v1/catalog/product-drafts و GET /v1/catalog/product-drafts/{draft_id} — کالاهای تازه فعال

Section titled “GET /v1/catalog/product-drafts و GET /v1/catalog/product-drafts/{draft_id} — کالاهای تازه ”

تازه‌ترین تغییر اول. پارامترها: page، size و status.

{
"status": "ok",
"data": {
"id": 418,
"status": "sent",
"category_id": 8925,
"category_title": "محافظ ولتاژ",
"title_fa": "محافظ ولتاژ پارت الکتریک مدل PE6100",
"product_id": 23100544,
"moderation_status": "waiting_for_confirm",
"moderation_checked_at": "2026-11-13T12:30:04+03:30",
"source_product_id": null,
"publish": true,
"message": null,
"created_at": "2026-11-13T11:40:12+03:30",
"updated_at": "2026-11-13T11:44:58+03:30",
"sent_at": "2026-11-13T11:44:58+03:30"
}
}

GET /v1/catalog/returned-products — کالاهای برگشتی فعال

Section titled “GET /v1/catalog/returned-products — کالاهای برگشتی ”

تازه‌ترین اول. پارامترها: page، size و resolved (1 برطرف‌شده، 0 هنوز برگشتی).

GET /v1/catalog/returned-products/{product_id} — جزئیات و دلایل برگشت فعال

Section titled “GET /v1/catalog/returned-products/{product_id} — جزئیات و دلایل برگشت ”

همان لحظه از دیجی‌کالا خوانده می‌شود؛ اگر دیجی‌کالا پاسخ ندهد، کد 503 با خطای digikala_unavailable و سرآیند Retry-After برمی‌گردد.

{
"status": "ok",
"data": {
"product_id": 22961150,
"category_id": 8925,
"brand_id": 61944,
"brand_title": "پارت الکتریک",
"title_fa": "محافظ ولتاژ پارت الکتریک مدل PE5144",
"title_en": "Part Electric PE5144 Voltage Protector",
"suggested_title_fa": null,
"basic": { "model": "PE5144" },
"attributes": { "1290": "یخچال و فریزر" },
"images": [
{ "id": "img_71203", "url": "https://dkstatic.digikala.com/digikala-products/a1b2c3.jpg", "is_main": true, "active": true, "reasons": ["پس‌زمینه‌ی عکس اصلی باید سفید باشد."] }
],
"reasons": { "title_fa": [], "model": ["مدل با عنوان هم‌خوانی ندارد."], "attributes": {}, "images": {}, "other": {} },
"moderation_status": "in_review",
"enabled_fields": ["ALL"],
"locked": false
}
}

PUT /v1/catalog/returned-products/{product_id} — ویرایش و ارسال دوباره فعال

Section titled “PUT /v1/catalog/returned-products/{product_id} — ویرایش و ارسال دوباره ”

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

{
"basic": { "model": "PE5144" },
"title_fa": "محافظ ولتاژ یخچال پارت الکتریک مدل PE5144",
"images": [ { "id": "img_71210", "active": true }, { "id": "img_71203", "active": false } ]
}
فیلد بدنه نوع توضیح
title_fa، title_en متن تا ۳۰۰ نویسه.
basic شیء فقط کلیدهای تغییرکرده.
attributes شیء فقط ویژگی‌های تغییرکرده؛ کلید شناسه‌ی ویژگی.
images فهرست ترتیب و فعال بودن عکس‌های موجود؛ اولی عکس اصلی است.

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

{
"status": "ok",
"data": {
"moderation_status": "waiting_for_confirm",
"mismatch": [],
"product": { "product_id": 22961150, "title_fa": "محافظ ولتاژ یخچال پارت الکتریک مدل PE5144", "locked": true }
}
}

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

کد HTTP خطا معنی تکرار بی‌خطر است؟
404 not_found این کالا برگشتی نیست یا در این پنل نیست. خیر.
409 product_locked_for_moderation تیم محتوا در حال بررسی کالاست. خیر؛ پس از پایان بررسی.
409 demo_panel_unsupported این بخش در پنل نمایشی در دسترس نیست. خیر.
502 digikala_refused دیجی‌کالا ویرایش را نپذیرفت؛ هیچ تغییری ثبت نشد. پس از بررسی علت در detail.
503 digikala_unavailable دیجی‌کالا در دسترس نیست. بله، پس از Retry-After؛ با همان Idempotency-Key.
503 digikala_rate_limited سقف درخواست دیجی‌کالا برای این پنل پر است. بله، پس از Retry-After.
رویداد چه وقت
variant.request_completed هیچ ردیفی از یک درخواست ساخت تنوع در صف، در حال ارسال یا در انتظار پاسخ نمانده است؛ با وضعیت هر ردیف و شناسه‌ی تنوع‌های ساخته‌شده.
product.moderation_changed وضعیت تایید محتوای کالایی تغییر کرد: کالای ساخته‌شده با سلر ۳۶۰ (source: draft) یا کالایی که برگشت داده شده یا برگشت آن برطرف شده است (source: returned).
job.completed کار ساخت تنوع یا کالای تازه تمام شد.

نمونه‌ی پیام product.moderation_changed

{
"id": "evt_01J0E8NB",
"type": "product.moderation_changed",
"created_at": "2026-11-14T09:30:06+03:30",
"panel_id": 1,
"livemode": true,
"data": {
"product_id": 23100544,
"source": "draft",
"draft_id": 418,
"moderation_status": "approved",
"previous_moderation_status": "waiting_for_confirm",
"draft": { "id": 418, "status": "approved", "product_id": 23100544, "title_fa": "محافظ ولتاژ پارت الکتریک مدل PE6100" },
"returned_product": null
}
}

پیام variant.request_completed در data.request همان ساختار یک درخواست را با همه‌ی ردیف‌ها دارد. پیش از استفاده از هر پیام، امضای آن را بررسی کنید.

💻 نمونه‌کد: ساخت تنوع تازه

Section titled “💻 نمونه‌کد: ساخت تنوع تازه”
  1. درخواست را با POST /v1/catalog/variant-requests بفرستید و data.id کار را نگه دارید.
  2. منتظر رویداد variant.request_completed بمانید، یا هر چند ثانیه کار را بخوانید.
  3. برای ردیف‌های done، variant_id تازه را با PUT /v1/variants/{variant_id}/sku به کد کالای سایت خود جفت کنید.
Terminal window
curl -X POST https://api.seller360.ir/v1/catalog/variant-requests \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Idempotency-Key: colors-PE5144-1405-08-23" \
-H "Content-Type: application/json" \
-d '{"rows": [{"product_id": 22961150, "theme_value_id": 2, "warranty_id": 18421,
"shipping_type": "digikala", "price": 32500000, "stock": 10, "lead_time": 1}]}'