Docs
Product Management
Pagination and error objects
Pagination object
Field | Type | Description | Required |
page_size | int64 | Number of pages, starting from 1 | No |
page_no | int64 | Number of pages, starting from 1 | Yes |
NextPagination object
Field | Type | Description | Required |
current_page_sizegroup | int64 | Number of pages | No |
total | int64 | Total | Yes |
has_more | bool | Whether it contains more | Yes |
ErrorStruct object
Field | Type | Description | Required |
code | string | Status code, non -" 0 "means an exception has occurred | Yes |
message | string | State description | Yes |
logid | string | Log-id, used for troubleshooting | Yes |
http_status_code | string | Status code
| Yes |
Update/Create Product
Upload products after merchant onboarding and store matching are completed.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/save/
Request parameters
Field | Type | Description | Required |
merchant_id | string | Merchant ID | Yes |
third_product_id | string | Third-party product ID | Yes |
category_id | string | Product category, obtained by querying the product category interface | Yes |
product_type | ProductType | Product type Enum, only supports group buying coupons for the first phase
| Yes |
attr_key_value_map | map<string,string> | Product details, the first issue only supports group buying coupon type
| Yes |
language | string | Language | No |
Group-buying coupons attributes
Field | Type | Description | Example | Required |
mininum_purchase_num | int | Number of purchase units needs to be greater than the minimum purchase quantity | "1" | No |
rec_person_num | int | Recommended number of users | "5" | Yes |
rec_person_num_max | int | Maximum number of users | "20" | No |
shop_id | LIST<string> | Stores linked to products | "[\"222\"]" | Yes |
commodity_set | int | The original price setting method of the product
| "2" | Yes |
commodity | ItemGroupStruct | Item pairing (Refer to Item pairing section below) |
| Yes |
product_name | I18nText | Product name (Refer to Product name section below) |
| Yes |
image_list | ImageStruct | Package plan (Refer to Package plan section below) |
| Yes |
origin_amount | int | Total price | "3000" | Yes |
actual_amount | int | Customers actually need to pay | "2000" | Yes |
local_currency | int | Currency corresponding to the price | "THB" | Yes |
stock_info | StockInfoStruct | Stock (Refer to Stock section below) |
| Yes |
sold_start_time | int | Product sales start date
| "1720666722000" | No |
sold_end_time | int | This only affects product display. DO not affect product status. Product sale end date
| "1752202732000" | No |
sold_time_type | int | Product Sale Date Type
| "1" | Yes |
use_type | int | Group buying method
| "1" | Yes |
limit_buy_rule | LimitBuyRuleStruct | Restricted purchasing rules (Refer to Restrict purchasing rules section below) |
| No |
use_date | UseDateStruct | Available date (Refer to Available date section below) |
| Yes |
cannot_use_date | CannotUseDateStruct | Unusable date (Refer to Unusable date section below) |
The merchant's time zone corresponds to the merchant's country/region. | No |
use_time | UseTimeStruct | Usage time (Refer to Use time section below) |
The merchant's time zone corresponds to the merchant's country/region. | Yes |
appointment | AppointmentStruct | Appointment information (Refer to Appointment information section below) |
| No |
consumption_convention | COMSUMPTION_CONVENTION | Dine-in and take-out agreement (Refer to Dine-in and take-out agreement section below) |
| Yes |
description_rich_text | NoteStruct | Other explanatory information (Refer to Other explanatory information section below) |
| No |
Cash coupons attributes
Field | Type | Description | Example | Required |
shop_id | LIST<string> | Shops bound to products | "[\"222\"]" | Yes |
product_name | I18nText | Product name (refer to Product name section below) |
Default-text is the default language. If the query passes the ID and translations cannot be found, will default-text be used? | Yes |
image | string | Package image |
Merchants can input the public network URL, and TT will be uploaded to the internal storage Recommended image quantity 2-10, each image does not exceed 5MB, recommended ratio is 4:3, recommended resolution is 780 x 585. Recommend the first image; upload high-resolution images to attract users | Yes |
origin_amount | int | Total price | "3000" | Yes |
actual_amount | int | What customers actually need to pay | "2000" | Yes |
local_currency | int | Currency corresponding to the price | "THB" | Yes |
stock_info | StockInfoStruct | Stock (refer to Stock section below) |
| Yes |
sold_start_time | int | Product sales start date, timestamp in milliseconds | "1720666722000" | No |
sold_end_time | int | Product sale end date, timestamp in milliseconds. Only affects product display. Does not affect product status. | "1752202732000" | No |
sold_time_type | int | Product sale type:
| "1" | Yes |
use_type | int | Group buying method
| "1" | Yes |
limit_buy_rule | LimitBuyRuleStruct | Restricted purchase rules (refer to Restrict purchase rules section below) |
product attr key[limit_buy_rule], limitNum must be between 1 and 99. | No |
use_date | UseDateStruct | Available date (refer to Available date section below) |
The options of day_duration: [60,45,30] The valid period is natural days. For example, the coupon purchased at 9:00 on the 1st has a valid period of 1 day and expires at 9:01 on the 2nd. | Yes |
cannot_use_date | CannotUseDateStruct | Unusable date (refer to Unusable date section below) |
Merchant time zone corresponds to the merchant domain country. | No |
use_time | UseTimeStruct | Time of use (refer to Use time section below) |
Merchant time zone corresponds to the merchant domain country. | Yes |
appointment | AppointmentStruct | Appointment information (refer to Appointment information section below) |
| No |
consumption_convention | COMSUMPTION_CONVENTION | Dine-in and take-out agreement (refer to Dine-in and take-out agreement section below) |
| Yes |
description_rich_text | NoteStruct | Other explanatory information (refer to Other explanatory information section below) |
default_text use I18N Text | No |
Product name
I18nText object
Field | Type | Description | Required |
default_text | string | Default local language text The maximum length of this field is 1000 | Yes |
translations | Map<string, string> | Multilingual translation
| No |
Item pairing
ItemGroupStruct object
Field | Type | Description | Required |
i18n_group_name | I18nText | I18n product group name | Yes |
group_name | string | Product group name | No |
total_count | int32 | Total | No |
option_count | int32 | Choose a few | Yes |
item_list | List<ItemStruct> | List of items | Yes |
allow_repeated_item | bool | Whether duplicate service units are allowed in the group | No |
ItemStruct object
Field | Type | Description | Required |
i18n_name | I18nText | I18n item name | Yes |
name | string | Item name (use I18nText object instead) | No |
price | string | Price, for example: "2000" | No |
currency | string | Currency For example: "IDR" | No |
count | int32 | Total | Yes |
image_list | List<ImageStruct> | Single product image list | No |
Package plan
ImageStruct object
Field | Type | Description | Required |
out_url | string | External image URL, merchants can pass this field. | Yes |
Stock
StockInfoStruct object
Field | Type | Description | Required |
stock_num | int64 | Stock quantity | Yes |
stock_qty_limit_type | StockQtyLimitTypeEnum
| Inventory cap type When there is no stock limit, the | Yes |
Available date
UseDateStruct object
Field | Type | Description | Required |
use_date_type | UseDateTypeEnum | Use date type
| Yes |
day_duration | int32 | How many days is the purchase date? | No |
Use time
UseTimeStruct object
Field | Type | Description | Required |
use_time_type | UseTimeTypeEnum | Use time type
| Yes |
time_period_list | List<TimePeriodStruct> | Time period list
| No |
TimePeriodStruct object
Field | Type | Description | Required |
use_start_time | string | Start time
| Yes |
use_end_time | string | End time
| Yes |
end_time_is_next_day | bool | Whether it spans days | No |
Unusable date
CannotUseDateStruct object
Field | Type | Description | Required |
enable | bool | Switcher | Yes |
days_of_week | List<DayOfWeekEnum> | Specify day of the week not available
| No |
holidays | List<int64> | Specified holidays are not available | No |
date_list | List<string> | Specified date is not available
| No |
date_period_list | List<CanNoAppointmentDatePeriod> | Unavailable date interval, description | No |
CanNoAppointmentDatePeriod object
Field | Type | Description | Required |
i18n_description | I18nText | I18n description | No |
description | string | Description | No |
from_date | string | Start date
| Yes |
to_date | string | Deadline
| Yes |
Dine-in and take-out agreement
ConsumptionConventionStruct object
Field | Type | Description | Required |
consumption_method | ConsumptionMethod | Consumption patterns
| Yes |
Appointment information (optional)
AppointmentStruct object
Field | Type | Description | Required |
need_appointment | bool | Whether to enable | No |
ahead_time_type | AheadTimeTypeEnum | Advance appointment time type
| No |
ahead_num | int32 | Advance phone reservation is required
| No |
Other explanatory information (optional)
NoteStruct object
Field | Type | Description | Required |
note_type | OtherNoteTypeEnum | Remark type TEXT = 1, (Text) TEXT = 1, (Text) | No |
content | string | Content
| No |
Restrict purchase rules (optional)
LimitBuyRuleStruct object
Field | Type | Description | Required |
enable_limit | bool | Whether to enable restricted purchases | Yes |
rule_list | list<LimitRuleItem> | List of purchase restriction rules | No |
LimitRuleItem object
Field | Type | Description | Required |
subject_type | SubjectTypeEnum | Purchase restriction subject (such as UID)
| Yes |
range_type | RangeTypeEnum | Purchase restrictions (such as order date, lifetime, etc.)
| Yes |
limit_num | i32 | Purchase limit | Yes |
dimension_type | DimensionTypeEnum | Effective dimensions (such as product, SKU, calendar, etc.)
| No |
Response parameters
Only represents submitting Good to go, and the product review status is notified through webhook.
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
Note:
- Update product info won't infect the existing product's availability. Once the update is completed, it will take effect.
- This update/save Must provide all the key&values into the 'attr_key_value_map', in another word, not support partial update. ( Can refer to update without review for partial update)
- Update flow won't change tt product-id. ( keep as the original save one)
- Strongly recommend merchants call "
product_opt_category/query/" before save product. To make sure the target shops are valid (update to date).
Product Update (Exempt From Review)
After the product upload passes the review, the product inventory and price information will be updated without review and will update immediately.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/update_free_audit/
Request parameters
Field | Type | Description | Required |
merchant_id | string | Merchant ID | Yes |
product_free_audit | ProductFreeAudit | Unapproved Update Details, Objects | Yes |
third_product_id | string | Third-party product ID | Yes |
language | string | Language | No |
ProductFreeAudit object
Field | Type | Description | Required |
third_product_id | string | Third-party product ID | Yes |
local_currency | string | Commodity currency, eg: IDR | Yes |
actual_amount | string | Product amount, eg: 12.3456 | Yes |
stock_qty_limit_type | int | Stock type
| Yes |
stock_num | int | Inventory quantity, limited inventory needs to be filled in | Yes |
Response parameters
Synchronized response, the update is successful if the request is successful.
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
Delist the Product
After the product upload passes the review, the product will be removed.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/offline
Request parameters
Field | Type | Description | Required |
merchant_id | string | Merchant ID | Yes |
third_product_id | string | Third-party product ID | Yes |
language | string | Language | Yes |
Response parameters
Synchronous response, the request is successful and the removal is successful.
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
Product Review Revocation
If a product is waiting for review, you can cancel that review so the product can be resubmitted.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/withdraw_audit
Request parameters
Field | Type | Description | Required |
merchant_id | string | Merchant ID | Yes |
third_product_id | string | Third-party product ID | Yes |
language | string | Language | Yes |
Response parameters
Synchronized response, the request is successful and the undo is successful.
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
Product List Query
Check the status and details of products after they are created or updated.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/batch_query/
Request parameters
Field | Type | Description | Required |
merchant_id | string | Merchant ID | Yes |
product_type_list | List<ProductType> | Commodity type
| Yes |
list_tab | ListTabEnum | Product status information
| Yes |
product_name | string | Product name | No |
third_shop_ids | List<string> | List of third-party shop IDs | No |
shop_ids | List<string> | TT Shop ID List | No |
language | string | Language | No |
pagination | Pagination | Pagination information | Yes |
Response parameters
Synchronized response, the request is successful and the undo is successful.
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
data | MGetProductsResponseData | Actual data | No |
MGetProductsResponseData object
Field | Type | Description | Required |
products | List<ProductListInfoStruct> | Product list information | No |
next_pagination | NextPagination | Pagination information | No |
ProductListInfoStruct object
Field | Type | Description | Required |
product_name | string | Product name | Yes |
product_id | string | Product ID | Yes |
third_product_id | string | Third-party product ID | Yes |
reject_reason | string | Reason for rejection | No |
product_type | ProductType | Product type | Yes |
product_status | ProductStatusEnum | Product status | Yes |
origin_amount | string | Original price | Yes |
actual_amount | string | Actual price | Yes |
image_url | string | Header image | Yes |
category_id | string | POI category | Yes |
category | CategoryStruct | Product category information | Yes |
sold | string | Quantity sold | No |
inventory | string | Stock | No |
stock_qty_limit_type | StockQtyLimitTypeEnum | Inventory cap type | Yes |
sold_start_time | int64 | Sales start time | Yes |
sold_end_time | int64 | Sales end time | Yes |
sold_time_type | SoldTimeTypeEnum | Sales time type | No |
bond_shops | int64 | Number of bound shops | Yes |
avaliable_shops | int64 | Number of available shops | Yes |
create_at | int64 | Creation time | Yes |
CategoryStruct object
Field | Type | Description | Required |
first_category_id | i64 | First-level category ID | Yes |
first_description | string | First-level category description | Yes |
second_category_id | i64 | Secondary Category ID | Yes |
second_description | string | Secondary category description | Yes |
third_category_id | i64 | Level 3 Category ID | Yes |
third_description | string | Third-level category description | Yes |
NextPagination object
Field | Type | Description | Required |
current_page_size | int64 | Current number of pages | Yes |
has_more | bool | Is there any more data? | No |
total | int64 | Total | No |
Product Details Inquiry
After getting the product list, view the online and audit details of a specific product.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/query/
Request parameters
Field | Type | Description | Required |
third_product_id | string | Third-party product ID | Yes |
merchant_id | string | Merchant ID | No |
online | bool | Whether online
| Yes |
language | string | Language | No |
Response parameters
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
data | GetProductResponseData | Product data | No |
GetProductResponseData object
Field | Type | Description | Required |
product_detail | ProductDetailStruct | Product details | No |
ProductDetailStruct object
Field | Type | Description | Required |
product | ProductAndSkuStruct | Commodity basic information | Yes |
audit_info | PlatformAuditStruct | Review information | No |
operator | OperatorStruct | Operation Sponsor Information | No |
product_operate_extra | ProductOperateExtra | Product operation additional information | No |
ProductAndSkuStruct object
Field | Type | Description | Required |
third_product_id | string | Third-party product ID | No |
product_id | string | Product ID | No |
category_id | string | Leaf Category ID | Yes |
product_type | common.ProductType | Commodity type DISCOUNT_VOUCHER = 2, (Group buying coupon) | Yes |
category | CategoryStruct | Product category information | No |
product_status | ProductStatusEnum | Product status
| No |
holiday_list | list<HolidayStruct> | Holiday list | No |
sold | string | Quantity sold | No |
product_full_status | ProductStatusEnum | Details page aggregation online and draft status
| No |
attr_key_value_map | map<string, string> | Additional attributes
| No |
CategoryStruct object
Field | Type | Description | Required |
first_category_id | i64 | First-level category ID | Yes |
first_description | string | First-level category description | Yes |
second_category_id | i64 | Secondary Category ID | Yes |
second_description | string | Secondary category description | Yes |
third_category_id | i64 | Level 3 Category ID | Yes |
third_description | string | Third-level category description | Yes |
HolidayStruct object
Field | Type | Required | Decription |
holiday_name | string | Yes | Holiday name |
holiday_date | string | No | Holiday dates |
holiday_id | i64 | Yes | Vacation Unique Device Identifier |
PlatformAuditStruct object
Field | Type | Description | Required |
audit_msg | string | Review information | No |
submit_time | i64 | Review submission time | No |
audit_time | i64 | Approval/rejection time | No |
audit_id | string | Review number | No |
audit_title | string | Review Title | No |
operator_role | OperatorRoleType | Operator role
| No |
OperatorStruct object
Field | Type | Description | Required |
operator_role | OperatorRoleType | Operator role
| Yes |
operator_id | string | Operator ID | No |
operator_name | string | Operator name | No |
operator_email | string | Operator mailbox | No |
ProductOperateExtra object
Field | Type | Description | Required |
operator | OperatorStruct | Operator information | No |
source | Source | Operational sources | No |
reason | string | Operational reasons | No |
operate_time | i64 | Operating time | No |
Product Category Inquiry
View the merchant categories you can use when creating or updating products.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product_opt_category/query/
Request parameters
Field | Type | Description | Required |
merchant_id | string | Merchant ID | Yes |
language | string | Display language, such as EN | Yes |
Response parameters
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
data | GetProductOptCategoryResponseData | Data | No |
GetProductOptCategoryResponseData object
Field | Type | Description | Required |
category_tree_list | list<CategoryTreeStruct> | Available categories | Yes |
CategoryTreeStruct object
Field | Type | Description | Required |
category_id | string | Category ID | Yes |
description | string | Category description | Yes |
sub_category_list | list<CategoryTreeStruct> | Subcategory | Yes |
parent_category_id | string | Parent Category ID | Yes |
Products Can Be Queried in Shops
View the shops a merchant can use when creating or updating products.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product_opt_shops/query/
Request parameters
Field | Type | Description | Required |
merchant_id | string | Merchant ID | Yes |
language | string | Display language For example, en | Yes |
pagination | Pagination | Pagination information | Yes |
Response parameters
Field | Type | Description | Required |
error | Status code | Yes | |
data | GetProductOptShopsResponseData | Actual data | No |
GetProductOptShopsResponseData object
Field | Type | Description | Required |
shops | list<ShopInfo> | Available categories | Yes |
next_pagination | NextPagination | Pagination information | No |
ShopInfo object
Field | Type | Description | Required |
shop_base_info | SearchShopInfo | shop basic information | Yes |
available | bool | Is the shop available | Yes |
unavailable_reason | list<int> | Reasons for shop unavailability
| Yes |
SearchShopInfo object
Field | Type | Description | Required |
shop_id | int64 | Shop ID | Yes |
shop_name | string | Shop name | Yes |
third_shop_id | string | Third-party stop ID | Yes |
location_en | string | English address | No |
merchant_id | int64 | Merchant ID | No |
National Holiday Inquiry
Check the merchant's national holidays to see if coupon usage should be restricted.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/holiday/batch_query/
Request parameters
Field | Type | Description | Required |
countries |
| List of Requested Country Codes For example, ID | Yes |
language |
| Language of returned holiday information | No |
Response parameters
Field | Type | Description | Required |
error | ErrorStruct | Status code | Yes |
data |
| Actual data | No |
MGetHolidayByCountryResponseData object
Field | Type | Description | Required |
holiday_map | map<string, list<HolidayStruct>> | Country and holiday information mapping table
| No |
HolidayStruct object
Field | Type | Description | Required |
holiday_id | i64 | Unique identifier for the holiday | Yes |
holiday | string | Name of the holiday | Yes |
starling_text | string | Starling text descriptions related to holidays | No |
Temporary Product Disabled
The third-party system synchronizes offline sold-out / paused-supply states to TTLS in real time, preventing fulfillment failure after a user places an order.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/removal/batch_create
Request parameters
Field | Type | Remarks | Required |
merchant_id | string | Merchant ID | Yes |
third_product_id | string | Third-party product ID, the unique ID of the product on the SaaS platform (maps | Yes |
shop_removals | list<ShopRemoval> | List of stores where the item needs to be delisted (same item × N stores). Supports a maximum of 1,000 stores; exceeding this limit will trigger the error ShopLimitExceeded(8000258). | Yes |
language | string | Display language for error messages, such as EN | Yes |
ShopRemoval object
Field | Type | Remarks | Required |
third_shop_id | string | Third-party shop ID | Yes |
remove_days | int32 | Number of days until delisting (calendar days); valid range: [1, 15]. Example: If the "remove" action is performed on January 1st at 23:50 with a setting of 1 day, the tag will be automatically removed at 23:59:59 on that same day. Values outside this range will trigger error code 16. | Yes |
Response parameters
Asynchronous response. A successful response means TTLS has accepted the request; the actual removal completion is delivered via the ttls.product.shop_removal.result webhook.
Field | Type | Remarks | Required |
error | ErrorStruct | Status code | Yes |
Validation
Verification Item | Error Code / Error Key | Description |
merchant_id is not null | 40001 / | Merchant ID cannot be null |
third_product_id is not null,and is mapped to internal product_id | 8000254 / | Product does not exist or product is not online |
shop_removals is not null,length ≤ 1000 | 8000258 / | The number of outlet IDs cannot exceed 1,000. |
third_shop_id has relationship with the products | 8000255 / | The product has no relationship with the shop |
Products and shops have not been delisted by GNE(OVL) | 8000253 / | Action is not required if the product is already delisted by GNE |
Shop is not offline status | 8000256 / | The outlet is offline. Products linked to offline outlets cannot be removed. |
remove_days ∈ [1, 15] |
| The number of removal days is incorrect. |
The merchant is authorized with the client_key via the TTOP |
| You do not have permission to perform this action. |
Product Shop Status Query
The SaaS actively syncs the real-time selling status of a product in shops, covering three cases: online, removed (with remaining days and expiry), or not bound.
Note: There is a maximum queries per second (QPS) limit of 50.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/shop_status/query
Request parameters
Field | Type | Remarks | Required |
merchant_id | string | Merchant ID | Yes |
third_product_id | string | Third-party product ID | Yes |
third_shop_ids | list<string> | List of third-party shop IDs. If empty, returns status for all shops bound to the product. Max 200. | No |
language | string | Display language, such as EN | Yes |
Response parameters
Synchronous response
Field | Type | Remarks | Required |
error | ErrorStruct | Status code | Yes |
data | <ProductShopStatusResponseData> | Actual data | No |
ProductShopStatusResponseData object
Field | Type | Remarks | Required |
third_product_id | string | Third-party product ID | Yes |
product_id | string | TikTok Local Services product ID | Yes |
shop_statuses | list<ShopProductStatus> | Status info per shop | Yes |
ShopProductStatus object
Field | Type | Remarks | Required |
third_shop_id | string | Third-party shop ID | Yes |
shop_id | string | TikTok Local Services shop ID | Yes |
status | ProductShopStatusEnum | Product status at the store:
| Yes |
remove_info | RemoveInfo | Only present when status = REMOVED | No |
expected_online_time | int64 | Expected online time, Unix timestamp (seconds). Equivalent to GnE expected_online_time. Returns only if status = REMOVED. | No |
RemoveInfo object
Field | Type | Remarks | Required |
remove_days_left | int32 | Remaining removal days (rounded up to calendar days) | Yes |
start_time | int64 | Removal start time, Unix seconds | Yes |
end_time | int64 | Removal end time, Unix seconds. When multiple records overlap, returns the | Yes |
source | RemoveSourceEnum | Delisting source: merchant_platform = 1 shop_fulfill = 2 api = 3 governance_platform = 4 (Delisting via GnE system, including OVL/OOS) | Yes |
removal_id | string | ID of the currently effective removal record (returned only for merchant-initiated removals). | No |
Validation
Verification Item | Error Code / Error Key | Description |
merchant_id and third_product_id are not null | 40001 / | Merchant ID and third product ID can not be null |
third_product_id is not null,and is mapped to internal product_id | 8000254 / | Product does not exist or product is not online |
third_shop_id is not null,length ≤ 200 | 40002 / | The quantity of |
The merchant is authorized with the client_key via the TTOP |
| You do not have permission to perform this action. |
Activate Disabled Product
After a shop replenishes stock, the SaaS calls this API to quickly restore online selling, reducing manual backend latency and improving GMV recovery.
Note: There is a maximum queries per second (QPS) limit of 20.
Endpoint
POST https://open.tiktokapis.com/v2/localservice/saas/product/removal/cancel
Request parameters
Field | Type | Remarks | Required |
merchant_id | string | Merchant ID | Yes |
third_product_id | string | Third-party product ID | Yes |
third_shop_id | string | Third-party shop ID. One product × one shop per call. | Yes |
language | string | Display language for error messages, such as EN | Yes |
Response parameters
Synchronous response, the request is successful and the removal is cancelled successfully.
Field | Type | Remarks | Required |
error | ErrorStruct | Status code | Yes |
Validation
Verification Item | Error Code / Error Key | Description |
merchant_id / third_product_id / third_shop_id is not null | 40001 / | Merchant ID / Product ID and Shop ID cannot be null |
The product is online status (ProductStatus = LISTED) |
| This product cannot be relisted because it's not online. |
Shop is not offline status |
| This product cannot be relisted because the shop is not online. |
third_shop_id has relationship with the products | 8000255 / | The product has no relationship with the shop |
Products have not been delisted by GNE(source ≠ governance_platform) | 8000267 / | This product has already been taken off the shelves by the system and cannot be relisted. |
The current delist record has not been over-written by other delisting record |
| This product cannot be removed because it was recently removed on the {s_source}, by {s_operatorName} at {s_timeStamp}. |
The merchant is authorized with the client_key via the TTOP |
| You do not have permission to perform this action. |
Product Status Webhook
Note: After the product is created and updated, the status update will be notified to the developer through the webhook.
Field | Explanation |
client_key | ID registered with TTOP by third-party developers (SAAS platform) |
event product.status.doman_sync | Event name, the naming convention is generally aa.bb.cc. For example: video.upload.failed Event name: |
create_time | Timestamp in seconds since the Unix epoch |
user_id | TikTok User Identification involved, null if no user involved |
content | Marshalled JSON string. Serialized JSON string, TTOP only passes through, does not parse or perceive. |
caller tiktok.local.solution_gateway | It's a tag from TT, just for debug tracking. |
Content
Field | Type | Description | Required |
third_product_id | string | Third-party product ID | Yes |
product_id | string | Product ID | Yes |
product_type | ProductType | Product type
| Yes |
category_id | int64 | Category ID | Yes |
merchant_id | string | Merchant ID | Yes |
product_status | ProductStatusEnum | Product status
| Yes |
action_type | GoodsDomainContentActionType | Operation type
| No |