Offer Excel Import/Export Format (Seller) ========================================= Overview -------- - No ID columns are used. Import uses the authenticated seller only. - Products and options are matched by `slug` (or `label`/`value` when noted). - Additional items are matched by `additional_item_label` and must be approved. - Export returns a ZIP of CSV files (each sheet = one CSV). Excel can edit CSVs. - Import accepts the same ZIP of CSVs. Unknown columns are ignored. Workbook Sheets (CSV Files) --------------------------- File: Meta.csv - key - value Suggested rows: - template_version | 1 - generated_at | 2026-01-05T12:00:00Z File: Offers.csv - product_slug (required) - unit_price (base price) - stock - currency - status (enable/disable) File: SellerTypes.csv - product_slug (required) - seller_type_slug (required) - seller_type_item_slug (required) - seller_type_group_name (optional; used if a type belongs to multiple groups) File: StandardModifiers.csv - product_slug (required) - option_slug (required) - option_item_slug (preferred) OR option_item_value - operator (+ - % * /) - value - apply_on (base/current) File: AdditionalModifiers.csv - product_slug (required) - additional_item_label (required) - operator (+ - % * /) - value - apply_on (base/current) - bound_option_slug (optional; helps disambiguate label) File: LevelPricingRules.csv - product_slug (required) - option_slug (required, must be level type) - mode (fixed/variant) - min_level_label (required) - max_level_label (required) - operator (+ - % * /) - per_step_value (required for fixed) - apply_on (base/current) File: LevelPricingSteps.csv - product_slug (required) - option_slug (required) - from_level_label (required) - to_level_label (required) - operator (+ - % * /) - value - apply_on (base/current) Rules ----- - Rows with missing required fields are skipped with a row-level error. - If the offer does not exist, `unit_price` is required to create it. - Seller type selections are replaced only when valid rows exist for a product. - Binding rules apply (seller type ↔ options/items); invalid rows fail with errors. - Additional items must already exist, be approved, and belong to the seller. - Level selections match by label (or numeric value if label is numeric). - Large imports can be queued with `async=1`; poll the status endpoint for progress. API Endpoints ------------- - GET `/api/seller/offers/template` -> ZIP with CSV headers - GET `/api/seller/offers/export` -> ZIP with CSV data - POST `/api/seller/offers/import` -> accept ZIP, returns per-row errors (optional `async=1`) - GET `/api/seller/offers/imports/{id}` -> poll async import status and row-level errors