Skip to content

Submit Product via Opportunity

POST
/product/202604/opportunities/{opportunity_id}/submit

Submit an existing product as a response to a specific opportunity lead. The product must belong to the authorized shop and be in ACTIVATE status. It will be linked to the opportunity and enter the standard submission review flow.

If you need a new local product, call the Create Product API with save_mode=LISTING, use the returned data.product_id, and wait until the product reaches ACTIVATE. A product saved with save_mode=AS_DRAFT is not yet eligible. For a global seller that has not migrated to local replication, first call the Create Global Product API to get a global_product_id, then call the Publish Global Product API. From data.products, select the local product id for the authorized shop and wait until that product reaches ACTIVATE before submitting it here.

After submission, use the Get Submission Records API and filter by opportunity_id or product_id to track the review outcome.

opportunity_id
required
string

The opportunity lead to respond to. This API does not support opportunities whose opportunity_type is CATEGORY.

shop_cipher
required
string

Identifies the shop. Obtain it from the Get Authorized Shops API.

Media typeapplication/json
object
product_id
required

The TikTok Shop product ID to submit. Must be in ACTIVATE status.

string
Example
{
"product_id": "7298374612938475620"
}

Success

Media typeapplication/json
object
code

Status code; 0 means success.

integer format: int64
message

Success or failure message.

string
request_id

Request log ID.

string
data
object
submission

The submission record that links the product to the opportunity.

object
id

Unique ID of this submission record. Use for tracking review status.

string
opportunity_id

The opportunity ID this submission is linked to.

string
product_id

The submitted product ID.

string
status

APPROVED, UNDER_REVIEW, REJECTED are supported. Initial submission status: PENDING_REVIEW.

string
submit_time

The submission time as a Unix timestamp in seconds (UTC).

integer format: int64
rejection_reason

The reason when the status is REJECTED

string
Example
{
"code": 0,
"data": {
"submission": {
"id": "8001234567890123456",
"opportunity_id": "7123456789012345678",
"product_id": "7298374612938475620",
"status": "PENDING_REVIEW",
"submit_time": 1775979270,
"rejection_reason": "The submitted product does not match the opportunity"
}
},
"message": "Success",
"request_id": "202203070749000101890810281E8C70B7"
}