List Send Plan Products
GET/api/send-plans/:sendPlan/lines
List a plan's results one product per row: the product, its source pool (available, protected, sendable, total need and send, shortfall, units left over, and pool.sources — per source warehouse: available, kit-buildable and inbound units with the nearest inbound ETA and reference, and whether it serves your own orders), product-level flags, and that product's line for every network nested in lines.
send-plans:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Bearer Personal Access Token with the send-plans:read scope. The token's user also needs permission to view the send planner.
Filters:
- filter[search]: matches a product ID exactly, or SKU / product name (partial), and also the product's listing identifiers: msku (Amazon seller SKU), asin, fnsku, walmart_sku and tiktok_sku. Restrict with search_columns (id, sku, name, msku, asin, fnsku, walmart_sku, tiktok_sku); use search_strict_columns for exact matches.
- filter[network]: products with units going to these networks (comma-separated: amazon_fba, amazon_awd, walmart_wfs, tiktok_fbt).
- filter[has_send]: true = products sending something, false = sending nothing.
- filter[short]: true = products with a shortfall, false = without.
- filter[exception]: products with any exception flag, or (comma-separated) only these flags.
- filter[edited]: products with at least one overridden line.
- filter[line_status]: products with a line in these states (pending, held, drafted, skipped).
- filter[destination]: products listed on these networks (destination warehouse IDs), whatever they send.
- filter[sends_to]: products this plan sends at least one unit to on these networks (destination warehouse IDs) — what the plan summary's per-network rows filter by.
- filter[brand_id], filter[product_type], filter[product_id], filter[category_id], filter[supplier_id] (products the supplier carries): comma-separated lists.
- filter[restock_alert]: lines carrying the marketplace's own restock alert (comma-separated, e.g. out_of_stock, low_stock); healthy = the marketplace reported on the SKU and raised no alert.
- filter[has_network_rec]: true = at least one line has the network's own recommendation, false = none has.
- filter[has_network_stock]: true = at least one network holds stock of the product, false = none does.
- Operator filters
filter[{column}.{operator}]on text columns sku, name (contains, does_not_contain, is, is_not, is_one_of, is_not_one_of, starts_with, does_not_start_with, ends_with, does_not_end_with, is_empty, is_not_empty) and numeric columns available, reserved_local, sendable, total_need, total_send, shortfall, leftover (is, is_not, is_one_of, is_not_one_of, greater_than, less_than, greater_than_or_equal, less_than_or_equal, between, is_empty, is_not_empty). - Per-network numeric filters
filter[n{destination_warehouse_id}_{metric}.{operator}], where metric is on_hand, inbound, velocity, need, send, cover_before or cover_after (e.g. filter[n12_cover_before.less_than]=14). - Analysis filters: text abc, xyz; numeric demand_trend, sell_through, sold_30d, sold_60d, sold_90d, sold_180d, monthly_avg, daily_avg, gross_margin, average_cost, stock_value, overstock, turnover, reorder_point.
- filter_groups: base64-encoded JSON AND/OR tree of the same columns and operators, as an alternative to individual filters.
Allowed sorts: id (product ID), sku, name, available, reserved_local, sendable, total_need, total_send, shortfall, leftover; urgency (fewest days of cover on any selling network today, most urgent first); net_{destination_warehouse_id} (that network's days of cover today); n{destination_warehouse_id}_{metric} for metric on_hand, inbound, velocity, need, send, rec, reserved, days_of_supply, cover_before, cover_after; and the analysis columns listed above. Computed sorts put empty values last. Prefix with - for descending. Default: -total_send.
Pagination: page, per_page (default 25).
Pass with_explanation=1 to include each line's step-by-step explanation of how its quantity was reached. Pass exclude_sales_destination={destination_warehouse_id} to report the analysis sales figures without that network's own sales (analysis.sales_excluding_network is then true).
Line fields: network (amazon_fba, amazon_awd, walmart_wfs, tiktok_fbt), status (ok | stranded | ineligible | not_listed | new — the listing's state on that network) and status_reason; velocity (raw and used units/day, source, stockout days in the window); stock at the network (on_hand, inbound, open_drafts, upstream_credit — units already in a buffer network such as AWD that will flow on); lead_days, target_days, floor_days, weight; need and floor_need; suggested_qty (the planner's answer), override_qty with reason/note/user/time, and final_qty (override if set, otherwise suggested); case_pack and cases; cover_before_days / cover_after_days; network_recommendation (the marketplace's own suggestion, when it publishes one); flags; line_status (pending | held | drafted | skipped) and resolution.
lanes splits the line across source warehouses: quantity per source, whether the units are held, the hold expiry, and the network draft it was handed to.
Flags: short, floor_short, stockout_before_arrival, stranded, ineligible, new_listing, capacity_cap, requires_build, stale_data, blackout, diverges_from_network, all_protected, lane_limited (the network's allowed source warehouses can't cover its need).
Each line's network_recommendation is the network's own suggestion when it publishes one (qty, source such as amazon_restock, why when it differs from the plan) plus meta from that report: alert (e.g. out_of_stock, low_stock), ship_by (Y-m-d), days_of_supply, units_sold_30d and as_of.
Each row's product also carries average_cost and the measurements needed to size a shipment: unit_weight_lb, unit_volume_cuft, case_weight_lb and case_volume_cuft (converted to pounds and cubic feet; null when the product has no such data).
Each row's product also carries image_url (primary image, or null) and abc_classification. analysis holds the product's planning metrics: abc, xyz, demand_trend_pct and demand_trend (up | down | flat), sell_through, sold_30d / 60d / 90d / 180d, monthly_avg, daily_avg, sales_excluding_network, gross_margin_pct, average_cost, stock_value, total_on_hand, overstock, turnover and reorder_point.
Each line also carries: velocity.status (applied | capped | insufficient_data | none — how the stock-out adjustment was applied), velocity.window_days and velocity.meta (how the velocity was measured); reserved (units the network holds back from sale); network_days_of_supply (the marketplace's own days of supply); identifiers (the IDs the product ships under on that network, such as msku, asin, fnsku or seller_sku); meta (the allocation rules behind the quantity: buffer days, capacity share, shelf life, packing and favored-network details); and protected_stock_used (units of stock kept for self-fulfilled orders that an edit used). Each lane also carries draft_route (relative path that opens the network draft the units went to) and, for units planned from incoming supply, incoming_ref_type and incoming_ref_id (the purchase or manufacturing order they come from).
Line meta also carries on_order / on_order_note (units on supplier POs shipping straight to the network, already inside inbound, e.g. "PO-0001 (draft) 800 in 28 d") and supplier_direct when your warehouses can't cover the network's need but a supplier that ships direct can: supplier_id, supplier_name, quantity (whole cases, at least the supplier minimum), unmet, lead_days, later_by_days, minimum_order_quantity, prep_notes and, once ordered, purchase_order {id, number}. Such lines carry the supplier_direct flag. filter[sends_to] (destination warehouse ids) keeps products this plan sends at least one unit to there.
Request
Responses
- 200
- 401
- 403
- 404
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.