---
title: "Upsert Pack listing draft"
method: PUT
path: "/packs/{packId}/listingDraft"
tags: ["Packs"]
---

# Upsert Pack listing draft

`PUT /packs/{packId}/listingDraft`

Create or update the listing draft for a Pack.

## Path parameters

- `packId` integer, required

## Request body

- UpsertPackListingDraftRequest — Request to create or update a Pack listing draft
  - `listingData` PackListingDraftInputData, required — Input data for creating or updating a Pack listing draft. Images only require assetId and filename; the server resolves the full image URL.
    - `name` string — The name of the Pack.
    - `description` string — The full description of the Pack.
    - `shortDescription` string — A short version of the description of the Pack.
    - `logo` ImageFileForUpdatePackRequest — Information about an image file for an update Pack request.
      - `assetId` string, required — The asset id of the Pack's image, returned by [`#PackAssetUploadComplete`](#operation/packAssetUploadComplete) endpoint.
      - `filename` string, required — The filename for the image.
      - `mimeType` string — The media type of the image being sent.
    - `cover` ImageFileForUpdatePackRequest — Information about an image file for an update Pack request.
      - `assetId` string, required — The asset id of the Pack's image, returned by [`#PackAssetUploadComplete`](#operation/packAssetUploadComplete) endpoint.
      - `filename` string, required — The filename for the image.
      - `mimeType` string — The media type of the image being sent.
    - `exampleImages` ImageFileForUpdatePackRequest[], nullable
      - `assetId` string, required — The asset id of the Pack's image, returned by [`#PackAssetUploadComplete`](#operation/packAssetUploadComplete) endpoint.
      - `filename` string, required — The filename for the image.
      - `mimeType` string — The media type of the image being sent.
    - `agentImages` ImageFileForUpdatePackRequest[], nullable
      - `assetId` string, required — The asset id of the Pack's image, returned by [`#PackAssetUploadComplete`](#operation/packAssetUploadComplete) endpoint.
      - `filename` string, required — The filename for the image.
      - `mimeType` string — The media type of the image being sent.
    - `categoryIds` string[]
    - `supportEmail` string, nullable
    - `termsOfServiceUrl` string, url, nullable
    - `privacyPolicyUrl` string, url, nullable
    - `sourceCodeVisibility` 'private' | 'shared' — Visibility of a Pack's source code.
    - `agentShortDescription` string, nullable
    - `agentDescription` string, nullable
    - `additionalInformation` PackListingAdditionalInformation — Additional information saved with the Pack listing draft
      - `privacyCollectsPersonalInfo` boolean, nullable — Whether the agent or third-party partners collect personal information.
      - `privacyPersonalInfoCategories` string[], nullable — Categories of personal information collected by the agent.
      - `privacyDataUsagePurposes` string[], nullable — Purposes for which collected data is used by the agent or third-party partners.
      - `privacyDataCollectedBy` string[], nullable — Whether data is collected by the developer, a third party, or both.

## Response `200`

The saved Pack listing draft

- UpsertPackListingDraftResponse — Response containing the upserted Pack listing draft
  - `packListingDraftId` string, uuid, required — ID of the listing draft
  - `packId` number, required — ID of the Pack
  - `listingData` PackListingDraftData, required — Draft listing data for a Pack. All fields are optional.
    - `name` string — The name of the Pack.
    - `description` string — The full description of the Pack.
    - `shortDescription` string — A short version of the description of the Pack.
    - `logo` PackImageFile — A Pack image file.
      - `filename` string, required — The name of the image file.
      - `imageUrl` string, url, required — The URL to the image file.
      - `assetId` string, required — The asset id of the Pack's image.
      - `altText` string — The alt text for the image.
      - `mimeType` string — The media type of the image.
    - `cover` PackImageFile — A Pack image file.
      - `filename` string, required — The name of the image file.
      - `imageUrl` string, url, required — The URL to the image file.
      - `assetId` string, required — The asset id of the Pack's image.
      - `altText` string — The alt text for the image.
      - `mimeType` string — The media type of the image.
    - `exampleImages` PackImageFile[], nullable
      - `filename` string, required — The name of the image file.
      - `imageUrl` string, url, required — The URL to the image file.
      - `assetId` string, required — The asset id of the Pack's image.
      - `altText` string — The alt text for the image.
      - `mimeType` string — The media type of the image.
    - `agentImages` PackImageFile[], nullable
      - `filename` string, required — The name of the image file.
      - `imageUrl` string, url, required — The URL to the image file.
      - `assetId` string, required — The asset id of the Pack's image.
      - `altText` string — The alt text for the image.
      - `mimeType` string — The media type of the image.
    - `categoryIds` string[]
    - `supportEmail` string, nullable
    - `termsOfServiceUrl` string, url, nullable
    - `privacyPolicyUrl` string, url, nullable
    - `sourceCodeVisibility` 'private' | 'shared' — Visibility of a Pack's source code.
    - `agentShortDescription` string, nullable
    - `agentDescription` string, nullable
    - `additionalInformation` PackListingAdditionalInformation — Additional information saved with the Pack listing draft
      - `privacyCollectsPersonalInfo` boolean, nullable — Whether the agent or third-party partners collect personal information.
      - `privacyPersonalInfoCategories` string[], nullable — Categories of personal information collected by the agent.
      - `privacyDataUsagePurposes` string[], nullable — Purposes for which collected data is used by the agent or third-party partners.
      - `privacyDataCollectedBy` string[], nullable — Whether data is collected by the developer, a third party, or both.

## Other responses

- `400` — The request parameters did not conform to expectations.
- `401` — The API token is invalid or has expired.
- `403` — The API token does not grant access to this resource.
- `404` — The resource could not be located with the current API token.
- `429` — The client has sent too many requests.

---

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