앱을 다시 빌드하지 않고 게시된 앱의 접근 설정을 변경합니다.
게시 설정 업데이트
플랜:
Business 이상
스코프: projects:write
앱을 다시 빌드하지 않고 게시된 앱의 접근 설정을 변경합니다. audience를 public, workspace, custom 중 하나로 설정합니다. 프로젝트 읽기 응답에서는 이 값이 publish_audience로 보고됩니다. custom audience에서 audience_targets를 보내면 그룹 및 사용자 grant를 대체하고 워크스페이스 전체 접근을 제거합니다. UI에서 관리하는 조직 접근과 이메일 초대는 보존됩니다. 변경 사항은 즉시 적용됩니다. 응답은 결정된 audience와 target을 반환합니다. is_published, publish_audience, publish_audience_targets는 GET /v1/projects/{project_id}에서 읽습니다. 새 버전을 빌드하고 게시하려면 POST /v1/projects/{project_id}/publish를 사용합니다. 앱을 오프라인으로 전환하려면 DELETE /v1/projects/{project_id}/publish를 사용합니다.
OpenAPI
| 항목 | 값 |
|---|---|
| Method | PATCH |
| Path | /v1/projects/{project_id}/publish |
| Operation ID | updatePublishSettings |
| Source spec | https://api.lovable.dev/v1/openapi.yaml |
| Local snapshot | YAML 스냅샷 (SHA-256: 28d791cced537f52fbfc4b832e72983b22ae33802ded646fc9f2a8335b7df073) |
PATCH /v1/projects/{project_id}/publish인증
Lovable-API-Key: lov_your-api-key 또는 Authorization: Bearer <key>를 보냅니다. 이 엔드포인트는 projects:write 스코프가 필요합니다.
매개변수
| 이름 | 위치 | 필수 | 타입 | 설명 |
|---|---|---|---|---|
project_id | path | 예 | string | 프로젝트 ID입니다. |
Lovable-Version | header | 아니요 | string | 제공받을 안정 API 버전입니다. YYYY-MM-DD 날짜 형식으로 보냅니다. 생략하면 현재 가장 오래된 지원 안정 버전인 2026-09-11이 사용됩니다. |
Lovable-Beta | header | 아니요 | string | 안정 버전 위에 활성화할 베타 리비전 문자열입니다. 여러 개는 쉼표로 구분합니다. |
요청 본문
요청 본문은 필수입니다. Content-Type은 application/json입니다. 본문은 UpdatePublishSettingsRequest 스키마를 사용합니다.
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
audience | string | 아니요 | 게시된 앱을 열 수 있는 대상입니다. public, workspace, custom 중 하나입니다. 프로젝트 읽기 응답에서는 publish_audience로 보고됩니다. UI에서 관리하는 기존 grant를 포함한 custom audience를 사용할 수 있습니다. 생략하면 앱이 게시되지 않은 상태를 포함해 audience를 변경하지 않습니다. |
audience_targets | PublishAudienceTarget[] | 아니요 | 앱을 열 수 있는 그룹입니다. 전달한 audience 또는 현재 audience가 custom일 때만 허용됩니다. 목록을 제공하면 모든 그룹 및 사용자 grant를 대체하고 워크스페이스 전체 접근을 제거합니다. 빈 목록은 해당 grant를 제거합니다. UI에서 관리하는 기존 조직 접근과 이메일 초대는 보존됩니다. 생략하면 audience 변경 중에도 저장된 target을 유지합니다. custom 모드 밖에서는 target이 비활성입니다. null은 허용되지 않습니다. 최대 100개까지 보낼 수 있습니다. |
PublishAudienceTarget은 type과 id를 필수로 가집니다. 현재 type은 group만 지원하며 id는 GET /v1/workspaces/{workspace_id}/groups가 반환한 그룹 ID입니다. id는 빈 문자열일 수 없으며(minLength: 1), audience_targets는 최대 100개까지 보낼 수 있습니다.
예시
curl --request PATCH \
--url 'https://api.lovable.dev/v1/projects/project-id/publish' \
--header 'Lovable-API-Key: lov_your-api-key' \
--header 'Lovable-Version: 2026-09-11' \
--header 'Content-Type: application/json' \
--data '{}'const response = await fetch("https://api.lovable.dev/v1/projects/project-id/publish", {
method: "PATCH",
headers: {
"Lovable-API-Key": process.env.LOVABLE_API_KEY ?? "lov_your-api-key",
"Lovable-Version": "2026-09-11",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
if (!response.ok) {
throw new Error(`Lovable API ${response.status}: ${await response.text()}`);
}
console.log(await response.json());응답
| 상태 | 본문 | 설명 |
|---|---|---|
200 | PublishSettings | 요청이 성공했습니다. |
400 | ErrorResponse | 요청 본문 또는 매개변수 형식이 잘못되었거나 검증에 실패했습니다. |
401 | ErrorResponse | API 키, 세션 토큰 또는 OAuth access token이 없거나 유효하지 않습니다. |
402 | ErrorResponse | Public API 접근에는 Business 이상 플랜이 필요합니다. |
403 | ErrorResponse | 키 또는 호출자에게 필요한 스코프나 권한이 없습니다. |
404 | ErrorResponse | 프로젝트가 존재하지 않거나 삭제되었거나 인증된 클라이언트가 접근할 수 없습니다. |
406 | ErrorResponse | Accept 헤더가 이 엔드포인트가 생성하는 모든 미디어 타입을 제외합니다. |
429 | ErrorResponse | 요청이 너무 많습니다. Retry-After가 있으면 해당 간격 뒤에 재시도합니다. |
503 | ErrorResponse | 서비스를 일시적으로 사용할 수 없거나 처리 기한이 만료되었습니다. 변이가 완료될 수 있으므로 재시도 전에 리소스 상태를 확인하세요. |
default | ErrorResponse | 오류입니다. 응답 본문은 표준 오류 envelope을 사용하며 status는 HTTP 상태 코드와 같고 type은 machine-readable 오류 코드입니다. |
응답 헤더
모든 응답에는 상황에 따라 다음 공통 헤더가 포함될 수 있습니다: Lovable-Version, Lovable-Beta, X-Request-Id, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-Lovable-Unknown-Query-Params, X-Lovable-Unknown-Query-Params-Omitted. X-Lovable-Unknown-Query-Params는 이 작업이 선언하지 않은 query parameter가 있을 때 URL escape된 이름을 최대 20개까지 쉼표로 제공하며, 20개를 넘으면 X-Lovable-Unknown-Query-Params-Omitted가 누락된 개수(minimum: 1)를 제공합니다. 401 응답은 string인 WWW-Authenticate를, 429 응답은 integer인 Retry-After를 포함합니다. Retry-After는 minimum: 1입니다. X-RateLimit-Reset은 지연 시간이 아니라 Unix timestamp 초 단위입니다.
스키마
PublishAudienceTarget
| 필드 | 타입 | 필수 | 제약 | 설명 |
|---|---|---|---|---|
type | string | 예 | enum: group | 대상 유형입니다. 현재 그룹만 설정할 수 있습니다. |
id | string | 예 | minLength: 1 | GET /v1/workspaces/{workspace_id}/groups가 반환한 그룹 ID입니다. |
PublishSettings
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
audience | string | 예 | 게시된 앱을 열 수 있는 대상입니다. public, workspace, custom 중 하나입니다. 프로젝트 읽기 응답에서는 publish_audience로 보고됩니다. 새 값이 추가될 수 있으므로 클라이언트는 알 수 없는 값을 허용해야 합니다. |
audience_targets | PublishAudienceGrant[] | 예 | 앱이 오프라인이거나 audience가 custom이 아니어도 저장되어 있는 그룹 및 사용자입니다. 이 target은 custom 모드에서만 접근 권한을 부여합니다. 초대 또는 조직 멤버십으로 grant된 사용자는 포함되지만 조직 전체 접근과 대기 중인 이메일 초대는 나열되지 않습니다. 이 읽기 projection은 쓰기 가능한 target 목록이 아닙니다. audience_targets에는 그룹만 제공할 수 있습니다. |
PublishAudienceGrant
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
type | string | 예 | target 타입입니다. group 또는 user입니다. 사용자는 보고되지만 아직 audience_targets로 설정할 수 없습니다. |
id | string | 예 | GET /v1/workspaces/{workspace_id}/groups가 반환한 그룹 ID 또는 다른 응답이 보고하는 사용자 UUID입니다. |
ErrorResponse
공통 오류 응답입니다.
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
detail | `string \ | null` | 예 |
errors | `array \ | null` | 예 |
props | `object \ | null` | 예 |
request_id | string | 예 | X-Request-Id 응답 헤더에서 반복되는 이 요청의 식별자입니다. |
status | integer | 예 | 본문에 반복되는 HTTP 상태 코드입니다. |
title | string | 예 | 사람이 읽을 수 있는 오류 요약입니다. |
type | string | 예 | 안정적인 machine-readable 오류 유형입니다. |
원본에 포함된 이 작업의 OpenAPI 스냅샷은 YAML 스냅샷 (SHA-256: 28d791cced537f52fbfc4b832e72983b22ae33802ded646fc9f2a8335b7df073)로 보존했습니다. 최신 전체 OpenAPI 계약은 https://api.lovable.dev/v1/openapi.yaml에서 확인할 수 있습니다.