Glowb Dev Docs
SaaS APIAgency API

POST /agency/me/clients

에이전시 하위 기업 추가/삭제

하위 기업 추가/삭제

에이전시 운영자가 하위 기업 계정을 생성합니다. id는 하위 기업의 로그인 아이디이며, email과 별도로 전달해야 합니다.

기존처럼 email 값을 로그인 아이디로 사용하지 않습니다. 프론트는 id 입력값을 별도로 받아 요청 바디에 포함해야 합니다.

에이전시 운영자가 자기 에이전시에 대해 호출하는 경로와, 글로우브 운영자(어드민)가 특정 에이전시를 지정해 호출하는 경로 두 가지가 있습니다.

항목에이전시 셀프서비스어드민
메서드POSTPOST
경로/agency/me/clients 또는 /ai/agency/me/clients/admin/agency/{agencyId}/clients 또는 /ai/admin/agency/{agencyId}/clients
인증필요필요
권한ROLE_AGENCYROLE_ADMIN
소속 에이전시호출자 본인 에이전시경로의 agencyId (없는 에이전시면 거부)

두 경로 모두 요청 바디·응답 형식·생성 규칙(초기 상태, 알림/가격 노출 기본값, 임시 비밀번호)이 같습니다.

요청

POST /agency/me/clients HTTP/1.1
Host: api.glowb.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json

{
  "id": "client_brand_001",
  "name": "고객사A",
  "email": "client@example.com",
  "password": "initialPassword123!"
}
POST /admin/agency/demo/clients HTTP/1.1
Host: api.glowb.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Type: application/json

{
  "id": "client_brand_001",
  "name": "고객사A",
  "email": "client@example.com",
  "password": "initialPassword123!"
}
curl -X POST "https://api.glowb.com/agency/me/clients" \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "client_brand_001",
    "name": "고객사A",
    "email": "client@example.com",
    "password": "initialPassword123!"
  }'
const response = await fetch('/agency/me/clients', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${accessToken}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    id: 'client_brand_001',
    name: '고객사A',
    email: 'client@example.com',
    password: 'initialPassword123!',
  }),
});

const client = await response.json();

Request Body

Prop

Type

삭제

하위 기업 계정을 실제 삭제합니다. 내부적으로 TB_BUSINESS를 먼저 삭제하고, 연결된 TB_MEMBER도 삭제합니다.

하위 기업에 캠페인, 크레딧 거래, 캠페인 예산 이력이 있으면 삭제할 수 없습니다. 캠페인이 있으면 먼저 다른 하위 기업으로 할당하고, 크레딧/예산 이력이 있으면 삭제 대신 비활성화 상태로 변경해야 합니다. 그 밖의 데이터(계약·알림 등)가 하위 기업을 참조하고 있어도 삭제할 수 없으며(AGENCY_CLIENT_HAS_DEPENDENCIES), 이 경우에도 비활성화 상태로 변경하세요.

항목값
메서드DELETE
경로/agency/me/clients/{id} 또는 /ai/agency/me/clients/{id}
인증필요
권한ROLE_AGENCY
DELETE /agency/me/clients/client_brand_001 HTTP/1.1
Host: api.glowb.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

삭제 성공 응답 (200 OK)

{
  "id": "client_brand_001",
  "name": "고객사A",
  "email": "client@example.com",
  "status": "active"
}

응답

성공 응답 (200 OK)

{
  "id": "client_brand_001",
  "name": "고객사A",
  "email": "client@example.com",
  "status": "active",
  "creditBalance": 0,
  "notifyAdvertiser": true,
  "notifyAgency": false,
  "showPrice": true
}

Response Body

Prop

Type

에러 응답

상태 코드code설명
400AGENCY_CLIENT_LOGIN_ID_REQUIRED(추가) 로그인 아이디 누락
400AGENCY_CLIENT_LOGIN_ID_INVALID(추가) 로그인 아이디가 60자 초과(args.maxLength=60). 예전에는 DATABASE_ERROR로 실패했습니다
409AGENCY_CLIENT_LOGIN_ID_DUPLICATE(추가) 이미 사용 중인 로그인 아이디(args.loginId)
409AGENCY_CLIENT_CAMPAIGN_REMAINING(삭제) 하위 기업에 연결된 캠페인이 있음. 먼저 다른 하위 기업으로 할당
409AGENCY_CLIENT_CREDIT_HISTORY_EXISTS(삭제) 크레딧·예산 이력이 있음. 비활성화로 변경
409AGENCY_CLIENT_HAS_DEPENDENCIES(삭제) 위 검사 밖의 데이터가 하위 기업을 참조하고 있음. 비활성화로 변경. 예전에는 DATABASE_ERROR로 실패했습니다
{
  "status": 400,
  "code": "AGENCY_CLIENT_LOGIN_ID_INVALID",
  "message": "하위 기업 로그인 아이디는 60자 이하로 입력해주세요.",
  "args": { "maxLength": 60 },
  "data": null
}

API 테스트

On this page