> ## 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 design-token catalog

> Every design token the website accepts, what it means, what it falls back to when unset, and the named looks on offer.
Read this before writing a theme. It is the machine-readable counterpart to `/section-types`: that one says what may go IN a page, this one says how the site LOOKS. Tokens are added over time, so read it rather than hardcoding the values.
Two things worth knowing before you write anything. **Unset is the normal state** - every token falls back to the organization's branding or to a value derived from the tokens above it, so a good theme sets the fewest tokens it needs and leaves the rest inherited. And **the tokens are only coherent in combinations**, which is what `presets` are for: start from one and adjust two or three tokens, rather than composing 32 from scratch.




## OpenAPI

````yaml /openapi-platform.json get /v1/platform/website/theme-tokens
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/theme-tokens:
    get:
      tags:
        - Website
      summary: Get the design-token catalog
      description: >
        Every design token the website accepts, what it means, what it falls
        back to when unset, and the named looks on offer.

        Read this before writing a theme. It is the machine-readable counterpart
        to `/section-types`: that one says what may go IN a page, this one says
        how the site LOOKS. Tokens are added over time, so read it rather than
        hardcoding the values.

        Two things worth knowing before you write anything. **Unset is the
        normal state** - every token falls back to the organization's branding
        or to a value derived from the tokens above it, so a good theme sets the
        fewest tokens it needs and leaves the rest inherited. And **the tokens
        are only coherent in combinations**, which is what `presets` are for:
        start from one and adjust two or three tokens, rather than composing 32
        from scratch.
      responses:
        '200':
          description: The token catalog
          content:
            application/json:
              schema:
                type: object
                properties:
                  tokens:
                    type: array
                    description: Every writable token.
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                        type:
                          type: string
                          description: The control - `color`, `select` or `boolean`.
                        group:
                          type: string
                          description: >-
                            `palette`, `darkPalette`, `typography`, `shape` or
                            `motion`.
                        options:
                          type: array
                          items:
                            type: string
                          description: Allowed values, for a `select`.
                        defaultValue:
                          description: >-
                            What the token renders as when unset, where that is
                            a fixed value.
                        inheritsFrom:
                          type: string
                          description: >-
                            What supplies the value when unset, where it is not
                            a fixed value.
                        order:
                          type: integer
                        visibleIf:
                          type: object
                          description: >-
                            When the token is relevant, as a comparison against
                            a sibling.
                  notes:
                    type: object
                    description: Authoring guidance, one entry per group.
                    additionalProperties:
                      type: string
                  presets:
                    type: array
                    description: >
                      Named looks. Each `tokens` is a complete, coordinated set
                      - apply one with `PUT /theme` and adjust from there.
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                        tokens:
                          type: object
                          additionalProperties: true
                  fonts:
                    type: array
                    description: >
                      The families the site can load, with the category each
                      belongs to - which is what a heading/body pairing is
                      chosen on.
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        category:
                          type: string
        '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:
  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'
  schemas:
    PlatformError:
      type: object
      properties:
        error:
          type: string
  securitySchemes:
    customerApiAuth:
      type: http
      scheme: bearer
      description: >-
        Organization-scoped bearer credential: a customer API key
        (1club_sk_live_...) or an MCP OAuth access token.

````