List Inbound Plans
GET/api/tiktok-shop/:integrationInstance/fbt/inbound-plans
Paginated list of Fulfillment by TikTok inbound plans for one integration instance.
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
A plan is the seller's intent: the goods, quantities, cartons and the source they ship from. status moves DRAFT → SUBMITTING → PLANNED → CONFIRMED, with CANCELLED and ERROR as terminal outcomes. Once a placement is confirmed the plan is a locked historical record and the shipment belongs to the inbound orders it minted.
Every capability flag ships with a reason: can_submit / can_submit_reason, can_cancel / can_cancel_reason, can_confirm / can_confirm_reason, and is_locked / is_locked_reason. The reason is null exactly when the action is allowed. source_link_status is unresolved, auto or confirmed, and source_blocks_flows is true while no source has been resolved.
Rows in this list carry lines_count and inbound_orders_count; the nested lines, cartons, placement_options and inbound_orders collections are returned by the single-plan read instead.
Filters — every key below is sent as filter[<key>].
Text filters (bare key is an exact match; each also accepts <key>.<operator>): status, source_type, inbound_type, idempotent_key, tiktok_plan_id.
Text operators: 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.
Numeric filters (bare key plus <key>.<operator>): id, source_warehouse_id, source_supplier_id, created_by_user_id.
Numeric operators: 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.
Date/time filters (bare key plus <key>.<operator>, values are dates such as 09/15/2026 or 2026-09-15, and between takes two comma-separated values): confirmed_at, created_at.
Date operators: is, is_not, before, after, on_or_before, on_or_after, between, is_empty, is_not_empty, today, yesterday, tomorrow, past_week, past_month, past_year, next_week, next_month, next_year, days_ago, days_from_now, past_days, next_days.
Boolean filter: source_confirmed.is (true/false). This one has no bare key — always send the .is form.
Free-text: filter[search] matches the plan reference (idempotent_key), the TikTok plan id, and — through the plan's lines — the seller SKU, TikTok SKU id and FBT goods id. Narrow it with the top-level search_columns parameter (comma-separated, chosen from idempotent_key, tiktok_plan_id, lines.seller_sku, lines.tiktok_sku_id, lines.tiktok_goods_id), and force exact matching on any of those with search_strict_columns.
Advanced filter trees may also be sent as filter_groups — a base64-encoded JSON object of {conjunction, children[]} where each child is {type: "condition", condition: {column, operator, value}}. Columns and operators must be among the ones listed above.
Sorting — sort accepts id, status, inbound_type, source_type, confirmed_at, created_at, updated_at. Prefix with - for descending. Default: -id.
Pagination — page and per_page (default 10).
Requires an authenticated token. No extra permission is needed for this read.
Response addition: total_units, summed in SQL via withSum — the Units column reads it. Null (not 0) when neither the sum nor the lines relation is present, so "unknown" never renders as "no units".
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.