
# 조직 업데이트

`PATCH /fapi/v1/organizations/{org_id}` · 환경의 로그인 호스트에서 호출

조직의 이름, 슬러그 또는 브랜드 색상을 변경합니다(JSON merge patch, RFC 7396). 메타데이터, 외부 ID, 구성원 수 제한은 여기서 변경할 수 없습니다. 인증된 사용자의 `__Host-idp_session` 쿠키가 필요합니다. 쿠키가 없거나, 만료되었거나, 취소된 경우 `401 unauthenticated`를 반환합니다. 다른 출처의 자사 애플리케이션은 대신 프론트 API 액세스 토큰(DPoP 증명을 포함한 `Authorization: DPoP <token>`, [프론트 API 액세스 토큰](/docs/api/fapi/front-api-token) 참조)을 보낼 수 있습니다. 사용자는 조직의 활성 구성원이어야 하며 `idp_org:update` 권한이 있어야 합니다. 구성원이 아닌 사용자는 `404 not_found`를 받고, 권한이 없는 구성원은 `403 insufficient_permissions`를 받습니다.

`@keenauth/js` 사용 시: `await keenauth.organizations.update(orgId, { name: "Acme Inc" }, { expectedVersion: 4 })`.

## 요청

헤더:

| 헤더 | 필수 | 설명 |
| --- | --- | --- |
| `Idp-Client` | 예 | SDK 식별자입니다. |
| `Origin` | 예(쿠키 사용 시) | 정확히 `https://<sign-in host>`와 같아야 합니다. |
| `Content-Type` | 예 | `application/json` 또는 `application/merge-patch+json`입니다. |
| `If-Match` | 아니요 | 마지막으로 읽은 조직의 `"<version>"`입니다. 그 이후 조직이 변경되었다면 `412 precondition_failed`를 반환하며 아무것도 변경되지 않습니다. |

`org_id`: 조직 식별자(`org_…`).

본문(최소 한 개의 필드 필요):

| 필드 | 필수 | 설명 |
| --- | --- | --- |
| `name` | 아니요 | 새 표시 이름입니다. `null`일 수 없습니다. |
| `slug` | 아니요 | 새 슬러그입니다. `null`일 수 없습니다. 이전 슬러그는 90일 동안 예약된 상태로 유지되며, 슬러그는 30일마다 한 번만 변경할 수 있습니다. |
| `brand_color` | 아니요 | `#RRGGBB` 형식입니다. `null`이면 값이 지워집니다. |

## 응답

`200 OK`와 새 `ETag`를 반환합니다. 본문은 조직입니다([조직 조회](./get) 참조).

## 오류

| 상태 | 코드 | 발생 시점 |
| --- | --- | --- |
| 400 | `unknown_field` | 본문에 `name`, `slug`, `brand_color` 외의 필드가 있습니다. |
| 401 | `unauthenticated` | 유효한 세션 쿠키가 없습니다. |
| 403 | `origin_not_allowed` | `Origin`이 없거나 잘못되었습니다. |
| 403 | `insufficient_permissions` | 사용자에게 조직의 `idp_org:update` 권한이 없습니다. |
| 404 | `not_found` | 이 사용자에게 해당 조직이 없습니다. 알 수 없거나, 형식이 잘못되었거나, 다른 식별자도 같은 응답을 받습니다. |
| 409 | `slug_taken` | 다른 조직이 이 슬러그를 사용 중입니다. |
| 409 | `slug_reserved` | 이 슬러그는 다른 조직의 90일 예약 기간에 해당합니다. |
| 409 | `slug_change_rate_limited` | 이 슬러그는 최근 30일 안에 이미 변경되었습니다. |
| 409 | `organization_disabled` | 조직이 비활성화되어 있습니다. |
| 409 | `organization_pending_deletion` | 조직이 삭제 예정입니다. |
| 412 | `precondition_failed` | `If-Match`가 현재 버전과 일치하지 않거나, 요청 처리 중 조직이 변경되었습니다. |
| 422 | `validation_failed` | 필드가 잘못되었거나, 허용되지 않는 곳에 `null`이 있거나, 패치가 비어 있습니다(`empty_patch`). |
| 503 | `service_unavailable` | 일시적으로 사용할 수 없습니다. `Retry-After` 이후 다시 시도하십시오. |

## 예시

```bash
curl -X PATCH https://example.keenauth.app/fapi/v1/organizations/org_01jbz6x8kq3m2n4p5r6s7t8v9a \
  -H "Idp-Client: my-app/1.0.0 (node/22.0.0)" \
  -H "Origin: https://example.keenauth.app" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "4"' \
  -b cookies.txt \
  -d '{"name": "Acme Inc", "brand_color": null}'
```

응답 형식은 [조직 조회](./get)와 같으며 `"version": 5`입니다.
