운영 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로 완료 처리하세요.