> ## Documentation Index
> Fetch the complete documentation index at: https://docs.purplelabelmd.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Adopt the starter merchandising pack for your brand

> Adopts the starter merchandising pack for one of your brands in a single call. For every offering enabled on the brand that has no merchandising yet, this writes the pack's template copy — a starting display name, description, and included-items bullets — as your brand's own merchandising, exactly as if you had written it yourself. Where the pack has clinically-approved copy for that specific offering, you get that copy; otherwise you get the compliance-safe copy for the offering's therapy class. Offerings you have already merchandised are never touched (they are listed in the response as skipped), and offerings the pack has no template for are listed as skipped too. Send the pack version stated in your welcome pack; the response returns the pack's content hash so you can verify you adopted exactly the templates you reviewed. Adoption is optional and repeatable: calling again adopts nothing new, and repeating a completed request with the same Idempotency-Key returns the original result. Every adopted offering is recorded in your brand's audit trail, attributed to your account. You can adopt only for brands that belong to your account.



## OpenAPI

````yaml /openapi/public-openapi.json post /v1/account/brands/{brand_id}/starter-merchandising
openapi: 3.1.0
info:
  title: Purple API
  version: 0.0.0
servers:
  - url: https://api.dev.purplelabelmd.com
security: []
tags:
  - description: Sign a patient in and out and manage the browser session.
    name: Sessions & authentication
  - description: Run the server-driven intake questionnaire question by question.
    name: Intake
  - description: Address autocomplete for the intake flow.
    name: Addresses
  - description: Read the public status of a patient's enrollment.
    name: Enrollment
  - description: Track a client's onboarding progress.
    name: Onboarding
  - description: Read back the platform configuration stored for your brand.
    name: Brand configuration
  - description: Enable offerings for your brand and set their display copy.
    name: Offering configuration
  - description: Start and track payments for an order.
    name: Payments
  - description: Subscribe to platform events and manage delivery endpoints.
    name: Webhooks
paths:
  /v1/account/brands/{brand_id}/starter-merchandising:
    post:
      tags:
        - Offering configuration
      summary: Adopt the starter merchandising pack for your brand
      description: >-
        Adopts the starter merchandising pack for one of your brands in a single
        call. For every offering enabled on the brand that has no merchandising
        yet, this writes the pack's template copy — a starting display name,
        description, and included-items bullets — as your brand's own
        merchandising, exactly as if you had written it yourself. Where the pack
        has clinically-approved copy for that specific offering, you get that
        copy; otherwise you get the compliance-safe copy for the offering's
        therapy class. Offerings you have already merchandised are never touched
        (they are listed in the response as skipped), and offerings the pack has
        no template for are listed as skipped too. Send the pack version stated
        in your welcome pack; the response returns the pack's content hash so
        you can verify you adopted exactly the templates you reviewed. Adoption
        is optional and repeatable: calling again adopts nothing new, and
        repeating a completed request with the same Idempotency-Key returns the
        original result. Every adopted offering is recorded in your brand's
        audit trail, attributed to your account. You can adopt only for brands
        that belong to your account.
      operationId: adoptStarterMerchandising
      parameters:
        - description: The brand to adopt for. Must be one of your account's own brands.
          in: path
          name: brand_id
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/CatalogIdempotencyKey'
        - $ref: '#/components/parameters/CatalogResolvedClient'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdoptStarterMerchandisingRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/StarterMerchandisingAdoption'
                type: object
          description: >-
            the adoption result — the offerings adopted and the offerings
            skipped (already merchandised, or no template available), with the
            pack version and content hash; or an idempotent replay of the
            original result
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/CatalogProblem'
          description: >-
            missing Idempotency-Key, malformed body, or a pack_version this
            platform does not serve (the current version is stated in your
            welcome pack)
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/CatalogProblem'
          description: >-
            authentication is missing or invalid — nothing about the request is
            processed before authentication succeeds
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/CatalogProblem'
          description: >-
            no such brand FOR THIS ACCOUNT (an unknown brand and a foreign
            client's brand are ONE indistinguishable refusal — no existence
            oracle; adoption never creates a brand) — nothing was adopted
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/CatalogProblem'
          description: >-
            Idempotency-Key reused with a materially different request (code
            IDEMPOTENCY_CONFLICT)
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/CatalogProblem'
          description: >-
            the durable store is temporarily unavailable — the adoption is
            refused whole (no partial adoption), nothing persisted, safe to
            retry later
      security:
        - apiKey: []
components:
  parameters:
    CatalogIdempotencyKey:
      description: >-
        Required on every mutation. Replaying the same request with the same key
        returns the original result; reusing the key with a materially different
        request is rejected 409 with machine code IDEMPOTENCY_CONFLICT.
      in: header
      name: Idempotency-Key
      required: true
      schema:
        minLength: 1
        type: string
    CatalogResolvedClient:
      description: >-
        Identifies your account. The platform sets this header from your API key
        when the request is authenticated — you do not send it yourself, and a
        value you supply is never trusted. Requests without a resolved account
        identity answer 401 before any processing, and every write is attributed
        to this identity in the audit trail.
      in: header
      name: X-Client-Id
      required: true
      schema:
        minLength: 1
        type: string
  schemas:
    AdoptStarterMerchandisingRequest:
      description: >-
        The starter-pack adoption body: the pack version you are adopting, as
        stated in your welcome pack. Nothing else rides the body — the template
        copy is held by the platform, and the brand you are adopting for comes
        from the path, so you can only ever adopt for a brand that belongs to
        your account.
      properties:
        pack_version:
          description: the starter pack version to adopt (the current version is 2)
          type: integer
      required:
        - pack_version
      type: object
    StarterMerchandisingAdoption:
      description: >-
        The starter-pack adoption result: which offerings this call
        merchandised, and which it skipped — either because they were already
        merchandised or because the pack has no template for them — together
        with the pack version and the pack's content hash. The hash is stable
        for a given pack version: the templates are a fixed, published set, so
        the hash moves only when those templates themselves change.
      properties:
        adopted:
          description: >-
            offering codes whose merchandising was written by THIS call (empty
            slots only)
          items:
            type: string
          type: array
        pack_sha:
          description: >-
            sha256 (hex) of the pack's canonical serialization — byte-stable
            across calls
          type: string
        pack_version:
          type: integer
        skipped_existing:
          description: >-
            offering codes already merchandised — never touched
            (fill-empty-only)
          items:
            type: string
          type: array
        skipped_no_template:
          description: offering codes with no class template available — nothing invented
          items:
            type: string
          type: array
      required:
        - pack_version
        - pack_sha
        - adopted
        - skipped_existing
        - skipped_no_template
      type: object
    CatalogProblem:
      description: >-
        RFC 7807 problem+json (a 409 idempotency conflict carries
        code=IDEMPOTENCY_CONFLICT)
      properties:
        code:
          description: machine-readable error code, e.g. IDEMPOTENCY_CONFLICT
          type: string
        detail:
          type: string
        instance:
          type: string
        status:
          type: integer
        title:
          type: string
        type:
          type: string
      required:
        - title
        - status
      type: object
  securitySchemes:
    apiKey:
      description: 'Per-client API key (M2M). Presented as `Authorization: Bearer <key>`.'
      scheme: bearer
      type: http

````