Skip to main content

Create Send Plan

POST 

/api/send-plans

Calculate a new send plan in the background: how many units of each product to send from your warehouses to every enabled marketplace network. Returns 202 immediately with the plan in calculating status; poll Get Send Plan until it is ready (or failed, with error explaining why).

Required scope: send-plans:write

Grant this scope to your token under Settings → Developer → Personal Access Tokens.

When a working plan is already calculating (started within the last two hours), the in-flight plan is returned instead of starting another. When a working plan finishes it supersedes the previous ready working plan, and line overrides from that plan are carried forward.

Authentication: Bearer Personal Access Token with the send-plans:write scope. The token's user also needs permission to edit the send planner.

Body fields (all optional):

  • type (string): working | scenario | run. Default working. A working plan replaces the current plan when it finishes; a scenario is a what-if copy that never creates drafts; a run is a weekly send run.
  • name (string, max 120): required when type is scenario.
  • scope.product_ids (integer[], max 5000): plan only these products (each must exist).
  • scope.brand_ids (integer[]): plan only products of these brands.
  • scope.saved_view_hash (string, max 64): plan only the products a saved view of the planner shows.
  • policy_overrides.velocity_window_days (integer, 7-365): days of sales history averaged for velocity.
  • policy_overrides.networks.{destination_warehouse_id}.enabled (boolean): include or exclude a network for this plan.
  • policy_overrides.networks.{destination_warehouse_id}.target_days (integer, 1-365): days of cover to aim for.
  • policy_overrides.networks.{destination_warehouse_id}.floor_days (integer, 0-365): minimum cover filled first when stock is short.
  • policy_overrides.networks.{destination_warehouse_id}.max_days (integer, 1-730): never send beyond this cover.
  • policy_overrides.networks.{destination_warehouse_id}.weight (number, 0.1-10): priority weight when stock is shared.
  • policy_overrides.networks.{destination_warehouse_id}.lead_days (integer, 0-180): transit + check-in days.
  • policy_overrides.networks.{destination_warehouse_id}.demand_multiplier (number, 0-20): scale the network's demand (e.g. 1.3 for a promotion).
  • policy_overrides.networks.{destination_warehouse_id}.buffer_days (integer, 0-180): safety days of cover on top of the target.
  • policy_overrides.networks.{destination_warehouse_id}.channel_priority (string): protect_other_channels (default) | favor_network — a favored network may use stock kept for forecast self-fulfilled demand (orders the merchant ships from their own warehouses).
  • policy_overrides.networks.{destination_warehouse_id}.demand_windows (array, max 6): date windows where the network's demand is scaled, e.g. a promotion. Each: start (Y-m-d, required), end (Y-m-d, on or after start, required), multiplier (number 0-20, required), label (string, max 120), promo_window_id (integer).
  • policy_overrides.reserve_days (integer, 0-365): days of self-fulfilled demand (orders you ship from your own warehouses: web store, eBay, Amazon FBM, wholesale…) kept back at the source warehouses.
  • policy_overrides.protect_local (boolean): when false only open orders and backorders are protected, not forecast demand.
  • policy_overrides.include_inbound_days (integer, 0-180): count open purchase / manufacturing orders arriving within this many days as sendable supply.
  • policy_overrides.local_demand_multiplier (number, 0-20): scale your own demand.
  • policy_overrides.capacity_multiplier (number, 0.1-5): scale every network capacity limit (e.g. 0.8 for capacity cut by 20%).
  • policy_overrides.rounding (string): nearest | down | up | none — case-pack rounding.
  • policy_overrides.source_warehouse_ids (integer[]): ship only from these warehouses (each must exist).
  • plan_anyway (boolean): calculate even when a network's stock snapshot is stale. Without it, a stale network fails the plan with an explanation.

Returns 422 on validation errors (for example a scenario without a name).

Request​

Responses​

Accepted

Response Headers
    Content-Type