---
title: "Update published paths"
method: PATCH
path: "/v2/published-paths/"
tags: ["Published Paths"]
---

# Update published paths

`PATCH /v2/published-paths/`

## Request

- Base URL: `https://api.skilljar.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.skilljar.com/v2/published-paths/`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/skilljar/apis/skilljar-api-v2/docs/v2/published-paths/patch.ts> (a function with typed inputs; its response is checked against the schema)

Update published paths in bulk. A row that fails is reported per item (207).

**Required OAuth scope:** `paths:write`

## Request body

- PublishedPathUpdateRequestEnvelope: JSON:API envelope for PATCH /v2/published-paths/.
  - `data` UpdateData[], required
    - `type` 'published-paths', required
    - `id` string, required
    - `attributes` PublishedPathWriteAttributes, required: Writable attributes; omitted fields keep their default or stay unchanged.
      - `slug` string, nullable
      - `is_hidden` boolean, nullable
      - `strict_enforce_group_visibility` boolean, nullable
      - `visibility_override_type` 'GROUP' | 'CATEGORY', nullable
      - `catalog_layout` 'EXPANDABLE' | 'TILE' | 'LIST', nullable
      - `search_location` 'HEADER_RIGHT' | 'LEFT_NAV_TOP' | 'HIDDEN', nullable
      - `search_behavior` 'GLOBAL' | 'LOCAL', nullable
      - `unique_progress_per_enrollment` boolean, nullable
      - `enforce_sequential_navigation` boolean, nullable
      - `registration_status` 'OPEN' | 'CLOSED', nullable
      - `price_cents` integer, nullable
      - `price_credits` integer, nullable
      - `max_quantity` integer, nullable
      - `sku` string, nullable
      - `timezone` string, nullable
      - `expires_at_duration` integer, nullable
      - `expires_at_duration_unit` 'MONTHS' | 'DAYS', nullable

## Response `200`

OK

- BatchResultEnvelopePublishedPathResource
  - `data` union[], required: Per-item results in request order.
    - union
      - BatchSucceededItemPublishedPathResource
        - `status` 'succeeded'
        - `id` string, nullable: Resource ID of the created or updated resource.
        - `result` PublishedPathResource, required: JSON:API resource object for a published path.
          - `type` string: Always "published-paths".
          - `id` string, required: Opaque published-path id.
          - `attributes` PublishedPathAttributes, required: Attributes of a published-path resource object.
            - `external_id` string, required
            - `slug` string, required
            - `public_url` string, required
            - `is_hidden` boolean, required
            - `strict_enforce_group_visibility` boolean, required
            - `visibility_override_type` string, required
            - `catalog_layout` string, required
            - `search_location` string, required
            - `search_behavior` string, required
            - `unique_progress_per_enrollment` boolean, required
            - `enforce_sequential_navigation` boolean, required
            - `registration_status` string, required: OPEN or CLOSED (Offer.active).
            - `price_cents` integer, required
            - `price_credits` integer, required
            - `currency_code` string, required
            - `max_quantity` integer, required
            - `sku` string, required
            - `timezone` string, required
            - `expires_at_duration` integer, nullable, required
            - `expires_at_duration_unit` string, required
            - `created_at` string, date-time, required
            - `modified_at` string, date-time, required: Latest update to the published path or any path item.
          - `relationships` object, nullable
          - `links` object, nullable
      - BatchFailedItem: Wrapper for a failed item in a 207 batch response.
        - `status` 'failed'
        - `id` string, nullable: Echoed resource ID if the input identified a row.
        - `error` BatchItemError, required: Per-item error inside a 207 batch response. Aligned with JSON:API ``ErrorObject`` field naming (``code`` rather than ``reason``) so consumers can reuse error-handling logic across document-level errors (``ErrorObject`` in ``ErrorEnvelope``) and per-item errors (here). Differences from ``ErrorObject``: ``status``/``title`` are omitted because they're redundant for the 207-batch context (HTTP status is on the envelope, and the title is derivable from ``code``).
          - `code` 'duplicate_email' | 'duplicate_in_batch' | 'duplicate_name' | 'validation_error' | 'not_found' | 'internal_error' | 'not_in_domain' | 'already_enrolled' | 'already_published' | 'already_in_path', required: Machine-readable error code.
          - `source` object, nullable: Pointer to the offending input slot, e.g. {"pointer": "/data/0/attributes/email"}.
          - `detail` string, nullable: Human-readable explanation of the error.
  - `summary` BatchSummary, required: Aggregate counts for a 207 batch response. Invariant: ``succeeded + failed == total``. Enforced by ``@model_validator``.
    - `total` integer, required: Total number of items submitted.
    - `succeeded` integer, required: Number of items that succeeded.
    - `failed` integer, required: Number of items that failed.

## Other responses

- `207`: Multi-Status
- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `406`: Not Acceptable: Accept rules out application/vnd.api+json.
- `413`: Payload Too Large: the request body exceeds the maximum allowed size.
- `415`: Unsupported Media Type: Content-Type must be application/json or application/vnd.api+json.
- `422`: Unprocessable Entity

## Changes

- **2026-10-21** `16a566965a72`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/skilljar/apis/skilljar-api-v2/changes/v2/published-paths/patch.md)

---

[API](https://skmtc.dev/skilljar/apis/skilljar-api-v2.md) - [All operations](https://skmtc.dev/skilljar/apis/skilljar-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/skilljar/apis/skilljar-api-v2/revisions/fbda30ce1742?raw)
