Set Inbound Plan Source
POST/api/tiktok-shop/:integrationInstance/fbt/inbound-plans/:plan/set-source
Set — or confirm — where the plan's stock ships from.
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
Body
source_warehouse_id(integer, nullable) — required whensource_supplier_idis absent, and prohibited when it is present. Must be an existing warehouse.source_supplier_id(integer, nullable) — required whensource_warehouse_idis absent. Must be an existing supplier.source_type(string, optional) —3pl,supplierordirect.
Exactly one of a warehouse or a supplier: a plan claiming both has no answer to what shipping should decrement. Both source fields are always written, including the null one, and source_confirmed is set to true.
If the plan already holds source reservations, they are released and re-run against the new source; check materialization_failed on the response to see whether the re-reservation cleared.
A plan that is no longer editable answers 409. The plan must belong to the integration instance in the path; a plan owned by another instance answers 404.
Requires the integrations.update permission.
Source warehouse restriction: source_warehouse_id must be a warehouse SKU.io keeps its own movement ledger for — the source is what shipping decrements. Marketplace-held warehouses (Amazon FBA/AWD, Walmart WFS, TikTok FBT, and virtual), legacy rows carrying subtype = amazon_fba, and dropship/supplier warehouses are rejected with a 422. Faire FBF is accepted: Faire exposes no inventory API, so SKU.io's ledger is the system of record for FBF stock.
Request
Responses
- 200
- 401
- 403
- 404
- 409
- 422
- 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.
Conflict
Response Headers
Unprocessable Content
Response Headers
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.