This article presents possible use cases and corresponding sample flows that you can support. It provides a useful starting point as you plan your implementation.
An app can reuse the site's existing Categories before creating the labels it needs. To resolve labels to Category IDs:
categoryIds and set x-wix-linguist to the site's primary-language context (<languageCode>|<locale>|true|<instanceId>). The response contains all site Categories, up to 100.results[].itemMetadata.success. Use itemMetadata.originalIndex to match the result to the input, and handle itemMetadata.error for failures.bulkActionMetadata.undetailedFailures is greater than zero, call List Categories again with no categoryIds and the same primary-language context. Compare original input labels without item details against the complete response. Reuse the ID of each matching Category and retry only inputs whose labels are still absent.itemMetadata.id only for successful bulk results and the IDs found by label in the reconciliation read. For Create Category, save the returned category.id. Use IDs, rather than labels, for Program assignments.Create a Program, then assign its Categories. To prepare the Program:
Use the Program ID and the Category IDs from the previous steps:
categoriesToAssign.categoriesToAssign and categoriesToUnassign.results[].itemMetadata.success and match its itemMetadata.id to the requested Category ID. A successful response can contain both successful and failed assignments.itemMetadata.error for failed items. If bulkActionMetadata.undetailedFailures is greater than zero, use Get Category to check the assignedTo value for unresolved IDs before retrying.categoryIds value, so retry the read rather than resubmitting a successful assignment or unassignment. Handle failed IDs separately.An app can add and remove assignments in one request. After previous assignment changes have synchronized:
categoryIds.categoriesToAssign and removed IDs in categoriesToUnassign.revision. The stable Category ID keeps Program relationships intact.A site owner can remove a Category from one Program or delete it across the site. Choose the operation that matches their intent:
categoriesToUnassign. Check the per-item result before waiting for synchronization.Duplicating a Program uses Bulk Assign Categories to Program to assign the original Program's Category IDs to the new Program. It reuses the existing Categories. To check the copied assignments:
assignedTo includes the new Program ID. The duplicated Program copies categoryIds, so that field alone doesn't confirm that each Category was updated.For a visitor- or member-facing category page, retrieve Programs with the Programs API so that Program visibility and access rules are applied. To load the page:
categoryIds and the visitor or member identity.Category.assignedTo doesn't apply Program visibility and access rules and must not be used as a public catalog.Last updated: 19 October 2026