---
title: "Update organization name"
method: PUT
path: "/api/v1/organizations/{id}"
tags: ["Organizations"]
---

# Update organization name

`PUT /api/v1/organizations/{id}`

## Path parameters

- `id` string, uuid, required

## Response `200`

Organization updated

- ApiResponseOrganization
  - `data` object
    - `discount_save_offer_active_until` string, date-time, nullable — When the currently-active save-offer discount window expires. The BillingTab chip renders only while `> now()`; expiry needs no cleanup job.
    - `discount_save_offer_percent_off` integer, nullable — Percent off the currently-active save-offer discount applies. Read live by the BillingTab chip so a future coupon swap renders the new value without a code change.
    - `has_payment_method` boolean
    - `last_discount_at` string, date-time, nullable — Most recent save-offer-discount application. NULL = never. Drives the once-per-org eligibility check in `apply_discount_save_offer` and hides the Discount panel on the cancel modal for any return visit.
    - `last_downgrade_at` string, date-time, nullable — Most recent downgrade event timestamp (paid→cheaper, or paid→cancelled); powers the 14-day downgrade banner.
    - `last_downgrade_from_plan` union
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Community', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Free', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Starter', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Pro', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Team', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Business', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Enterprise', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Demo', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'CommercialSelfHosted', required
    - `last_paused_at` string, date-time, nullable — Most recent `Paused` billing event's timestamp; powers the 6-month rolling pause cooldown.
    - `name` string, required
    - `next_renewal_at` string, date-time, nullable — Stripe `subscription.items.data[0].current_period_end`, mirrored on every billing event that re-anchors the period (checkout, trial start / end, plan change, renewal, pause/resume, reactivate). Cleared by SubscriptionCancelled. Powers the "Next renewal on …" line in BillingPlanModal; the UI interprets the value based on plan_status (hide for paused/cancelled/past_due where the stored value can be stale or meaningless).
    - `onboarding` OnboardingOperationDiscriminants[], required
    - `plan` union, required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Community', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Free', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Starter', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Pro', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Team', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Business', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Enterprise', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'Demo', required
      - object
        - `base_cents` integer, required
        - `host_cents` integer, nullable
        - `included_hosts` integer, nullable
        - `included_networks` integer, nullable
        - `included_seats` integer, nullable
        - `network_cents` integer, nullable
        - `rate` 'Month' | 'Year', required
        - `seat_cents` integer, nullable
        - `trial_days` integer, required
        - `type` 'CommercialSelfHosted', required
    - `plan_status` 'active' | 'trialing' | 'past_due' | 'paused' | 'pending_cancellation' | 'cancelled', required — Derived subscription status — our domain enum, never Stripe's raw status. Stripe webhook events map to typed `BillingOperation` variants at reception (in `billing/service.rs`); each variant deterministically implies a `PlanStatus` for downstream feature gates via `BillingOperation::implied_status`. `FromStr` is derived (via strum) so the storage layer can round-trip a snake_case `text` column back into the typed value; `ToSchema` exposes the enum as a stricter string union in the generated OpenAPI schema so the frontend's `org.plan_status === 'paused'` comparisons are compile-checked against the canonical variant list.
    - `trial_end_date` string, date-time, nullable
    - `trial_extended_used` boolean — Whether the org has used its one-time trial-extend perk.
    - `use_case` 'homelab' | 'internal_it' | 'msp' | 'other'
    - `created_at` string, date-time, required
    - `id` string, uuid, required
    - `updated_at` string, date-time, required
  - `error` string, nullable
  - `meta` ApiMeta, required — API metadata included in all responses
    - `api_version` integer, required — API version (integer, increments on breaking changes)
    - `server_version` string, required — Server version (semver)
  - `success` boolean, required

## Other responses

- `403` — Only owners can update organization
- `404` — Organization not found

## Changes

- **2026-06-18** `1b464d15cdd4` — 1 info
  - added the optional property `data/allOf[#/components/schemas/OrganizationBase]/next_renewal_at` to the response with the `200` status
- **2026-06-17** `0d9dc69e0846` — 2 warning
  - added the new `DaemonPromptAccepted` enum value to the `data/allOf[#/components/schemas/OrganizationBase]/onboarding/items/` response property for the response status `200`
  - added the new `DaemonPromptDismissed` enum value to the `data/allOf[#/components/schemas/OrganizationBase]/onboarding/items/` response property for the response status `200`
- **2026-06-17** `b0db6c5891e1` — 1 breaking
  - the `data/allOf[#/components/schemas/OrganizationBase]/discount_save_offer_percent_off` response's property type/format changed from `integer, null`/`int32` to `integer, null`/`int64` for status `200`
- **2026-06-16** `d43d962fc0ec` — 3 info
  - added the optional property `data/allOf[#/components/schemas/OrganizationBase]/discount_save_offer_active_until` to the response with the `200` status
  - added the optional property `data/allOf[#/components/schemas/OrganizationBase]/discount_save_offer_percent_off` to the response with the `200` status
  - added the optional property `data/allOf[#/components/schemas/OrganizationBase]/last_discount_at` to the response with the `200` status
- …earlier changes not shown

[Full history](https://skmtc.dev/scanopy/apis/scanopy-api/changes/api/v1/organizations/:id/put.md)

---

[API](https://skmtc.dev/scanopy/apis/scanopy-api.md) · [All operations](https://skmtc.dev/scanopy/apis/scanopy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/scanopy/scanopy-api/revisions/87fbc9fdb32c/schema)
