> ## 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.

# Update a section's config

> Merges the given fields into the section's existing config; fields you do not send keep their current values. Array fields are replaced wholesale, so send the whole array when changing one entry.
`index` is the section's 0-based position as returned by `GET /pages/{slug}`. Indexes shift when sections are added or removed, so re-read the page rather than reusing a stale one.
`translations` is how one section's copy is localized without rewriting the page. Unlike `config` it **replaces** the whole locale map, so read the section first and send back every locale you are keeping.




## OpenAPI

````yaml /openapi-platform.json patch /v1/platform/website/pages/{slug}/sections/{index}
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/pages/{slug}/sections/{index}:
    patch:
      tags:
        - Website
      summary: Update a section's config
      description: >
        Merges the given fields into the section's existing config; fields you
        do not send keep their current values. Array fields are replaced
        wholesale, so send the whole array when changing one entry.

        `index` is the section's 0-based position as returned by `GET
        /pages/{slug}`. Indexes shift when sections are added or removed, so
        re-read the page rather than reusing a stale one.

        `translations` is how one section's copy is localized without rewriting
        the page. Unlike `config` it **replaces** the whole locale map, so read
        the section first and send back every locale you are keeping.
      parameters:
        - in: path
          name: slug
          required: true
          schema:
            type: string
        - in: path
          name: index
          required: true
          schema:
            type: integer
        - in: query
          name: siteId
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - config
              properties:
                config:
                  type: object
                  description: Config fields to merge in
                translations:
                  type: object
                  description: >
                    Per-locale overrides of this section's config, keyed by
                    locale then field. Replaces the whole map. Leave `config` in
                    the language the site is written in; a locale with no entry
                    renders it as written.
      responses:
        '200':
          description: The page, with the section updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformWebsitePage'
        '400':
          description: Invalid body, or the index is out of range
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformError'
        '401':
          $ref: '#/components/responses/PlatformUnauthorized'
        '403':
          description: API key is missing the required `website:write` scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformError'
        '404':
          description: No page with that slug
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformError'
        '429':
          $ref: '#/components/responses/PlatformRateLimited'
      security:
        - customerApiAuth: []
components:
  schemas:
    PlatformWebsitePage:
      type: object
      description: A page on the website draft.
      properties:
        slug:
          type: string
          description: >-
            URL path segment. The homepage is served at "/" regardless of its
            slug.
        title:
          type: string
        isHomepage:
          type: boolean
        sectionCount:
          type: integer
        sectionTypes:
          type: array
          items:
            type: string
        sections:
          type: array
          description: Present when fetching a single page; omitted from list responses.
          items:
            $ref: '#/components/schemas/PlatformWebsiteSection'
        metaTitle:
          type: string
          nullable: true
        metaDescription:
          type: string
          nullable: true
        ogImage:
          type: string
          nullable: true
        noindex:
          type: boolean
          description: >-
            True when the page asks search engines not to index it and is left
            out of `sitemap.xml`.
        translations:
          type: object
          nullable: true
          description: >-
            Per-locale `metaTitle`/`metaDescription` overrides, keyed by locale:
            { "bg": { "metaTitle": "…" } }. Present when fetching a single page.
          additionalProperties:
            type: object
            properties:
              metaTitle:
                type: string
              metaDescription:
                type: string
        seo:
          $ref: '#/components/schemas/PlatformWebsitePageSeo'
        url:
          type: string
          description: The page's public URL once published.
    PlatformError:
      type: object
      properties:
        error:
          type: string
    PlatformWebsiteSection:
      type: object
      description: >-
        One section of a page or of the site layout. `config` fields depend on
        `type` - see GET /v1/platform/website/section-types for the definitions.
      properties:
        type:
          type: string
          description: Section type, e.g. "hero", "plans", "faq", "header".
        config:
          type: object
          additionalProperties: true
        translations:
          type: object
          additionalProperties: true
          description: >-
            Per-locale overrides for the section's translatable string fields,
            keyed by locale then field: { "bg": { "headline": "…" } }. Config
            values themselves stay in the default language.
    PlatformWebsitePageSeo:
      type: object
      description: >-
        What the published page will actually put in its `<head>`, after every
        fallback has been applied - the authored fields alone do not answer "is
        my SEO right?". Present when fetching a single page. Read-only.
      properties:
        metaTitle:
          type: string
          description: The `<title>`, after falling back to the page title.
        metaDescription:
          type: string
          nullable: true
          description: After falling back to `seoSettings.siteDescription`.
        ogImage:
          type: string
          nullable: true
          description: After falling back to `seoSettings.defaultOgImage`.
        canonicalUrl:
          type: string
          description: >-
            The `rel=canonical` the default-locale render emits, locale prefix
            included.
        indexable:
          type: boolean
          description: Whether search engines are asked to index this page.
        notIndexableReason:
          type: string
          nullable: true
          enum:
            - page_noindex
            - site_unpublished
            - site_inactive
          description: >-
            Why `indexable` is false. An unpublished or switched-off site is not
            indexable however the page is configured.
        localizedLocales:
          type: array
          items:
            type: string
          description: Locales carrying their own metaTitle/metaDescription overrides.
  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.

````