---
title: "Create Portfolio Items Bulk"
method: POST
path: "/portfolio/items/bulk"
tags: ["Portfolio Monitoring"]
---

# Create Portfolio Items Bulk

`POST /portfolio/items/bulk`

Create Business portfolio items for many completed searches.

Request-level authorization and group lookup failures still fail the
full request. Per-search failures are returned in ``errors`` so the
caller can add every eligible row from a checkbox selection without
retrying successful rows.

Bulk success and error rows are intentionally lightweight. The
frontend only needs IDs and stable error codes for row correlation,
cache refreshes, and summary toasts, so the endpoint avoids full
PortfolioItem serialization and verbose per-row errors.

## Request body

- AddPortfolioItemsBulkRequest — Request body for adding multiple BusinessSearches to monitoring.
  - `business_search_ids` string[], required — The UUIDs of the business searches to add to portfolio monitoring.
  - `group_id` string, uuid, nullable — The optional UUID of the group to add the newly created items to.

## Response `200`

Successful Response

- AddPortfolioItemsBulkResponse — Partial-success response for bulk portfolio item creation.
  - `items` AddPortfolioItemsBulkItemResponse[] — Portfolio items successfully created.
    - `business_search_id` string, uuid, required — The business search that was imported.
    - `portfolio_item_id` string, uuid, required — The created portfolio item ID.
    - `business_id` string, uuid, required — The monitored business ID for targeted frontend cache refresh.
  - `errors` AddPortfolioItemsBulkError[] — Per-search failures that did not block the whole request.
    - `business_search_id` string, uuid, required — The business search that failed to import.
    - `code` 'not_found' | 'already_exists' | 'ineligible' | 'duplicate_request', required — Stable per-search error codes returned by the bulk add endpoint.
    - `existing_item_id` string, uuid, nullable — The existing portfolio item ID for already monitored rows.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/baselayer/apis/baselayer-api-service.md) · [All operations](https://skmtc.net/baselayer/apis/baselayer-api-service/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/baselayer/baselayer-api-service/versions/0cc89938bc26/schema)
