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

# A page of a portal's brand book

> A page of one of the portal's brands, from its latest publish (never the draft), as this visitor may read it, behind the same door as the portal. `path` is what follows /p/{slug}: nothing for the first brand's first page, `{page}` for a page of the first brand (else another brand's first page), `{brand}/{page}`. Pages above the visitor (`portal.level`) are listed with a lock and carry nothing; sections above them and hidden ones are left out. Every asset URL comes signed. `redirect`: the path was an old slug or a long form, so send the reader to `canonical`. A portal showing no brand answers `view: null`.

No key needed.



## OpenAPI

````yaml /openapi.json get /api/v1/portal/{slug}/site
openapi: 3.1.0
info:
  title: artbucket
  version: '1'
  description: >-
    Agent-first asset management. The web UI is built on this API and nothing
    else, beside signing in at /api/auth. Send `Authorization: Bearer <key>`: a
    key works in one workspace with one scope, and scopes are a ladder: read <
    propose < write < admin. People signed in to the app carry a session cookie
    instead, and their scope is what their grants add up to: on the
    organization, the workspace, or single collections and assets. A scope shown
    as needed on the workspace is also enough on the one collection or asset a
    route acts on. Agents (MCP at POST /api/v1/mcp) usually get `propose`: what
    they add waits for a human.
servers:
  - url: http://localhost:3000
security:
  - bearer: []
  - session: []
  - {}
paths:
  /api/v1/portal/{slug}/site:
    parameters:
      - name: slug
        in: path
        required: true
        description: The portal's address
        schema:
          type: string
    get:
      summary: A page of a portal's brand book
      description: >-
        A page of one of the portal's brands, from its latest publish (never the
        draft), as this visitor may read it, behind the same door as the portal.
        `path` is what follows /p/{slug}: nothing for the first brand's first
        page, `{page}` for a page of the first brand (else another brand's first
        page), `{brand}/{page}`. Pages above the visitor (`portal.level`) are
        listed with a lock and carry nothing; sections above them and hidden
        ones are left out. Every asset URL comes signed. `redirect`: the path
        was an old slug or a long form, so send the reader to `canonical`. A
        portal showing no brand answers `view: null`.


        No key needed.
      parameters:
        - name: path
          in: query
          schema:
            type: string
          description: The portal path, e.g. logo or other-brand/logo
        - name: context
          in: query
          schema:
            type: string
          description: The context the reader starts in, e.g. dark-background
        - name: lang
          in: query
          schema:
            type: string
          description: 'The reader''s language, a lowercase tag: ar, en-gb'
      responses:
        '200':
          description: The page
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      portal:
                        type: object
                        properties:
                          slug:
                            type: string
                          name:
                            type: string
                          theme:
                            type: object
                            properties:
                              logo:
                                description: >-
                                  A URL on this host: the portal's, else its
                                  organization's
                                type:
                                  - string
                                  - 'null'
                              accent:
                                description: The portal's, else its organization's
                                type:
                                  - string
                                  - 'null'
                              background:
                                type:
                                  - string
                                  - 'null'
                              icon:
                                description: The organization's, for the browser tab
                                type:
                                  - string
                                  - 'null'
                              product:
                                type: string
                                description: What the organization calls the product
                            required:
                              - logo
                              - accent
                              - background
                              - icon
                              - product
                            additionalProperties: false
                            description: >-
                              The portal's own look, for its header: pages wear
                              their brand's
                          site:
                            type: object
                            properties:
                              footer:
                                type: object
                                properties:
                                  text:
                                    description: Markdown
                                    type: string
                                    maxLength: 2000
                                  links:
                                    maxItems: 8
                                    type: array
                                    items:
                                      type: object
                                      properties:
                                        label:
                                          type: string
                                          minLength: 1
                                          maxLength: 60
                                        href:
                                          type: string
                                          maxLength: 2000
                                      required:
                                        - label
                                        - href
                                      additionalProperties: false
                                  credit:
                                    type: string
                                    maxLength: 120
                                  feedback:
                                    description: 'A URL or mailto:'
                                    type: string
                                    maxLength: 2000
                                additionalProperties: false
                              quick:
                                description: 'Quick grab: pinned links in the header'
                                maxItems: 6
                                type: array
                                items:
                                  type: object
                                  properties:
                                    label:
                                      type: string
                                      minLength: 1
                                      maxLength: 40
                                    brand:
                                      description: >-
                                        With page: a brand the portal carries;
                                        the first when left out
                                      type: string
                                      maxLength: 60
                                    page:
                                      type: string
                                      maxLength: 60
                                      pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
                                    asset:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    href:
                                      type: string
                                      maxLength: 2000
                                  required:
                                    - label
                                  additionalProperties: false
                              terms:
                                description: >-
                                  Markdown readers accept once before their
                                  first download
                                type: string
                                maxLength: 10000
                              listed:
                                description: >-
                                  Search engines may index it; public portals
                                  only
                                type: boolean
                            additionalProperties: false
                            description: >-
                              Footer, quick grab and terms; an asset in quick
                              grab comes with `href`, signed to download
                          brands:
                            type: array
                            items:
                              type: object
                              properties:
                                slug:
                                  type: string
                                name:
                                  type: string
                                publishedAt:
                                  anyOf:
                                    - type: string
                                      format: date-time
                                      pattern: >-
                                        ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                                    - type: 'null'
                                  description: 'null: shown as it stands, having no history'
                              required:
                                - slug
                                - name
                                - publishedAt
                              additionalProperties: false
                            description: >-
                              The brands it shows, in order; one never published
                              is left out
                          assets:
                            type: boolean
                            description: 'It shows collections: its Assets view'
                          level:
                            type: string
                            enum:
                              - everyone
                              - partners
                              - members
                            description: >-
                              Who the visitor is to it: everyone, partners (its
                              password or an approved request) or members
                        required:
                          - slug
                          - name
                          - theme
                          - site
                          - brands
                          - assets
                          - level
                        additionalProperties: false
                      canonical:
                        description: >-
                          The page's path on the portal, what links use; null
                          with no page
                        type:
                          - string
                          - 'null'
                      redirect:
                        type: boolean
                        description: >-
                          The path asked was an old slug or a long form: send
                          the reader to canonical
                      view:
                        anyOf:
                          - type: object
                            properties:
                              brand:
                                type: object
                                properties:
                                  slug:
                                    type: string
                                  name:
                                    type: string
                                required:
                                  - slug
                                  - name
                                additionalProperties: false
                              version:
                                anyOf:
                                  - type: object
                                    properties:
                                      number:
                                        type: integer
                                        minimum: -9007199254740991
                                        maximum: 9007199254740991
                                      publishedAt:
                                        anyOf:
                                          - type: string
                                            format: date-time
                                            pattern: >-
                                              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                                          - type: 'null'
                                    required:
                                      - number
                                      - publishedAt
                                    additionalProperties: false
                                  - type: 'null'
                                description: 'The version it shows; null: the draft'
                              context:
                                type:
                                  - string
                                  - 'null'
                              contexts:
                                type: array
                                items:
                                  type: string
                                description: Every context some rule is scoped to
                              lang:
                                type:
                                  - string
                                  - 'null'
                              theme:
                                type: object
                                properties:
                                  v1:
                                    type: object
                                    propertyNames:
                                      type: string
                                    additionalProperties: {}
                                    description: >-
                                      The accent, lifted for light and dark
                                      pages, and the faces, as before W3
                                  surface:
                                    anyOf:
                                      - type: string
                                        description: A hex color
                                      - type: 'null'
                                    description: >-
                                      The page ground; null: none set or named,
                                      so the page keeps the app's, light or dark
                                  panel:
                                    type: string
                                    description: A hex color
                                  dark:
                                    type: string
                                    description: A hex color
                                  ink:
                                    type: string
                                    description: A hex color
                                  muted:
                                    type: string
                                    description: A hex color
                                  onDark:
                                    type: string
                                    description: A hex color
                                  mutedOnDark:
                                    type: string
                                    description: A hex color
                                  accent:
                                    type: string
                                    description: >-
                                      The fill, as the brand has it: bands and
                                      buttons
                                  accentText:
                                    type: string
                                    description: >-
                                      The accent where it is text (links), at
                                      4.5:1 on the surface
                                  onAccent:
                                    type: string
                                    description: A hex color
                                  accentUse:
                                    type: string
                                    enum:
                                      - fill
                                      - hairline
                                  line:
                                    type: string
                                    description: A hex color
                                  faces:
                                    type: object
                                    properties:
                                      head:
                                        type: object
                                        properties:
                                          family:
                                            type: string
                                          weight:
                                            type: number
                                          file:
                                            description: The font file for its weight
                                            type: string
                                            format: uuid
                                            pattern: >-
                                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                          files:
                                            description: >-
                                              Every font file of the rule, one
                                              @font-face each
                                            type: array
                                            items:
                                              type: object
                                              properties:
                                                id:
                                                  type: string
                                                  format: uuid
                                                  pattern: >-
                                                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                                filename:
                                                  type: string
                                                mime:
                                                  type: string
                                              required:
                                                - id
                                                - filename
                                                - mime
                                              additionalProperties: false
                                          fallback:
                                            type: string
                                          google:
                                            description: >-
                                              From Google Fonts, with no files: its
                                              CSS is imported
                                            type: boolean
                                            const: true
                                        required:
                                          - family
                                        additionalProperties: false
                                      body:
                                        type: object
                                        properties:
                                          family:
                                            type: string
                                          weight:
                                            type: number
                                          file:
                                            description: The font file for its weight
                                            type: string
                                            format: uuid
                                            pattern: >-
                                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                          files:
                                            description: >-
                                              Every font file of the rule, one
                                              @font-face each
                                            type: array
                                            items:
                                              type: object
                                              properties:
                                                id:
                                                  type: string
                                                  format: uuid
                                                  pattern: >-
                                                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                                filename:
                                                  type: string
                                                mime:
                                                  type: string
                                              required:
                                                - id
                                                - filename
                                                - mime
                                              additionalProperties: false
                                          fallback:
                                            type: string
                                          google:
                                            description: >-
                                              From Google Fonts, with no files: its
                                              CSS is imported
                                            type: boolean
                                            const: true
                                        required:
                                          - family
                                        additionalProperties: false
                                      label:
                                        type: object
                                        properties:
                                          family:
                                            type: string
                                          weight:
                                            type: number
                                          file:
                                            description: The font file for its weight
                                            type: string
                                            format: uuid
                                            pattern: >-
                                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                          files:
                                            description: >-
                                              Every font file of the rule, one
                                              @font-face each
                                            type: array
                                            items:
                                              type: object
                                              properties:
                                                id:
                                                  type: string
                                                  format: uuid
                                                  pattern: >-
                                                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                                filename:
                                                  type: string
                                                mime:
                                                  type: string
                                              required:
                                                - id
                                                - filename
                                                - mime
                                              additionalProperties: false
                                          fallback:
                                            type: string
                                          google:
                                            description: >-
                                              From Google Fonts, with no files: its
                                              CSS is imported
                                            type: boolean
                                            const: true
                                          case:
                                            type: string
                                          tracking:
                                            type: number
                                            description: In em
                                        required:
                                          - family
                                          - case
                                          - tracking
                                        additionalProperties: false
                                    additionalProperties: false
                                  radius:
                                    type: number
                                  width:
                                    type: string
                                    enum:
                                      - narrow
                                      - normal
                                      - wide
                                  density:
                                    type: string
                                    enum:
                                      - compact
                                      - normal
                                      - airy
                                  scale:
                                    type: number
                                  device:
                                    anyOf:
                                      - type: string
                                        format: uuid
                                        pattern: >-
                                          ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                      - type: 'null'
                                  logo:
                                    anyOf:
                                      - type: object
                                        properties:
                                          key:
                                            type: string
                                        required:
                                          - key
                                        additionalProperties: false
                                      - type: 'null'
                                  nav:
                                    type: string
                                    enum:
                                      - sidebar
                                      - top
                                      - overlay
                                  band:
                                    type: boolean
                                    description: header is band
                                  header:
                                    type: string
                                    enum:
                                      - plain
                                      - band
                                      - split
                                  separation:
                                    type: string
                                    enum:
                                      - space
                                      - hairline
                                  numbering:
                                    type: boolean
                                  motion:
                                    type: string
                                    enum:
                                      - none
                                      - subtle
                                  toc:
                                    type: string
                                    enum:
                                      - side
                                      - inline
                                      - none
                                    description: >-
                                      On this page: a side column, a list under
                                      the page header, or none
                                  checks:
                                    type: array
                                    items:
                                      type: object
                                      properties:
                                        pair:
                                          type: string
                                          description: >-
                                            Which color on which, e.g. ink on
                                            surface
                                        fg:
                                          type: string
                                        bg:
                                          type: string
                                        ratio:
                                          type: number
                                        need:
                                          type: number
                                          description: >-
                                            The contrast it must reach: 4.5 for
                                            text, 3 for marks
                                        ok:
                                          type: boolean
                                        used:
                                          type: string
                                          description: >-
                                            The color used: fg when it passes, else
                                            its fallback
                                      required:
                                        - pair
                                        - fg
                                        - bg
                                        - ratio
                                        - need
                                        - ok
                                        - used
                                      additionalProperties: false
                                    description: >-
                                      Contrast of each pair in the look: one
                                      that fails falls back to a color that
                                      reads, and says which
                                  settings:
                                    type: object
                                    properties:
                                      accent:
                                        description: >-
                                          Color rule for links, marks and brand
                                          grounds; color.primary, brand or accent
                                          when left out
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      accentUse:
                                        description: >-
                                          hairline: the accent draws rules and
                                          marks, never fills
                                        type: string
                                        enum:
                                          - fill
                                          - hairline
                                      surface:
                                        description: >-
                                          The page ground; color.background,
                                          surface or paper when left out, else the
                                          app's
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      panel:
                                        description: >-
                                          Panels and alternate sections; a step
                                          off the surface when left out
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      dark:
                                        description: The dark ground
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      ink:
                                        description: >-
                                          Text; color.ink, text or foreground when
                                          left out, else black or white by
                                          contrast
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      muted:
                                        description: >-
                                          Quiet text; mixed from ink and surface
                                          when left out
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      head:
                                        description: Font rule for headings
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      body:
                                        description: Font rule for text
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      label:
                                        description: >-
                                          Font rule for eyebrows, labels and
                                          running heads; its spec.case and
                                          spec.tracking set them
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      logo:
                                        description: >-
                                          The rule whose picture is the site's
                                          mark; logo.primary, mark or wordmark
                                          when left out
                                        anyOf:
                                          - type: string
                                            maxLength: 120
                                            pattern: >-
                                              ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)*$
                                          - type: 'null'
                                      device:
                                        description: >-
                                          An SVG asset: the brand's symbol or
                                          pattern for covers, dividers and pattern
                                          grounds
                                        anyOf:
                                          - type: string
                                            format: uuid
                                            pattern: >-
                                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                          - type: 'null'
                                      radius:
                                        description: Corner radius in px
                                        type: integer
                                        minimum: 0
                                        maximum: 40
                                      width:
                                        type: string
                                        enum:
                                          - narrow
                                          - normal
                                          - wide
                                      density:
                                        type: string
                                        enum:
                                          - compact
                                          - normal
                                          - airy
                                      scale:
                                        description: Heading size ratio; 1.25 when left out
                                        type: number
                                        minimum: 1.067
                                        maximum: 1.618
                                      nav:
                                        type: string
                                        enum:
                                          - sidebar
                                          - top
                                          - overlay
                                      band:
                                        description: >-
                                          Every page opens on a band of the brand
                                          color; header band says the same
                                        type: boolean
                                      header:
                                        description: >-
                                          A page's opening: on the page, on a band
                                          of the brand color, or beside its cover
                                        type: string
                                        enum:
                                          - plain
                                          - band
                                          - split
                                      separation:
                                        description: >-
                                          Between two sections on the page's own
                                          ground: space alone, or a hairline too
                                        type: string
                                        enum:
                                          - space
                                          - hairline
                                      numbering:
                                        description: 'Number chapters and pages: 01, 01.2'
                                        type: boolean
                                      motion:
                                        description: >-
                                          subtle: sections reveal as they scroll
                                          in; never with reduced motion
                                        type: string
                                        enum:
                                          - none
                                          - subtle
                                      toc:
                                        description: >-
                                          On this page: a side column, a list
                                          under the page header, or hidden
                                        type: string
                                        enum:
                                          - side
                                          - inline
                                          - none
                                      languages:
                                        description: >-
                                          The languages readers pick from; the
                                          first is the one the pages are written
                                          in
                                        maxItems: 12
                                        type: array
                                        items:
                                          type: object
                                          properties:
                                            code:
                                              type: string
                                              maxLength: 20
                                              pattern: ^[a-z]{2,3}(-[a-z0-9]{2,8})?$
                                            label:
                                              type: string
                                              minLength: 1
                                              maxLength: 40
                                            dir:
                                              description: From the language when left out
                                              type: string
                                              enum:
                                                - ltr
                                                - rtl
                                          required:
                                            - code
                                            - label
                                          additionalProperties: false
                                    additionalProperties: false
                                required:
                                  - v1
                                  - surface
                                  - panel
                                  - dark
                                  - ink
                                  - muted
                                  - onDark
                                  - mutedOnDark
                                  - accent
                                  - accentText
                                  - onAccent
                                  - accentUse
                                  - line
                                  - faces
                                  - radius
                                  - width
                                  - density
                                  - scale
                                  - device
                                  - logo
                                  - nav
                                  - band
                                  - header
                                  - separation
                                  - numbering
                                  - motion
                                  - toc
                                  - checks
                                  - settings
                                additionalProperties: false
                                description: >-
                                  The look, derived and graded, and the settings
                                  it came from
                              nav:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    slug:
                                      type: string
                                    title:
                                      type: string
                                    parent:
                                      description: The page it sits under; null at the top
                                      type:
                                        - string
                                        - 'null'
                                    position:
                                      type: integer
                                      minimum: -9007199254740991
                                      maximum: 9007199254740991
                                    eyebrow:
                                      type:
                                        - string
                                        - 'null'
                                    lede:
                                      type:
                                        - string
                                        - 'null'
                                    cover:
                                      anyOf:
                                        - type: string
                                          format: uuid
                                          pattern: >-
                                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                        - type: 'null'
                                      description: Its header and card image
                                    icon:
                                      type:
                                        - string
                                        - 'null'
                                    audience:
                                      type: string
                                      enum:
                                        - everyone
                                        - partners
                                        - members
                                      description: 'On portals: who may read it'
                                    tabs:
                                      type: boolean
                                      description: >-
                                        Its child pages show as tabs across its
                                        top
                                    home:
                                      type: boolean
                                      description: >-
                                        The first page, opening on a cover:
                                        never numbered
                                    locked:
                                      type: boolean
                                      description: >-
                                        Above the reader: listed by title with a
                                        lock, nothing more
                                    updatedAt:
                                      anyOf:
                                        - type: string
                                          format: date-time
                                          pattern: >-
                                            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                                        - type: 'null'
                                  required:
                                    - slug
                                    - title
                                    - parent
                                    - position
                                    - eyebrow
                                    - lede
                                    - cover
                                    - icon
                                    - audience
                                    - tabs
                                    - home
                                    - locked
                                    - updatedAt
                                  additionalProperties: false
                                description: Every page the reader is listed, in order
                              page:
                                anyOf:
                                  - type: object
                                    properties:
                                      slug:
                                        type: string
                                      title:
                                        type: string
                                      parent:
                                        description: The page it sits under; null at the top
                                        type:
                                          - string
                                          - 'null'
                                      position:
                                        type: integer
                                        minimum: -9007199254740991
                                        maximum: 9007199254740991
                                      eyebrow:
                                        type:
                                          - string
                                          - 'null'
                                      lede:
                                        type:
                                          - string
                                          - 'null'
                                      cover:
                                        anyOf:
                                          - type: string
                                            format: uuid
                                            pattern: >-
                                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                          - type: 'null'
                                        description: Its header and card image
                                      icon:
                                        type:
                                          - string
                                          - 'null'
                                      audience:
                                        type: string
                                        enum:
                                          - everyone
                                          - partners
                                          - members
                                        description: 'On portals: who may read it'
                                      tabs:
                                        type: boolean
                                        description: >-
                                          Its child pages show as tabs across its
                                          top
                                      home:
                                        type: boolean
                                        description: >-
                                          The first page, opening on a cover:
                                          never numbered
                                      updatedAt:
                                        anyOf:
                                          - type: string
                                            format: date-time
                                            pattern: >-
                                              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                                          - type: 'null'
                                      sections:
                                        type: array
                                        items:
                                          type: object
                                          properties:
                                            id:
                                              type: string
                                            template:
                                              type: string
                                              description: GET /api/v1/brand/templates lists them
                                            title:
                                              type: string
                                            body:
                                              type: string
                                              description: Markdown
                                            width:
                                              type: string
                                              enum:
                                                - text
                                                - wide
                                                - full
                                            columns:
                                              type: integer
                                              minimum: -9007199254740991
                                              maximum: 9007199254740991
                                            tone:
                                              type: string
                                              description: >-
                                                Its ground: plain, tint, brand, panel,
                                                dark, color, image or pattern
                                            hidden:
                                              type: boolean
                                            keys:
                                              type: array
                                              items:
                                                type: string
                                              description: The rules it shows, by key, in order
                                            props:
                                              type: object
                                              propertyNames:
                                                type: string
                                              additionalProperties: {}
                                              description: Its template's own settings
                                            eyebrow:
                                              type: string
                                            lede:
                                              type: string
                                            aside:
                                              type: string
                                              description: Markdown
                                            tab:
                                              description: >-
                                                Sections sharing a tab name show under
                                                one tab
                                              type: string
                                            background:
                                              type: object
                                              properties:
                                                color:
                                                  type: string
                                                image:
                                                  type: string
                                                  format: uuid
                                                  pattern: >-
                                                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                                scrim:
                                                  type: number
                                              additionalProperties: false
                                            items:
                                              type: array
                                              items:
                                                type: object
                                                properties:
                                                  key:
                                                    type: string
                                                    description: A rule it shows
                                                  asset:
                                                    type: string
                                                    format: uuid
                                                    pattern: >-
                                                      ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                                  title:
                                                    type: string
                                                  text:
                                                    type: string
                                                    description: Markdown
                                                  verdict:
                                                    type: string
                                                    enum:
                                                      - do
                                                      - dont
                                                  caption:
                                                    type: string
                                                  link:
                                                    type: string
                                                  label:
                                                    type: string
                                                  icon:
                                                    type: string
                                                  download:
                                                    type: boolean
                                                    description: >-
                                                      false: for reference, never offered as a
                                                      download
                                                additionalProperties: false
                                                description: >-
                                                  A thing a template lists: a do or a
                                                  don't with its picture, a picture in a
                                                  gallery
                                            audience:
                                              type: string
                                              enum:
                                                - everyone
                                                - partners
                                                - members
                                            contexts:
                                              description: >-
                                                A tab per context, its rules resolved
                                                for each
                                              type: array
                                              items:
                                                type: string
                                            only:
                                              description: Shown only in this context
                                              type: string
                                            translations:
                                              description: >-
                                                Its words by language tag; readers get
                                                them already in their language
                                              type: object
                                              propertyNames:
                                                type: string
                                              additionalProperties:
                                                type: object
                                                properties:
                                                  title:
                                                    type: string
                                                    maxLength: 300
                                                  eyebrow:
                                                    type: string
                                                    maxLength: 120
                                                  lede:
                                                    type: string
                                                    maxLength: 1000
                                                  body:
                                                    type: string
                                                    maxLength: 20000
                                                  aside:
                                                    type: string
                                                    maxLength: 4000
                                                  items:
                                                    maxItems: 60
                                                    type: array
                                                    items:
                                                      anyOf:
                                                        - type: object
                                                          properties:
                                                            title:
                                                              type: string
                                                              maxLength: 200
                                                            text:
                                                              type: string
                                                              maxLength: 4000
                                                            caption:
                                                              type: string
                                                              maxLength: 500
                                                          additionalProperties: false
                                                        - type: 'null'
                                                additionalProperties: false
                                          required:
                                            - id
                                            - template
                                            - title
                                            - body
                                            - width
                                            - columns
                                            - tone
                                            - hidden
                                            - keys
                                            - props
                                          additionalProperties: false
                                        description: >-
                                          What the reader gets: hidden ones for
                                          editors only
                                      aliases:
                                        type: array
                                        items:
                                          type: string
                                      layout:
                                        type: string
                                        enum:
                                          - book
                                          - landing
                                        description: >-
                                          landing: a front with no nav column,
                                          on-this-page or pager; book: a chapter
                                    required:
                                      - slug
                                      - title
                                      - parent
                                      - position
                                      - eyebrow
                                      - lede
                                      - cover
                                      - icon
                                      - audience
                                      - tabs
                                      - home
                                      - updatedAt
                                      - sections
                                      - aliases
                                      - layout
                                    additionalProperties: false
                                  - type: 'null'
                                description: 'null: locked for this reader'
                              locked:
                                type: boolean
                              redirect:
                                description: 'An old slug was asked for: the page''s slug now'
                                type: string
                              rules:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    key:
                                      type: string
                                      description: Dotted, e.g. color.primary
                                    label:
                                      description: >-
                                        The heading readers see; null: the key,
                                        in words
                                      type:
                                        - string
                                        - 'null'
                                    context:
                                      description: 'null: the default'
                                      type:
                                        - string
                                        - 'null'
                                    type:
                                      type: string
                                      enum:
                                        - color
                                        - text
                                        - number
                                        - list
                                        - font
                                    value:
                                      anyOf:
                                        - type: string
                                        - type: number
                                        - type: array
                                          items:
                                            type:
                                              - string
                                              - number
                                        - type: object
                                          properties:
                                            family:
                                              type: string
                                              minLength: 1
                                              maxLength: 120
                                            size:
                                              description: Pixels
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 1000
                                            weight:
                                              description: 400 regular, 700 bold
                                              type: integer
                                              minimum: 1
                                              maximum: 1000
                                          required:
                                            - family
                                          additionalProperties: false
                                    spec:
                                      anyOf:
                                        - type: object
                                          propertyNames:
                                            type: string
                                          additionalProperties: {}
                                        - type: 'null'
                                      description: >-
                                        Details beyond the value, by type:
                                        RuleInput's spec
                                    usage:
                                      type:
                                        - string
                                        - 'null'
                                    assets:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          id:
                                            type: string
                                            format: uuid
                                            pattern: >-
                                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                          rendition:
                                            type:
                                              - string
                                              - 'null'
                                          title:
                                            type:
                                              - string
                                              - 'null'
                                          filename:
                                            type: string
                                          mime:
                                            type: string
                                          width:
                                            anyOf:
                                              - type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                              - type: 'null'
                                          height:
                                            anyOf:
                                              - type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                              - type: 'null'
                                          size:
                                            type: integer
                                            minimum: -9007199254740991
                                            maximum: 9007199254740991
                                          preview:
                                            type: boolean
                                            description: >-
                                              Has renditions: /a/{id}/{rendition}
                                              draws it
                                        required:
                                          - id
                                          - rendition
                                          - title
                                          - filename
                                          - mime
                                          - width
                                          - height
                                          - size
                                          - preview
                                        additionalProperties: false
                                      description: >-
                                        Its assets readers may see, in order;
                                        one that may not be used is left out
                                  required:
                                    - key
                                    - label
                                    - context
                                    - type
                                    - value
                                    - spec
                                    - usage
                                    - assets
                                  additionalProperties: false
                                description: >-
                                  Every context version of the rules the page
                                  binds, the theme's, and those their specs name
                              media:
                                type: object
                                propertyNames:
                                  type: string
                                  format: uuid
                                  pattern: >-
                                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                additionalProperties:
                                  type: object
                                  properties:
                                    id:
                                      type: string
                                      format: uuid
                                      pattern: >-
                                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                    filename:
                                      type: string
                                    title:
                                      type:
                                        - string
                                        - 'null'
                                    description:
                                      type:
                                        - string
                                        - 'null'
                                    creator:
                                      type:
                                        - string
                                        - 'null'
                                    copyright:
                                      type:
                                        - string
                                        - 'null'
                                    mime:
                                      type: string
                                    size:
                                      type: integer
                                      minimum: -9007199254740991
                                      maximum: 9007199254740991
                                    width:
                                      anyOf:
                                        - type: integer
                                          minimum: -9007199254740991
                                          maximum: 9007199254740991
                                        - type: 'null'
                                    height:
                                      anyOf:
                                        - type: integer
                                          minimum: -9007199254740991
                                          maximum: 9007199254740991
                                        - type: 'null'
                                    thumbnail:
                                      description: A URL on this host
                                      type:
                                        - string
                                        - 'null'
                                    preview:
                                      description: Larger, for a closer look
                                      type:
                                        - string
                                        - 'null'
                                    downloads:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          preset:
                                            type: string
                                            enum:
                                              - web
                                              - social
                                              - story
                                              - print
                                              - png
                                              - original
                                          label:
                                            type: string
                                          hint:
                                            type: string
                                          url:
                                            type: string
                                          filename:
                                            type: string
                                        required:
                                          - preset
                                          - label
                                          - hint
                                          - url
                                          - filename
                                        additionalProperties: false
                                    original:
                                      type: string
                                      description: The file as uploaded
                                    focus:
                                      anyOf:
                                        - type: object
                                          properties:
                                            x:
                                              type: number
                                            'y':
                                              type: number
                                          required:
                                            - x
                                            - 'y'
                                          additionalProperties: false
                                        - type: 'null'
                                      description: >-
                                        Where a crop keeps its subject, from 0
                                        to 1 across and down
                                    updatedAt:
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                                  required:
                                    - id
                                    - filename
                                    - title
                                    - description
                                    - creator
                                    - copyright
                                    - mime
                                    - size
                                    - width
                                    - height
                                    - thumbnail
                                    - preview
                                    - downloads
                                    - original
                                    - focus
                                    - updatedAt
                                  additionalProperties: false
                                description: The assets it names that may be used, by id
                              collections:
                                type: object
                                propertyNames:
                                  type: string
                                additionalProperties:
                                  type: object
                                  properties:
                                    items:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          id:
                                            type: string
                                            format: uuid
                                            pattern: >-
                                              ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                          filename:
                                            type: string
                                          title:
                                            type:
                                              - string
                                              - 'null'
                                          description:
                                            type:
                                              - string
                                              - 'null'
                                          creator:
                                            type:
                                              - string
                                              - 'null'
                                          copyright:
                                            type:
                                              - string
                                              - 'null'
                                          mime:
                                            type: string
                                          size:
                                            type: integer
                                            minimum: -9007199254740991
                                            maximum: 9007199254740991
                                          width:
                                            anyOf:
                                              - type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                              - type: 'null'
                                          height:
                                            anyOf:
                                              - type: integer
                                                minimum: -9007199254740991
                                                maximum: 9007199254740991
                                              - type: 'null'
                                          thumbnail:
                                            description: A URL on this host
                                            type:
                                              - string
                                              - 'null'
                                          preview:
                                            description: Larger, for a closer look
                                            type:
                                              - string
                                              - 'null'
                                          downloads:
                                            type: array
                                            items:
                                              type: object
                                              properties:
                                                preset:
                                                  type: string
                                                  enum:
                                                    - web
                                                    - social
                                                    - story
                                                    - print
                                                    - png
                                                    - original
                                                label:
                                                  type: string
                                                hint:
                                                  type: string
                                                url:
                                                  type: string
                                                filename:
                                                  type: string
                                              required:
                                                - preset
                                                - label
                                                - hint
                                                - url
                                                - filename
                                              additionalProperties: false
                                          original:
                                            type: string
                                            description: The file as uploaded
                                          focus:
                                            anyOf:
                                              - type: object
                                                properties:
                                                  x:
                                                    type: number
                                                  'y':
                                                    type: number
                                                required:
                                                  - x
                                                  - 'y'
                                                additionalProperties: false
                                              - type: 'null'
                                            description: >-
                                              Where a crop keeps its subject, from 0
                                              to 1 across and down
                                          updatedAt:
                                            type: string
                                            format: date-time
                                            pattern: >-
                                              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                                        required:
                                          - id
                                          - filename
                                          - title
                                          - description
                                          - creator
                                          - copyright
                                          - mime
                                          - size
                                          - width
                                          - height
                                          - thumbnail
                                          - preview
                                          - downloads
                                          - original
                                          - focus
                                          - updatedAt
                                        additionalProperties: false
                                    total:
                                      type: integer
                                      minimum: -9007199254740991
                                      maximum: 9007199254740991
                                    error:
                                      description: Why it shows nothing; editors only
                                      type:
                                        - string
                                        - 'null'
                                  required:
                                    - items
                                    - total
                                    - error
                                  additionalProperties: false
                                description: A collection section's assets, by section id
                              updates:
                                description: >-
                                  With an updates section: the latest publishes,
                                  newest first, as many as its largest limit
                                type: array
                                items:
                                  type: object
                                  properties:
                                    version:
                                      type: integer
                                      minimum: -9007199254740991
                                      maximum: 9007199254740991
                                    publishedAt:
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
                                    publishedBy:
                                      type:
                                        - string
                                        - 'null'
                                    note:
                                      description: What changed, in the publisher's words
                                      type:
                                        - string
                                        - 'null'
                                    image:
                                      anyOf:
                                        - type: string
                                          format: uuid
                                          pattern: >-
                                            ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                        - type: 'null'
                                      description: >-
                                        An asset shown beside the note; null
                                        when it may no longer be used
                                    changes:
                                      type: object
                                      properties:
                                        rules:
                                          type: object
                                          properties:
                                            added:
                                              type: array
                                              items:
                                                type: string
                                            changed:
                                              type: array
                                              items:
                                                type: string
                                            removed:
                                              type: array
                                              items:
                                                type: string
                                          required:
                                            - added
                                            - changed
                                            - removed
                                          additionalProperties: false
                                          description: By key
                                        pages:
                                          type: object
                                          properties:
                                            added:
                                              type: array
                                              items:
                                                type: object
                                                properties:
                                                  slug:
                                                    type: string
                                                  title:
                                                    type: string
                                                required:
                                                  - slug
                                                  - title
                                                additionalProperties: false
                                            changed:
                                              type: array
                                              items:
                                                type: object
                                                properties:
                                                  slug:
                                                    type: string
                                                  title:
                                                    type: string
                                                required:
                                                  - slug
                                                  - title
                                                additionalProperties: false
                                            removed:
                                              type: array
                                              items:
                                                type: object
                                                properties:
                                                  slug:
                                                    type: string
                                                  title:
                                                    type: string
                                                required:
                                                  - slug
                                                  - title
                                                additionalProperties: false
                                          required:
                                            - added
                                            - changed
                                            - removed
                                          additionalProperties: false
                                          description: >-
                                            Pages readers can reach: a hidden one is
                                            left out
                                      required:
                                        - rules
                                        - pages
                                      additionalProperties: false
                                      description: >-
                                        What it changed for readers since the
                                        publish before it
                                  required:
                                    - version
                                    - publishedAt
                                    - publishedBy
                                    - note
                                    - image
                                    - changes
                                  additionalProperties: false
                              signed:
                                type: object
                                propertyNames:
                                  type: string
                                  format: uuid
                                  pattern: >-
                                    ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                                additionalProperties:
                                  type: string
                                description: >-
                                  Signatures by asset id, for visitors; empty
                                  for members
                              warnings:
                                type: array
                                items:
                                  type: string
                                description: >-
                                  Editors only: what a reader would trip on,
                                  assets they won't see, and theme pairs that
                                  fell back
                              missing:
                                type: array
                                items:
                                  type: string
                                description: >-
                                  Editors only: keys a section binds with no
                                  rule
                            required:
                              - brand
                              - version
                              - context
                              - contexts
                              - lang
                              - theme
                              - nav
                              - page
                              - locked
                              - rules
                              - media
                              - collections
                              - signed
                              - warnings
                              - missing
                            additionalProperties: false
                          - type: 'null'
                        description: >-
                          null: it shows no brand, so its Assets view is the
                          portal
                    required:
                      - portal
                      - canonical
                      - redirect
                      - view
                    additionalProperties: false
                required:
                  - data
                additionalProperties: false
        '401':
          description: 'Not in yet: how to get in'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        const: password
                      message:
                        type: string
                      detail:
                        type: object
                        properties:
                          name:
                            type: string
                          access:
                            type: string
                            enum:
                              - password
                              - members
                          theme:
                            type: object
                            properties:
                              logo:
                                description: >-
                                  A URL on this host: the portal's, else its
                                  organization's
                                type:
                                  - string
                                  - 'null'
                              accent:
                                description: The portal's, else its organization's
                                type:
                                  - string
                                  - 'null'
                              background:
                                type:
                                  - string
                                  - 'null'
                              icon:
                                description: The organization's, for the browser tab
                                type:
                                  - string
                                  - 'null'
                              product:
                                type: string
                                description: What the organization calls the product
                            required:
                              - logo
                              - accent
                              - background
                              - icon
                              - product
                            additionalProperties: false
                        required:
                          - name
                          - access
                          - theme
                        additionalProperties: false
                    required:
                      - code
                      - message
                      - detail
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        default:
          description: An error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      detail: {}
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
      security: []
components:
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: 'An API key: ab_...'
    session:
      type: apiKey
      in: cookie
      name: better-auth.session_token
      description: Signed in, at /api/auth

````