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

# Update organization-user settings

> Update the authenticated user's per-organization settings.

Merge semantics:
- The payload is **merged per key** (dot-flattened): only the paths present
  in the request change; everything else is untouched. Send only what changed.
- **Array lists replace wholesale** — e.g. `embeddedTables` is one opaque
  value. Always read-modify-write the full list; sending a partial list
  deletes the missing entries.
- Values equal to the server-side default are elided from storage (and come
  back via the defaults merge on read — semantically identical).

Keys are **whitelisted server-side** (`OrganizationUserSettingsRequest`).
Unknown keys are silently dropped — the request still returns `200`, so
verify persistence via the response body, which is the full merged settings
object (same shape as `GET`).

Plain JSON — this endpoint is **not** JSON:API.




## OpenAPI

````yaml /developers/openapi/admin-internal.openapi.json put /api/settings/organization-user
openapi: 3.1.0
info:
  title: admin-api
  version: '1.0'
  description: >-
    The Admin API gives you **full programmatic access** to your anny
    organization. It is built for **server-side integrations** — backend
    services, automation scripts, and custom tooling that act on behalf of your
    team.


    ---


    ## When to use the Admin API


    Use the Admin API when you need to **drive workflows from your own
    systems**:


    - **Sync membership data** — create or update customers, assign them to
    communities, reflect subscription status from an external CRM

    - **Create bookings programmatically** — build back-office tools or automate
    repeat reservations without going through the customer checkout

    - **Issue and forward invoices** — generate invoices, send them to
    customers, or push them to your accounting system

    - **React to real-time events** — pair the API with
    [Webhooks](/developers/guides/admin/webhooks) to trigger side effects
    whenever a booking is created, cancelled, or checked in

    - **Drive display panels** — push live occupancy and schedule data to
    digital signage or lobby displays


    Combined with [webhook subscriptions](/developers/guides/admin/webhooks),
    you can build fully automated, event-driven workflows without polling.


    ---


    ## Authentication


    Generate a long-lived API token directly in the admin dashboard under
    **Organization Settings → API**. All requests require it in the
    `Authorization` header:


    ```

    Authorization: Bearer {access_token}

    ```


    Every endpoint is **organization-scoped**. Pass your organization ID as a
    query parameter on every request:


    ```

    ?o={organization_id}

    ```


    See the [Authentication guide](/developers/guides/authentication) for token
    scopes and the full OAuth2 flow.


    ---


    ## Admin API vs Customer API


    | | Admin API | Customer API |

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

    | **Use case** | Server-side automation, backend tooling | End-user apps,
    booking widgets |

    | **Auth** | Required — API token or OAuth2 | Optional — many endpoints work
    without a token |

    | **Identifiers** | Immutable UUIDs and integer IDs | Slugs, booking
    numbers, order numbers |

    | **Access** | Full read/write | Public and customer-owned data only |


    → [Go to the Customer API](/developers/api-reference/customer)


    ---


    ## Resource Identifiers


    The Admin API uses **immutable IDs** — UUIDs for most entities, integers for
    legacy ones. These are safe to store in external systems and never change,
    even if an organization renames a resource.


    ---


    ## Starting Points


    | Guide | What it covers |

    |---|---|

    | [Getting Started](/developers) | First steps and quickstart |

    | [JSON:API Conventions](/developers/guides/json-api-conventions) | Request
    and response format |

    | [Authentication](/developers/guides/authentication) | API tokens, OAuth2,
    scopes |

    | [Availability & Booking Search](/developers/guides/availability) | Search
    open slots and timeslots |

    | [Admin Booking Creation](/developers/guides/admin/booking-creation) |
    Create bookings from the back office |

    | [Admin Booking Edit](/developers/guides/admin/booking-edit) | Edit
    resource, dates, fields, add-ons, and sub-bookings |

    | [Admin Booking Lifecycle](/developers/guides/admin/booking-lifecycle) |
    Status changes, check-in, cancellations |

    | [Invoices](/developers/guides/admin/invoices) | Create, send, and manage
    invoices |

    | [Customer Management](/developers/guides/admin/customer-management) |
    Create and manage customer records |

    | [Booking Calendars](/developers/guides/admin/calendar-events) | Custom
    calendar events |

    | [Timeslot Management](/developers/guides/admin/timeslot-management) |
    Manage timeslot CRUD, recurrence, allocations, and rescheduling |

    | [Broadcast Campaigns](/developers/guides/admin/broadcasting) | Email and
    push campaigns |

    | [Exports](/developers/guides/admin/exports) | Export bookings and customer
    data |

    | [Webhooks & Events](/developers/guides/admin/webhooks) | Subscribe to
    real-time events |


    ---


    ## Base URLs


    | Environment | URL |

    |---|---|

    | Production | `https://b.anny.co` |

    | Gov-Cloud | `https://b.anny.eu` |
  contact:
    name: anny GmbH
    url: https://anny.co
    email: support@anny.co
servers:
  - url: https://b.anny.co
    description: Production
  - url: https://b.anny.eu
    description: Gov-Cloud
security:
  - Bearer: []
tags:
  - name: Booking Quotas
  - name: Orders
  - name: Organizations
  - name: Table Configuration
  - name: Test-Results
  - name: User Settings
  - name: Terminal Locations
  - name: Terminal Readers
  - name: Connection Tokens
  - name: Views
  - name: Voice Integration
paths:
  /api/settings/organization-user:
    put:
      tags:
        - User Settings
      summary: Update organization-user settings
      description: >
        Update the authenticated user's per-organization settings.


        Merge semantics:

        - The payload is **merged per key** (dot-flattened): only the paths
        present
          in the request change; everything else is untouched. Send only what changed.
        - **Array lists replace wholesale** — e.g. `embeddedTables` is one
        opaque
          value. Always read-modify-write the full list; sending a partial list
          deletes the missing entries.
        - Values equal to the server-side default are elided from storage (and
        come
          back via the defaults merge on read — semantically identical).

        Keys are **whitelisted server-side**
        (`OrganizationUserSettingsRequest`).

        Unknown keys are silently dropped — the request still returns `200`, so

        verify persistence via the response body, which is the full merged
        settings

        object (same shape as `GET`).


        Plain JSON — this endpoint is **not** JSON:API.
      operationId: put-internal-organization-user-settings
      parameters:
        - schema:
            type: string
          in: header
          name: Authorization
          description: Bearer Token
          required: true
        - schema:
            type: string
          in: query
          name: o
          description: Organization ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/organization-user-settings.v1'
            examples:
              switch-active-view:
                summary: Persist the selected view for the bookings area
                value:
                  activeBookingsViewId: 9d001fc6-7cf2-4724-8752-3282ad1e1a42
              save-embedded-table-layout:
                summary: Persist an embedded table's column layout (full list!)
                value:
                  embeddedTables:
                    - id: customer-detail/bookings
                      columnOrder:
                        - number
                        - service.name
                        - period
                        - status
                      hiddenColumns:
                        - service.name
                      columnWidths:
                        - key: number
                          width: 120
                        - key: period
                          width: 200
                    - id: customer-detail/orders
                      columnOrder:
                        - number
                        - status
                      hiddenColumns: []
                      columnWidths: []
      responses:
        '200':
          description: OK — the full merged settings object after the update
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/organization-user-settings.v1'
        '401':
          description: Unauthorized
        '404':
          description: Not Found — the user has no membership in the active organization
        '422':
          description: >-
            Validation error (e.g. `embeddedTables` sent as a map instead of a
            list, missing `id`, non-numeric `width`)
      security:
        - Bearer: []
components:
  schemas:
    organization-user-settings.v1:
      $schema: https://json-schema.org/draft/2020-12/schema
      x-version: 1.0.0
      title: Organization-User Settings
      type: object
      description: >-
        Per-user-per-organization settings blob, read and written as plain JSON
        via

        `GET|PUT /api/settings/organization-user` (not JSON:API). Reads return
        stored

        overrides deep-merged over server-side defaults; writes merge per
        dot-flattened

        key, except array lists, which replace wholesale. Keys are whitelisted

        server-side — unknown keys are silently dropped. Only the
        table/view-related

        keys are documented here; the full whitelist (notification preferences,
        legacy

        per-area filter state, calendar settings, …) lives in

        `app/Http/Requests/Settings/OrganizationUserSettingsRequest` and

        `app/Enums/Settings/OrganizationUserSettingsType`. See the "Table State

        Persistence" guide for the full contract.
      x-tags:
        - Models
      additionalProperties: true
      properties:
        activeBookingsViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the bookings area
        activeOrdersViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the orders area
        activeCustomersViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the customers area
        activeResourcesViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the resources area
        activeInvoicesViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the invoices area
        activeCalendarViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the calendar area
        activePlanSubscriptionsViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the plan-subscriptions area
        activeBookingPassesViewId:
          type:
            - string
            - 'null'
          description: UUID of the active view for the booking-passes area
        embeddedTables:
          type:
            - array
            - 'null'
          description: >-
            Per-user column layout for embedded (area-less) tables. A **list**
            keyed by

            a free-form `id` string — not a map, because the settings merge

            dot-flattens objects and would corrupt ids/keys containing dots or
            slashes.

            Replaced wholesale on every write: always read-modify-write the full
            list.
          items:
            type: object
            required:
              - id
            properties:
              id:
                type: string
                description: >-
                  Stable client-defined table id, e.g.
                  `customer-detail/bookings`
              columnOrder:
                type: array
                items:
                  type: string
                description: Ordered column keys (visible and hidden)
              hiddenColumns:
                type: array
                items:
                  type: string
                description: Column keys hidden from display
              columnWidths:
                type: array
                description: User-resized columns only — a list of entries, not a map
                items:
                  type: object
                  required:
                    - key
                    - width
                  properties:
                    key:
                      type: string
                      description: Column key
                    width:
                      type: number
                      description: Width in px
  securitySchemes:
    Bearer:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://auth.anny.co/oauth/authorize
          tokenUrl: https://auth.anny.co/oauth/token
          refreshUrl: https://auth.anny.co/oauth/token/refresh
          scopes: {}

````