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

# Get the section-type catalog

> Every section type a page or layout may use, with its config fields, their allowed values, and authoring notes.
Read this before composing sections: it is the machine-readable definition of what a `hero` or a `plans` block accepts, and section types are added over time. `content` types belong in a page's `sections`; `layout` types (header, footer) belong to the site layout and appear on every page.




## OpenAPI

````yaml /openapi-platform.json get /v1/platform/website/section-types
openapi: 3.0.0
info:
  title: 1club Platform API
  version: 1.0.0
  description: >-
    The 1club Platform API lets you programmatically access and manage your
    organization's data.


    ## Official API Contract


    This documentation is the official source of truth for the 1club Platform
    API.

    If an integration relies on undocumented endpoints, fields, response shapes,
    or internal behavior outside this spec, we can't guarantee backward
    compatibility.

    Build against what's documented here to stay stable as the platform evolves.


    ## Authentication


    All requests require a customer API key passed as a Bearer token:


    ```

    Authorization: Bearer 1club_sk_live_...

    ```


    Generate API keys from the admin portal under **Settings > API Tokens**.

    The key is tied to your organization - all responses are scoped to your
    org's data.


    ## Rate Limiting


    - **100 requests per minute** per API key

    - When exceeded, the API returns `429 Too Many Requests` with a
    `Retry-After` header

    - Rate limit headers are included in every response:
      - `X-RateLimit-Limit` - max requests per window
      - `X-RateLimit-Remaining` - requests remaining
      - `X-RateLimit-Reset` - seconds until the window resets

    ## Errors


    | Status | Meaning |

    |--------|---------|

    | `400` | Invalid request parameters |

    | `401` | Missing or invalid API key |

    | `404` | Resource not found (or doesn't belong to your organization) |

    | `429` | Rate limit exceeded |

    | `500` | Internal server error |
  contact:
    name: 1club API Support
    email: support@1club.ai
servers:
  - url: https://api.1club.ai
    description: Production API
security:
  - customerApiAuth: []
tags: []
paths:
  /v1/platform/website/section-types:
    get:
      tags:
        - Website
      summary: Get the section-type catalog
      description: >
        Every section type a page or layout may use, with its config fields,
        their allowed values, and authoring notes.

        Read this before composing sections: it is the machine-readable
        definition of what a `hero` or a `plans` block accepts, and section
        types are added over time. `content` types belong in a page's
        `sections`; `layout` types (header, footer) belong to the site layout
        and appear on every page.
      responses:
        '200':
          description: Section types with their config field definitions
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    type: array
                    items:
                      type: string
                  layout:
                    type: array
                    items:
                      type: string
                  sectionTypes:
                    type: object
                    additionalProperties:
                      type: object
                      properties:
                        fields:
                          type: array
                          items:
                            $ref: '#/components/schemas/WebsiteSectionField'
                        notes:
                          type: string
                        deprecated:
                          type: boolean
                          description: >-
                            Retired — still stored and rendered, never offered
                            for a new section.
                        presets:
                          type: array
                          description: >-
                            Named starting points. Each `config` is an overlay
                            on the type's defaults.
                          items:
                            type: object
                            properties:
                              key:
                                type: string
                              config:
                                type: object
                                additionalProperties: true
                  sharedStyle:
                    type: object
                    description: >
                      The style fields EVERY content section accepts, stated
                      once instead of repeated in each entry of `sectionTypes`.
                    properties:
                      fields:
                        type: array
                        items:
                          $ref: '#/components/schemas/WebsiteSectionField'
                      notes:
                        type: string
                  defaults:
                    type: object
                    description: >-
                      The starting config for a new section, keyed by section
                      type.
                    additionalProperties:
                      type: object
                      additionalProperties: true
        '401':
          $ref: '#/components/responses/PlatformUnauthorized'
        '403':
          description: API key is missing the required `website:read` scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformError'
        '429':
          $ref: '#/components/responses/PlatformRateLimited'
      security:
        - customerApiAuth: []
components:
  schemas:
    WebsiteSectionField:
      type: object
      description: >-
        One config field of a website section. This is the ONLY description of
        the field: its control, its value space, where it belongs in an editor,
        whether it translates, and when it applies. Nothing about a field is
        documented elsewhere.
      properties:
        key:
          type: string
        type:
          type: string
          enum:
            - string
            - text
            - number
            - select
            - string_list
            - boolean
            - range
            - url
            - color
            - image
            - image_list
            - entity
            - entity_list
            - object_list
            - header
            - paragraph
          description: >-
            `header` and `paragraph` store nothing — they structure and explain
            an editing panel.
        options:
          type: array
          items:
            type: string
          description: Allowed values for `select`.
        defaultValue:
          description: >-
            What a new section starts with. See the catalog's `defaults` for the
            resolved config.
        group:
          type: string
          enum:
            - content
            - data
            - layout
            - style
            - advanced
        prominence:
          type: string
          enum:
            - card
            - panel
        order:
          type: integer
          description: >-
            Ascending display order. A conditional field always sorts after the
            field its condition names.
        width:
          type: string
          enum:
            - full
            - half
        translatable:
          type: boolean
          description: >-
            Whether this value carries per-locale overrides in the section’s
            `translations` map.
        entityType:
          type: string
          enum:
            - club
            - block
            - document
            - classType
            - planCategory
            - areaType
            - instructorType
            - instructor
            - signupForm
            - contactCustomField
            - contact
          description: >-
            For `entity` / `entity_list`: which platform record the value
            references.
        contactFilterType:
          type: string
          enum:
            - contact
            - member
            - staff
            - lead
            - lapsed
            - drop_in
        itemFields:
          type: array
          description: >-
            For `object_list`: the shape of one item. Recursive, so a nav item’s
            dropdown children and a footer link group are declared rather than
            described in prose.
          items:
            $ref: '#/components/schemas/WebsiteSectionField'
        maxItems:
          type: integer
        min:
          type: number
        max:
          type: number
        step:
          type: number
        unit:
          type: string
          description: 'For `range`: the suffix shown beside the value (e.g. "%").'
        visibleIf:
          $ref: '#/components/schemas/WebsiteSectionFieldCondition'
        deprecated:
          type: boolean
          description: >-
            Superseded: an existing section keeps its value and it still
            renders, but do not set it on a new section. The type’s `notes` name
            the replacement.
    PlatformError:
      type: object
      properties:
        error:
          type: string
        code:
          type: string
          description: >-
            A stable, machine-readable reason, when the error has one (e.g.
            `CONTACT_EXISTS`).
        details:
          type: object
          additionalProperties: true
          description: >-
            Structured values behind the error. A 409 naming an existing record
            carries its id here, e.g. `contactId`.
    WebsiteSectionFieldCondition:
      type: object
      description: >-
        When a field is relevant, as a comparison against a SIBLING field of the
        same section. Deliberately data rather than an expression, and
        deliberately unable to reach platform data or anything resolved at
        render time, so the server, the editor and a model all answer it the
        same way. Exactly one form per object.
      properties:
        field:
          type: string
          description: >-
            The sibling field this condition reads. Always resolves before the
            field carrying the condition.
        equals:
          description: Relevant when the sibling equals this value.
        oneOf:
          type: array
          items: {}
          description: Relevant when the sibling is one of these values.
        isEmpty:
          type: boolean
          description: >-
            Relevant when the sibling is (true) or is not (false) unset, blank
            or an empty array.
        allOf:
          type: array
          items:
            $ref: '#/components/schemas/WebsiteSectionFieldCondition'
        anyOf:
          type: array
          items:
            $ref: '#/components/schemas/WebsiteSectionFieldCondition'
  responses:
    PlatformUnauthorized:
      description: Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PlatformError'
    PlatformRateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PlatformError'
  securitySchemes:
    customerApiAuth:
      type: http
      scheme: bearer
      description: >-
        Organization-scoped bearer credential: a customer API key
        (1club_sk_live_...) or an MCP OAuth access token.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.