来自 TikTok Shop 官方资料快照 ·
- 当前资料结构化阅读页
- 固定快照已留存,可追溯
- 官方原文可核对
资料正文
§1 US Market New Function:POD Customization Config APIs
TikTok Shop now supports configuring Print-on-Demand (POD) customization for Made-to-Order (MTO) products through the Product APIs. ISVs and seller applications can upload customization assets, submit template configurations, and retrieve the saved configuration programmatically. With this capability, an integration can:
- Upload background, mask, and default customization images.
- Associate one or more SKUs with a POD template.
- Define product surfaces and ordered image or text customization areas.
- Read back the resulting POD configuration and returned image metadata.
§2 What’s New
What’s New
| Existing API | Version and method | New POD capability |
|---|---|---|
| Upload Product Image | 202309 POST | Adds CUSTOMIZATION_IMAGE to the request use_case enum for POD background, mask, and default images. |
| Partial Edit Product | 202509 POST | Adds the optional request object pod_info for POD templates, surfaces, and customization areas. |
| Get Product | 202309 GET | Returns the optional response object pod_info, including templates, surfaces, customization areas, and image metadata. |
To support POD image uploads, add CUSTOMIZATION_IMAGE to the request use_case enum. The response structure is unchanged.
§3 What ISVs Need to Do
What ISVs Need to Do
§4 Required to support POD customization
Required to support POD customization
- Update the image upload enum. Add
CUSTOMIZATION_IMAGEto the supporteduse_casevalues. - Upload assets first. Upload each background image, mask image, and default image with
use_case=CUSTOMIZATION_IMAGE, then retain the returneduri. - Extend the edit request model. Add optional
pod_infosupport to Partial Edit Product and build the hierarchypod_info→pod_templates[]→surfaces[]→custom_areas[]. - Implement type-specific areas. Send
image_areawhenarea_type=IMAGE, ortext_areawhenarea_type=TEXT. - Extend the read model. Parse
pod_infofrom Get Product, including the additional metadata returned for image objects. - Validate before submission. Enforce SKU uniqueness, list limits, layer ordering, enum casing, two-decimal placement strings, and the documented image URI requirements.
- Read back after an update. Call Get Product to verify the saved configuration and retain the system-generated
pod_template_idfor future reads and updates.
§5 Recommended for all existing integrations
Recommended for all existing integrations
- Make response deserialization tolerant of the new optional
pod_infofield and future optional fields. - Add
CUSTOMIZATION_IMAGEto strict enum parsers, even if the integration does not yet create POD configuration. - Do not treat an absent
pod_infoobject as an error for a non-POD product.
§6 Integration Flow
Integration Flow
Image
- Upload customization images with Upload Product Image and keep each returned
uri. - Build the POD configuration using templates, SKU associations, surfaces, ordered areas, and the uploaded image URIs.
- Submit
pod_infothrough Partial Edit Product. - Call Get Product to read back the stored configuration and image metadata.
§7 Integration Details
Integration Details
§8 1. Upload Product Image
1. Upload Product Image
| Endpoint | POST /product/:version/images/upload |
|---|---|
| API version | 202309 |
| Content type | multipart/form-data |
| POD image upload | New request enum value: use_case=CUSTOMIZATION_IMAGE. |
Use CUSTOMIZATION_IMAGE for images that render or preview consumer-customizable content, including:
- surface background images;
- surface mask images;
- default images for image customization areas.
The existing upload constraints remain unchanged: supported formats are JPG, JPEG, PNG, WEBP, HEIC, and BMP; the maximum file size is 10 MB; the general accepted dimension range is 100 × 100 through 20,000 × 20,000 pixels. Existing use-case-specific requirements continue to apply.
§9 2. Partial Edit Product
2. Partial Edit Product
| Endpoint | POST /product/:version/products/:product_id/partial_edit |
|---|---|
| API version | 202509 |
| POD request field | Adds the optional pod_info object. |
Send pod_info when creating or updating POD customization configuration for an MTO product that supports this capability. A new template does not require pod_template_id; the identifier is generated by the system.
The POD fields are optional. Include image_area when area_type=IMAGE, and include text_area when area_type=TEXT.
§10 3. Get Product
3. Get Product
| Endpoint | GET /product/:version/products/:product_id |
|---|---|
| API version | 202309 |
| POD response field | Returns the optional pod_info object. |
The returned configuration uses the same template, surface, area, placement, image-area, and text-area structure. Image objects include additional read-only metadata:
| Image object | Dimension types | Returned fields |
|---|---|---|
background_image mask_image | width, height: Int32 | uri, urls[], thumb_urls[], width, height |
image_area.default_image | width, height: Int64 | uri, urls[], thumb_urls[], width, height |
§11 POD Data Model and Validation Rules
POD Data Model and Validation Rules
§12 Template and surface hierarchy
Template and surface hierarchy
| Field | Type | Purpose and constraints |
|---|---|---|
pod_info | Struct | POD customization configuration for an MTO product. |
pod_info.pod_templates[] | List<Struct> | Collection of POD templates. |
pod_template_id | String | System-generated template ID; omit when defining a new template. |
template_name | String | Template name. |
remark | String | Optional note for the template. |
sku_ids[] | List<String> | Associated SKU IDs. A SKU cannot belong to more than one template. |
surfaces[] | List<Struct> | Customizable surfaces; maximum 10 per template. |
external_surface_id | String | External identifier for the surface. |
surface_name | String | Surface name. |
background_image.uri | String | URI returned by Upload Product Image using CUSTOMIZATION_IMAGE. |
mask_image.uri | String | Optional mask image URI uploaded with CUSTOMIZATION_IMAGE. |
§13 Customization areas and placement
Customization areas and placement
| Field | Type | Purpose and constraints |
|---|---|---|
custom_areas[] | List<Struct> | Maximum 10 per surface. List order determines rendering layer order. |
external_area_id | String | External identifier for the customization area. |
area_name | String | Customization area name. |
area_type | String | Enum: IMAGE or TEXT. |
is_required | Bool | Whether the consumer must complete the area. |
area_placement.x_coordinate | String | Decimal string with two decimal places. |
area_placement.y_coordinate | String | Decimal string with two decimal places. |
area_placement.width | String | Decimal string with two decimal places. |
area_placement.height | String | Decimal string with two decimal places. |
area_placement.rotate_degree | String | Rotation expressed as a decimal string with two decimal places. |
§14 Type-specific area objects
Type-specific area objects
| Field | Type | Purpose and constraints |
|---|---|---|
image_area | Struct | Applicable when area_type=IMAGE. |
image_area.default_image.uri | String | Optional default image uploaded with CUSTOMIZATION_IMAGE. |
image_area.min_width | Int64 | Minimum accepted image width. |
image_area.min_height | Int64 | Minimum accepted image height. |
text_area | Struct | Applicable when area_type=TEXT. |
text_area.default_text | String | Default text. |
text_area.max_text_length | Int64 | Maximum consumer-entered text length. |
text_area.fonts[] | List<String> | Allowed fonts. |
text_area.colors[] | List<String> | Allowed hexadecimal colors, for example #FFFFFF. |
text_area.align_type | String | Enum: LEFT, CENTER, or RIGHT. |
Key validation summary: one SKU may belong to only one template; each template supports up to 10 surfaces; each surface supports up to 10 areas; the custom_areas array order is the layer order; image URIs must come from a CUSTOMIZATION_IMAGE upload.
§15 Request Example
Request Example
The following request fragment shows a POD configuration with one image area and one text area. pod_template_id is omitted because the template is new.
{
"pod_info": {
"pod_templates": [
{
"template_name": "Summer T-shirt Customization",
"remark": "Primary customization template",
"sku_ids": ["SKU_001", "SKU_002"],
"surfaces": [
{
"external_surface_id": "front",
"surface_name": "Front Side",
"background_image": {
"uri": "YOUR_BACKGROUND_IMAGE_URI"
},
"mask_image": {
"uri": "YOUR_MASK_IMAGE_URI"
},
"custom_areas": [
{
"external_area_id": "logo",
"area_name": "Logo Area",
"area_type": "IMAGE",
"is_required": true,
"area_placement": {
"x_coordinate": "400.00",
"y_coordinate": "300.00",
"width": "200.00",
"height": "200.00",
"rotate_degree": "0.00"
},
"image_area": {
"min_width": 200,
"min_height": 200,
"default_image": {
"uri": "YOUR_DEFAULT_IMAGE_URI"
}
}
},
{
"external_area_id": "slogan",
"area_name": "Slogan Text",
"area_type": "TEXT",
"is_required": false,
"area_placement": {
"x_coordinate": "300.00",
"y_coordinate": "550.00",
"width": "400.00",
"height": "50.00",
"rotate_degree": "0.00"
},
"text_area": {
"default_text": "Your Text Here",
"max_text_length": 20,
"fonts": ["YOUR_SUPPORTED_FONT_KEY_1", "YOUR_SUPPORTED_FONT_KEY_2"],
"colors": ["#FFFFFF", "#000000", "#FF0000"],
"align_type": "CENTER"
}
}
]
}
]
}
]
}
}
§16 Compatibility and Testing
Compatibility and Testing
§17 Backward compatibility
Backward compatibility
These API changes are additive. Existing integrations that do not create POD configurations do not need to send pod_info.
- For non-POD products,
pod_infomay be absent. - Response models should accept the new optional object and unknown optional fields.
- Strict enum models should recognize
CUSTOMIZATION_IMAGE,IMAGE,TEXT,LEFT,CENTER, andRIGHTwhere applicable.
§18 Recommended test coverage
Recommended test coverage
- Create a template without
pod_template_id, then confirm the generated ID through Get Product. - Upload and reference background, mask, and default images using
CUSTOMIZATION_IMAGE. - Validate both
IMAGEandTEXTarea payloads. - Verify decimal-string serialization for all five
area_placementfields. - Verify custom-area list order is preserved during readback.
- Reject duplicate SKU assignment across templates.
- Test the 10-surface-per-template and 10-area-per-surface limits.
- Confirm Get Product parsing for
urls[],thumb_urls[], and image dimensions. - Regression-test non-POD products and products with no
pod_info.
