SaaS APIAgency API
POST /admin/agency/branding/logo
어드민이 에이전시 지정 화면에서 브랜드 로고를 업로드
브랜드 로고 업로드 (어드민)
어드민이 기업을 에이전시로 지정할 때 브랜드 로고를 먼저 업로드하고, 반환된 logoUrl을 POST /admin/agency의 brand.logoUrl에 담아 지정을 완료합니다.
로고는 에이전시 지정 전에 업로드되므로 이 엔드포인트는 TB_AGENCY 행 존재를 요구하지 않습니다. 대신 지정 대상 기업을 businessId로 명시받습니다. 에이전시 id가 곧 그 businessId라서, 지정 후 셀프서비스(POST /agency/branding/logo)가 올리는 S3 경로와 같은 곳(business/{businessId}/brand-logo/)을 가리킵니다.
셀프서비스 POST /agency/branding/logo는 어드민이 호출할 수 없습니다. 그쪽은 호출자 본인의 에이전시를 역산하는데(businessType == AGENCY && agency != null) 어드민은 본인 에이전시가 없어 AUTH_002로 거절됩니다. 어드민은 반드시 이 엔드포인트를 사용하세요.
| 항목 | 값 |
|---|---|
| 메서드 | POST |
| 경로 | /admin/agency/branding/logo 또는 /ai/admin/agency/branding/logo |
| 인증 | 필요 |
| 권한 | ROLE_ADMIN |
| Content-Type | multipart/form-data |
요청
POST /admin/agency/branding/logo HTTP/1.1
Host: api.glowb.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: multipart/form-data; boundary=----X
------X
Content-Disposition: form-data; name="businessId"
acme_corp
------X
Content-Disposition: form-data; name="file"; filename="logo.png"
Content-Type: image/png
(바이너리)
------X--curl -X POST "https://api.glowb.com/admin/agency/branding/logo" \
-H "Authorization: Bearer {access_token}" \
-F "businessId=acme_corp" \
-F "file=@logo.png"const form = new FormData();
form.append('businessId', 'acme_corp');
form.append('file', file);
const response = await fetch('/admin/agency/branding/logo', {
method: 'POST',
headers: { Authorization: `Bearer ${accessToken}` },
body: form,
});
const { data } = await response.json();
// data.logoUrlForm Parameters
Prop
Type
응답
성공 응답 (200 OK)
{
"status": "200",
"message": null,
"data": {
"logoUrl": "https://d3mp6eqt0w2808.cloudfront.net/business/acme_corp/brand-logo/1752537600000_logo.png"
}
}Response Body
Prop
Type
에러 응답
glowb는 CustomException을 HTTP 200으로 감싸 내려보냅니다. 실패 판별은 HTTP 상태가 아니라 응답 본문의 status/code 로 해야 합니다.
본문 code | 본문 status | 설명 |
|---|---|---|
INVALID_BUSINESS_USER | 404 | businessId에 해당하는 기업이 없음 |
INVALID_FILE_EXTENSION | 400 | 지원하지 않는 로고 파일 형식 |
FILE_NAME_EMPTY | 400 | 파일명이 없음 |
S3_UPLOAD_FAILED | 500 | S3 업로드 실패 |