---
title: "Update current organization"
method: PUT
path: "/v1/identity/org"
tags: ["identity"]
---

# Update current organization

`PUT /v1/identity/org`

## Request body

- OrganizationUpdate
  - `settings` OrgSettings — Typed schema for Organization.settings JSON column.
    - `retry` RetryConfig — Retry configuration — same schema at org, tool, and integration-instance level.
      - `max_retries` integer
      - `base_delay_seconds` number
      - `max_delay_seconds` number
      - `jitter` boolean
    - `kb_pii` KbPiiSettings — Per-org KB document-ingestion PII redaction switch (ENG-677/ENG-679). OFF by default and enabled solely by this org-wide switch — decoupled from the shared conversation/voice ``PrivacyConfig``. Read by ``resolve_pii_config`` at ingest time from ``Organization.settings['kb_pii']`` (the global ``kb_pii_enabled`` kill-switch still forces redaction off).
      - `enabled` boolean
    - `kb_role_clearance_map` object, nullable
    - `kb_role_audience_map` object, nullable
    - `kb_classification_mode` 'auto' | 'kb_default', nullable
    - `kb_acl_oversample_factor` integer, nullable
    - `call_window` CallWindowSettings — Per-org outbound calling hours window. Outbound dials requested outside the window are deferred (queued) and auto-placed when the window next opens. Default: disabled — calls dispatch 24/7 with no calling-hours gate. Enabling the gate pre-fills the template shape America/Los_Angeles, 09:00–17:00, Mon–Fri.
      - `enabled` boolean
      - `timezone` string
      - `window_start` string, time
      - `window_end` string, time
      - `days_of_week` integer[] — Weekdays the window applies to (0=Monday … 6=Sunday); empty list = every day.
    - `call_expiry` CallExpirySettings — Per-org max wait for a queued outbound dial before it is expired. When ``enabled``, a dial that has waited ``days*24h + hours`` from its enqueue time is expired by the ``expire_queued_dispatches`` sweep. Absent/disabled ⇒ no expiry (unbounded).
      - `enabled` boolean
      - `days` integer
      - `hours` integer
    - `holiday_calendar` HolidayCalendarSettings — Per-org outbound holiday calendar. Sub-gate of the calling window. Dates are interpreted in the calling window's timezone and only take effect while the calling window is enabled. Absent ⇒ DEFAULT_HOLIDAY_CALENDAR (enabled with an empty list ⇒ blocks nothing).
      - `enabled` boolean
      - `holidays` HolidayEntry[]
        - `name` string, nullable
        - `start_date` string, date, required
        - `end_date` string, date, nullable
        - `recurring` boolean
    - `voice_entitlements` VoiceEntitlementSettings — Per-org standing voice entitlements, stored in ``Organization.settings``. Consolidates all four per-org voice knobs (previously the dedicated ``org_voice_entitlements`` table) into the settings JSON alongside ``call_window`` / ``holiday_calendar``: * ``max_active_calls`` — Layer-2 per-org active-call cap (self-service). * ``outbound_cps`` — Layer-0b per-org calls/sec pacer (Feather staff only). * ``queue_weight`` — Layer-0c drain-share weight (Feather staff only). * ``priority_class`` — scheduler tie-break class (Feather staff only). * ``priority_aging_max_wait_seconds`` — per-org scheduler aging override (Feather staff only): seconds the org's oldest queued outbound call must wait before aging takes over priority ordering. Resolved by the scheduler per tick, so a change applies on the next ~5s sweep, including to already-queued calls. * ``inbound_reserved_calls`` — reserve-for-inbound headroom (self-service). When set (``I``), outbound calls are capped at ``max(0, max_active_calls - I)``, while inbound keeps drawing from the full org total ``C = max_active_calls`` and may burst above ``I`` into idle outbound capacity. ``None`` ⇒ no reservation (outbound cap = ``C``). At admit time the outbound cap is clamped with ``max(0, C − I)`` so a later drop in ``C`` degrades gracefully. ``None`` on any field means "inherit the config default" for that dimension. ``le``/``allow_inf_nan`` on the float fields are load-bearing: ``1e999`` is valid JSON that parses to ``inf`` and would pass a bare ``gt=0``, silently producing an unbounded CPS bucket.
      - `max_active_calls` integer, nullable
      - `outbound_cps` number, nullable
      - `queue_weight` number, nullable
      - `priority_class` integer, nullable
      - `priority_aging_max_wait_seconds` integer, nullable
      - `inbound_reserved_calls` integer, nullable
    - `memory` MemoryOrgSettings — Per-org memory ingestion overrides. Read by ``resolve_memory_sync_policy`` / ``resolve_memory_fact_policy`` from ``Organization.settings['memory']``. This is the strict WRITE-time guard enforced on the org-update API; its fail-safe READ mirrors are ``Organization.settings_memory_min_user_turns`` / ``settings_memory_fact_cap`` / ``settings_memory_retention_days`` (keep the accepted ranges in sync with them).
      - `min_user_turns` integer, nullable
      - `fact_cap` integer, nullable
      - `retention_days` integer, nullable
    - `inline_kb_sources` boolean, nullable
    - `current_time` CurrentTimeSettings — One tier's optional current-time overrides. ``None`` means inherit for that field. An empty object therefore clears the tier and inherits both values. The API stores only non-null fields.
      - `enabled` boolean, nullable
      - `timezone` string, nullable

## Response `200`

Successful Response

- OrganizationResponse
  - `id` string, uuid, required
  - `clerk_org_id` string, required
  - `name` string, required
  - `slug` string, nullable, required
  - `settings` OrgSettings, required — Typed schema for Organization.settings JSON column.
    - `retry` RetryConfig — Retry configuration — same schema at org, tool, and integration-instance level.
      - `max_retries` integer
      - `base_delay_seconds` number
      - `max_delay_seconds` number
      - `jitter` boolean
    - `kb_pii` KbPiiSettings — Per-org KB document-ingestion PII redaction switch (ENG-677/ENG-679). OFF by default and enabled solely by this org-wide switch — decoupled from the shared conversation/voice ``PrivacyConfig``. Read by ``resolve_pii_config`` at ingest time from ``Organization.settings['kb_pii']`` (the global ``kb_pii_enabled`` kill-switch still forces redaction off).
      - `enabled` boolean
    - `kb_role_clearance_map` object, nullable
    - `kb_role_audience_map` object, nullable
    - `kb_classification_mode` 'auto' | 'kb_default', nullable
    - `kb_acl_oversample_factor` integer, nullable
    - `call_window` CallWindowSettings — Per-org outbound calling hours window. Outbound dials requested outside the window are deferred (queued) and auto-placed when the window next opens. Default: disabled — calls dispatch 24/7 with no calling-hours gate. Enabling the gate pre-fills the template shape America/Los_Angeles, 09:00–17:00, Mon–Fri.
      - `enabled` boolean
      - `timezone` string
      - `window_start` string, time
      - `window_end` string, time
      - `days_of_week` integer[] — Weekdays the window applies to (0=Monday … 6=Sunday); empty list = every day.
    - `call_expiry` CallExpirySettings — Per-org max wait for a queued outbound dial before it is expired. When ``enabled``, a dial that has waited ``days*24h + hours`` from its enqueue time is expired by the ``expire_queued_dispatches`` sweep. Absent/disabled ⇒ no expiry (unbounded).
      - `enabled` boolean
      - `days` integer
      - `hours` integer
    - `holiday_calendar` HolidayCalendarSettings — Per-org outbound holiday calendar. Sub-gate of the calling window. Dates are interpreted in the calling window's timezone and only take effect while the calling window is enabled. Absent ⇒ DEFAULT_HOLIDAY_CALENDAR (enabled with an empty list ⇒ blocks nothing).
      - `enabled` boolean
      - `holidays` HolidayEntry[]
        - `name` string, nullable
        - `start_date` string, date, required
        - `end_date` string, date, nullable
        - `recurring` boolean
    - `voice_entitlements` VoiceEntitlementSettings — Per-org standing voice entitlements, stored in ``Organization.settings``. Consolidates all four per-org voice knobs (previously the dedicated ``org_voice_entitlements`` table) into the settings JSON alongside ``call_window`` / ``holiday_calendar``: * ``max_active_calls`` — Layer-2 per-org active-call cap (self-service). * ``outbound_cps`` — Layer-0b per-org calls/sec pacer (Feather staff only). * ``queue_weight`` — Layer-0c drain-share weight (Feather staff only). * ``priority_class`` — scheduler tie-break class (Feather staff only). * ``priority_aging_max_wait_seconds`` — per-org scheduler aging override (Feather staff only): seconds the org's oldest queued outbound call must wait before aging takes over priority ordering. Resolved by the scheduler per tick, so a change applies on the next ~5s sweep, including to already-queued calls. * ``inbound_reserved_calls`` — reserve-for-inbound headroom (self-service). When set (``I``), outbound calls are capped at ``max(0, max_active_calls - I)``, while inbound keeps drawing from the full org total ``C = max_active_calls`` and may burst above ``I`` into idle outbound capacity. ``None`` ⇒ no reservation (outbound cap = ``C``). At admit time the outbound cap is clamped with ``max(0, C − I)`` so a later drop in ``C`` degrades gracefully. ``None`` on any field means "inherit the config default" for that dimension. ``le``/``allow_inf_nan`` on the float fields are load-bearing: ``1e999`` is valid JSON that parses to ``inf`` and would pass a bare ``gt=0``, silently producing an unbounded CPS bucket.
      - `max_active_calls` integer, nullable
      - `outbound_cps` number, nullable
      - `queue_weight` number, nullable
      - `priority_class` integer, nullable
      - `priority_aging_max_wait_seconds` integer, nullable
      - `inbound_reserved_calls` integer, nullable
    - `memory` MemoryOrgSettings — Per-org memory ingestion overrides. Read by ``resolve_memory_sync_policy`` / ``resolve_memory_fact_policy`` from ``Organization.settings['memory']``. This is the strict WRITE-time guard enforced on the org-update API; its fail-safe READ mirrors are ``Organization.settings_memory_min_user_turns`` / ``settings_memory_fact_cap`` / ``settings_memory_retention_days`` (keep the accepted ranges in sync with them).
      - `min_user_turns` integer, nullable
      - `fact_cap` integer, nullable
      - `retention_days` integer, nullable
    - `inline_kb_sources` boolean, nullable
    - `current_time` CurrentTimeSettings — One tier's optional current-time overrides. ``None`` means inherit for that field. An empty object therefore clears the tier and inherits both values. The API stores only non-null fields.
      - `enabled` boolean, nullable
      - `timezone` string, nullable
  - `is_active` boolean, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400` — Bad request
- `401` — Authentication required
- `404` — Resource not found
- `422` — Validation Error

---

[API](https://skmtc.net/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.net/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/revisions/5a5597ebb2d6/schema)
