SaaS APIAgency API
POST /admin/agency/branding/favicon
어드민이 에이전시 지정 화면에서 파비콘을 업로드
파비콘 업로드 (어드민)
어드민이 에이전시를 지정하거나 수정할 때 파비콘을 업로드하고, 반환된 faviconUrl을 POST /admin/agency 또는 PATCH /admin/agency/{id}의 brand.faviconUrl에 담아 저장합니다.
업로드한 이미지는 비율을 유지한 채 투명 정사각 캔버스 가운데에 놓은 180x180 PNG로 변환됩니다. 지원 형식은 PNG, JPG, GIF, WEBP, SVG이고, SVG는 스크립트와 외부 참조를 제거한 뒤 래스터화합니다.
로고와 마찬가지로 에이전시 지정 전에 올릴 수 있도록 TB_AGENCY 행 존재를 요구하지 않고, 지정 대상 기업을 businessId로 받습니다. S3 경로는 business/{businessId}/brand-favicon/입니다.
파비콘을 업로드하지 않으면
brand.faviconUrl을 보내지 않고 brand.logoUrl만 저장하면, 서버가 브랜드 로고로 파비콘을 자동 생성해 저장합니다. 규칙 전체는 브랜딩/로고·파비콘의 파비콘 규칙 표를 참고하세요.
brand.faviconUrl 값 | 동작 |
|---|---|
| 생략 | 변경 없음. 미설정 상태에서 로고를 저장하면 로고로 자동 생성 |
| URL | 그 URL을 파비콘으로 저장. 이후 로고가 바뀌어도 유지 |
| 빈 문자열 | 해제. 아이콘 없이 두고 로고를 저장해도 자동 생성하지 않음 |
| 항목 | 값 |
|---|---|
| 메서드 | POST |
| 경로 | /admin/agency/branding/favicon 또는 /ai/admin/agency/branding/favicon |
| 인증 | 필요 |
| 권한 | ROLE_ADMIN |
| Content-Type | multipart/form-data |
요청
curl -X POST "https://api.glowb.com/admin/agency/branding/favicon" \
-H "Authorization: Bearer {access_token}" \
-F "businessId=acme_corp" \
-F "file=@favicon.png"const form = new FormData();
form.append('businessId', 'acme_corp');
form.append('file', file);
const response = await fetch('/admin/agency/branding/favicon', {
method: 'POST',
headers: { Authorization: `Bearer ${accessToken}` },
body: form,
});
const { data } = await response.json();
// data.faviconUrlForm Parameters
Prop
Type
응답
성공 응답 (200 OK)
{
"status": "200",
"message": null,
"data": {
"faviconUrl": "https://d3mp6eqt0w2808.cloudfront.net/business/acme_corp/brand-favicon/1758412800000.png"
}
}에러 응답
glowb는 CustomException을 HTTP 200으로 감싸 내려보냅니다. 실패 판별은 HTTP 상태가 아니라 응답 본문의 status/code 로 해야 합니다.
본문 code | 본문 status | 설명 |
|---|---|---|
INVALID_BUSINESS_USER | 404 | businessId에 해당하는 기업이 없음 |
FILE_EMPTY | 400 | 빈 파일 |
AGENCY_FAVICON_IMAGE_UNSUPPORTED | 400 | 파비콘으로 변환할 수 없는 파일(이미지가 아니거나 손상·조작됨). 손상 파일 일부가 INTERNAL_SERVER_ERROR로 나가던 것을 이 코드로 통일했습니다 |
AGENCY_FAVICON_FILE_TOO_LARGE | 413 | 5MB 초과 (args.maxMb) |
AGENCY_FAVICON_RESOLUTION_TOO_LARGE | 413 | 2,500만 픽셀 초과 |
AGENCY_FAVICON_CONVERT_FAILED | 500 | 지원 형식인데 변환 중 서버 오류 |
FILE_UPLOAD_FAILED | 500 | S3 업로드 실패 |