Skip to content

운영 API ​

client.admin은 운영 콘솔(admin.pickgola.com)이 쓰는 API입니다. 운영자 권한이 있는 계정만 부를 수 있고, 그 밖의 계정은 403을 받습니다.

권한 ​

역할할 수 있는 일
owner (소유자)전부. 운영자 추가·삭제, 운영자 계정 상태 변경, 스튜디오 가격 설정
operator (운영자)소유자 전용을 뺀 나머지

첫 소유자는 서버에서 만듭니다.

bash
# pickgola-api에서 (npm run build 이후)
npm run admin:create -- owner@pickgola.com '비밀번호' '이름' owner

이후에는 소유자가 콘솔에서 가입된 계정에 권한을 줍니다.

ts
await client.admin.grantAdmin({ email: 'ops@pickgola.com', role: 'operator' });
await client.admin.revokeAdmin(accountId);

운영자의 모든 변경 작업은 감사 로그에 남습니다(client.admin.auditLogs()).

계정 ​

ts
const page = await client.admin.listAccounts({ q: 'brand', status: 'active' });
const detail = await client.admin.account(accountId);

await client.admin.setAccountStatus(accountId, { status: 'suspended', reason: '스팸 신고 누적' });
await client.admin.revokeSessions(accountId); // 모든 기기에서 강제 로그아웃

정지된 계정은 다음 요청부터 바로 401을 받습니다.

결제·환불 ​

ts
const payments = await client.admin.payments({ service: 'studio', status: 'paid' });
await client.admin.refundPayment(paymentId, { amount: 50000, reason: '부분 환불' });

amount를 비우면 남은 금액 전액을 환불합니다. 결제자에게 환불 알림이 갑니다.

데이벤트 ​

ts
const reports = await client.admin.day.reports({ status: 'open' });
await client.admin.day.resolveReport(reportId, {
  status: 'resolved', // 'resolved' | 'dismissed'
  resolution: '허위 정보 확인, 이벤트 숨김',
  takeAction: true, // 대상을 숨기고, 사용자 신고면 계정을 이용 제한
});

const events = await client.admin.day.content('event', { q: '성수', visibility: 'visible' });
await client.admin.day.setVisibility('event', eventId, { hidden: true, reason: '허위 정보' });

스튜디오 ​

화면메서드
캠페인studio.campaigns, studio.campaign
조직·크레딧studio.orgs, studio.adjustCredits
크리에이터studio.creators
가입 검수studio.reviews, studio.decideReview
콘텐츠 검수studio.content, studio.decideContent
AI 작업studio.jobs, studio.retryJob, studio.cancelJob
얼굴·음성 자산studio.assets, studio.decideAsset, studio.issueAssetUrl, studio.remindConsent, studio.suspendConsent, studio.resolveConsentIssue
정산studio.payouts, studio.markPaid, studio.setPayoutHold
환불·분쟁studio.refunds, studio.decideRefund, studio.disputes, studio.replyDispute, studio.resolveDispute
개인정보 요청studio.privacy, studio.advancePrivacy
가격studio.pricing, studio.savePricing (소유자)

issueAssetUrl은 크리에이터 자산 원본을 잠깐 볼 수 있는 주소를 발급하고, 누가 열람했는지 감사 로그에 남깁니다.

탈퇴한 계정은 studio.privacy에 삭제 요청(kind: 'delete')으로 들어옵니다. 법정 보관 기간이 지난 데이터를 정리한 뒤 advancePrivacy로 완료 처리하세요.