본문으로 건너뛰기
Structly 문서
English

API 레퍼런스

Organization

이 페이지의 내용

이 페이지는 공개 계약에서 생성하며 설명은 원문(한국어) 그대로 표시합니다.

Organization 생성·소속·관리자 권한·이메일 초대. 사용·관리는 인증 완료 후 허용합니다.

Organization 생성#

POST /api/organizations

Organization·internal default workspace·생성자 active 소속을 한 트랜잭션에서 만들고 pending으로 생성하며 기존 세션의 현재 Organization 선택을 유지합니다. 세션 쿠키 structly_session이 필요합니다(Bearer 토큰 불가).

인증: 세션 쿠키

Parameter

이름위치타입필수설명
Originheaderstring예서버 origin(예: http://127.0.0.1:5173)과 같아야 합니다.

요청 본문

application/json · 필수: 예

타입: OrganizationCreate

이름타입필수설명
namestring예앞뒤 공백 제거 후 1~100자. 고유성 없음
handlestring예앞뒤 공백 제거·소문자 정규화 후 3~39자. 영문자로 시작하고 영문 소문자·숫자·단일 하이픈만 허용하며 예약어는 거부합니다.

응답

상태설명
201성공
400INVALID_REQUEST(query·미정의 필드·JSON 형식·본문 있는 GET/logout)
401UNAUTHENTICATED(세션 없음·만료) 또는 로그인 실패 INVALID_CREDENTIALS. WWW-Authenticate 포함
403FORBIDDEN_ORIGIN(Origin이 서버 origin과 다름·누락)
405METHOD_NOT_ALLOWED. Allow 포함
409ORGANIZATION_HANDLE_CONFLICT
413PAYLOAD_TOO_LARGE(본문 16 KiB 초과)
415UNSUPPORTED_MEDIA_TYPE
422VALIDATION_FAILED. data에 필드 오류
500INTERNAL_ERROR

201 응답 본문

타입: Organization

이름타입필수설명
idstring예
namestring예
created_atstring(date-time)예
verification_statusstring예값: pending, verified
verification_sourcestring | null예값: migration, backoffice, null
verified_atstring(date-time) | null(date-time)예
rolestring예값: member, admin
handlestring예앞뒤 공백 제거·소문자 정규화 후 3~39자. 예약어·중복은 거부합니다.

Organization 소속 User 목록#

GET /api/organizations/{organization_id}/members

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

배열(Member[])이며 표는 항목의 필드입니다.

이름타입필수설명
user_idstring예
emailstring예
display_namestring예
statestring예값: active, ended
rolestring예값: member, admin
created_atstring(date-time)예
updated_atstring(date-time)예

Organization 소속 User 단건#

GET /api/organizations/{organization_id}/members/{id}

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예
idpathstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

타입: Member

이름타입필수설명
user_idstring예
emailstring예
display_namestring예
statestring예값: active, ended
rolestring예값: member, admin
created_atstring(date-time)예
updated_atstring(date-time)예

소속 상태 또는 관리자 권한 변경#

PATCH /api/organizations/{organization_id}/members/{id}

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예
idpathstring예
If-Matchheaderstring예
Originheaderstring예

요청 본문

application/json · 필수: 예

타입: MemberChange

표시할 최상위 필드가 없습니다.

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

타입: Member

이름타입필수설명
user_idstring예
emailstring예
display_namestring예
statestring예값: active, ended
rolestring예값: member, admin
created_atstring(date-time)예
updated_atstring(date-time)예

Organization 초대 목록#

GET /api/organizations/{organization_id}/invitations

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

배열(Invitation[])이며 표는 항목의 필드입니다.

이름타입필수설명
idstring예
organization_idstring예
organization_namestring예
emailstring예
rolestring예값: member, admin
statestring예값: pending, expired, accepted, canceled
deliverystring예값: unknown, sent
expires_atstring(date-time)예
created_atstring(date-time)예
updated_atstring(date-time)예

이메일 초대 발송#

POST /api/organizations/{organization_id}/invitations

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예
Originheaderstring예

요청 본문

application/json · 필수: 예

타입: InvitationCreate

이름타입필수설명
emailstring예
rolestring예값: member, admin

응답

상태설명
201성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

201 응답 본문

타입: Invitation

이름타입필수설명
idstring예
organization_idstring예
organization_namestring예
emailstring예
rolestring예값: member, admin
statestring예값: pending, expired, accepted, canceled
deliverystring예값: unknown, sent
expires_atstring(date-time)예
created_atstring(date-time)예
updated_atstring(date-time)예

초대 단건#

GET /api/organizations/{organization_id}/invitations/{id}

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예
idpathstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

타입: Invitation

이름타입필수설명
idstring예
organization_idstring예
organization_namestring예
emailstring예
rolestring예값: member, admin
statestring예값: pending, expired, accepted, canceled
deliverystring예값: unknown, sent
expires_atstring(date-time)예
created_atstring(date-time)예
updated_atstring(date-time)예

초대 취소#

DELETE /api/organizations/{organization_id}/invitations/{id}

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예
idpathstring예
If-Matchheaderstring예
Originheaderstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

타입: Invitation

이름타입필수설명
idstring예
organization_idstring예
organization_namestring예
emailstring예
rolestring예값: member, admin
statestring예값: pending, expired, accepted, canceled
deliverystring예값: unknown, sent
expires_atstring(date-time)예
created_atstring(date-time)예
updated_atstring(date-time)예

초대 재발송·이전 링크 무효화#

POST /api/organizations/{organization_id}/invitations/{id}/resend

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
organization_idpathstring예
idpathstring예
If-Matchheaderstring예
Originheaderstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

타입: Invitation

이름타입필수설명
idstring예
organization_idstring예
organization_namestring예
emailstring예
rolestring예값: member, admin
statestring예값: pending, expired, accepted, canceled
deliverystring예값: unknown, sent
expires_atstring(date-time)예
created_atstring(date-time)예
updated_atstring(date-time)예

초대받은 이메일 User의 수락 전 확인#

POST /api/invitations/preview

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
Originheaderstring예

요청 본문

application/json · 필수: 예

타입: InvitationToken

이름타입필수설명
tokenstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

타입: Invitation

이름타입필수설명
idstring예
organization_idstring예
organization_namestring예
emailstring예
rolestring예값: member, admin
statestring예값: pending, expired, accepted, canceled
deliverystring예값: unknown, sent
expires_atstring(date-time)예
created_atstring(date-time)예
updated_atstring(date-time)예

초대 수락·소속 생성 또는 복구#

POST /api/invitations/accept

User 세션 전용입니다. Organization 관리자는 active 관리자 소속과 verified 상태를 요구합니다. 초대 토큰은 본문으로만 전달하며 저장·응답·로그에 평문을 남기지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
Originheaderstring예

요청 본문

application/json · 필수: 예

타입: InvitationToken

이름타입필수설명
tokenstring예

응답

상태설명
200성공
400요청·인증·권한·상태·충돌 또는 발송 설정 오류
401요청·인증·권한·상태·충돌 또는 발송 설정 오류
403요청·인증·권한·상태·충돌 또는 발송 설정 오류
404요청·인증·권한·상태·충돌 또는 발송 설정 오류
405요청·인증·권한·상태·충돌 또는 발송 설정 오류
409요청·인증·권한·상태·충돌 또는 발송 설정 오류
410요청·인증·권한·상태·충돌 또는 발송 설정 오류
412요청·인증·권한·상태·충돌 또는 발송 설정 오류
415요청·인증·권한·상태·충돌 또는 발송 설정 오류
422요청·인증·권한·상태·충돌 또는 발송 설정 오류
428요청·인증·권한·상태·충돌 또는 발송 설정 오류
503요청·인증·권한·상태·충돌 또는 발송 설정 오류

200 응답 본문

타입: Member

이름타입필수설명
user_idstring예
emailstring예
display_namestring예
statestring예값: active, ended
rolestring예값: member, admin
created_atstring(date-time)예
updated_atstring(date-time)예

Organization handle 사용 가능 여부 조회#

GET /api/organization-handles/{handle}

로그인한 User에게 handle 정규화 결과와 사용 가능 여부만 반환합니다. Organization의 이름·자산·ID는 반환하지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
handlepathstring예

응답

상태설명
200성공
400INVALID_REQUEST(query·미정의 필드·JSON 형식·본문 있는 GET/logout)
401UNAUTHENTICATED(세션 없음·만료) 또는 로그인 실패 INVALID_CREDENTIALS. WWW-Authenticate 포함
403FORBIDDEN_ORIGIN(Origin이 서버 origin과 다름·누락)
405METHOD_NOT_ALLOWED. Allow 포함
422VALIDATION_FAILED. data에 필드 오류
500INTERNAL_ERROR

200 응답 본문

타입: OrganizationHandleAvailability

이름타입필수설명
handlestring예앞뒤 공백 제거·소문자 정규화 후 3~39자. 예약어·중복은 거부합니다.
availableboolean예

Organization handle 조회#

GET /api/organizations/{id}/handle

인증 완료 Organization의 active 관리자만 사용합니다. 내부 Organization ID로 지정합니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
idpathstring예

응답

상태설명
200성공
400INVALID_REQUEST(query·미정의 필드·JSON 형식·본문 있는 GET/logout)
401UNAUTHENTICATED(세션 없음·만료) 또는 로그인 실패 INVALID_CREDENTIALS. WWW-Authenticate 포함
403FORBIDDEN_ORIGIN(Origin이 서버 origin과 다름·누락)
404ORGANIZATION_NOT_FOUND(active 소속이 아닌 Organization)
405METHOD_NOT_ALLOWED. Allow 포함
422VALIDATION_FAILED. data에 필드 오류
500INTERNAL_ERROR

200 응답 본문

타입: OrganizationHandle

이름타입필수설명
handlestring예앞뒤 공백 제거·소문자 정규화 후 3~39자. 예약어·중복은 거부합니다.

Organization handle 변경#

PATCH /api/organizations/{id}/handle

인증 완료 Organization의 active 관리자만 사용합니다. 내부 Organization ID로 지정합니다. 변경 시 이전 handle은 즉시 재사용할 수 있으며 별칭·자동 이동을 제공하지 않습니다.

인증: 세션 쿠키

Parameter

이름위치타입필수설명
idpathstring예
Originheaderstring예서버 origin(예: http://127.0.0.1:5173)과 같아야 합니다.
If-Matchheaderstring예

요청 본문

application/json · 필수: 예

타입: OrganizationHandleInput

이름타입필수설명
handlestring예앞뒤 공백 제거·소문자 정규화 후 3~39자. 영문자로 시작하고 영문 소문자·숫자·단일 하이픈만 허용하며 예약어는 거부합니다.

응답

상태설명
200성공
400INVALID_REQUEST(query·미정의 필드·JSON 형식·본문 있는 GET/logout)
401UNAUTHENTICATED(세션 없음·만료) 또는 로그인 실패 INVALID_CREDENTIALS. WWW-Authenticate 포함
403FORBIDDEN_ORIGIN(Origin이 서버 origin과 다름·누락)
404ORGANIZATION_NOT_FOUND(active 소속이 아닌 Organization)
405METHOD_NOT_ALLOWED. Allow 포함
409ORGANIZATION_HANDLE_CONFLICT
412PRECONDITION_FAILED
413PAYLOAD_TOO_LARGE(본문 1 KiB 초과)
415UNSUPPORTED_MEDIA_TYPE
422VALIDATION_FAILED. data에 필드 오류
428PRECONDITION_REQUIRED
500INTERNAL_ERROR

200 응답 본문

타입: OrganizationHandle

이름타입필수설명
handlestring예앞뒤 공백 제거·소문자 정규화 후 3~39자. 예약어·중복은 거부합니다.