{ "info": { "_postman_id": "a1b2c3d4-1001-4000-a001-000000000002", "name": "Donation", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", "_exporter_id": "40701166" }, "item": [ { "name": "후원", "item": [ { "name": "후원 전송", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"SponsorMemberID\": 0,\n \"ChannelID\": 1,\n \"Amount\": 1000,\n \"Message\": \"응원합니다!\",\n \"SendName\": \"익명후원자\",\n \"CrewSessionID\": null,\n \"CrewMemberID\": null,\n \"IsTest\": false\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/api/donation/send", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "send" ] }, "description": "후원을 전송합니다. 지갑 차감 후 Donation 생성, 알림 큐 및 SignalR 브로드캐스트." }, "response": [] }, { "name": "후원 내역", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/api/donation/history?type=sent&page=1&perPage=20", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "history" ], "query": [ { "key": "type", "value": "sent", "description": "sent=보낸 후원, received=받은 후원" }, { "key": "page", "value": "1" }, { "key": "perPage", "value": "20" } ] }, "description": "후원 내역을 조회합니다. type으로 보낸/받은 후원을 구분합니다." }, "response": [] } ] }, { "name": "알림 위젯", "item": [ { "name": "알림 설정 조회", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/api/donation/alert/config/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "alert", "config", "1" ] }, "description": "채널 ID로 후원 알림 위젯 설정을 조회합니다. OBS 브라우저 소스용." }, "response": [] }, { "name": "알림 설정 저장", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"ChannelID\": 1,\n \"MemberID\": 0,\n \"ID\": null,\n \"Title\": \"기본 알림\",\n \"Amount\": 1000,\n \"Message\": \"{{sender}}님이 {{amount}}원을 후원했습니다!\",\n \"PlayDelaySec\": 0.0,\n \"DisplayDurationSec\": 5.0,\n \"Sound\": null,\n \"EnableThumbnail\": true,\n \"ThumbnailUrl\": null,\n \"IsActive\": true\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/api/donation/alert/config", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "alert", "config" ] }, "description": "후원 알림 위젯 설정을 저장/수정합니다." }, "response": [] } ] }, { "name": "리모콘", "item": [ { "name": "리모콘 상태 조회", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/api/donation/remote/state/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "remote", "state", "1" ] }, "description": "리모콘 상태(일시정지/후원수신/음성만/영상만) 및 대기열을 조회합니다." }, "response": [] }, { "name": "리모콘 상태 변경", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"ChannelID\": 1,\n \"MemberID\": 0,\n \"IsPaused\": false,\n \"IsAccepting\": true,\n \"IsAudioOnly\": false,\n \"IsVideoOnly\": false\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/api/donation/remote/state", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "remote", "state" ] }, "description": "리모콘 상태를 변경합니다. (일시정지, 후원수신, 음성만, 영상만)" }, "response": [] }, { "name": "알림 무시", "request": { "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/api/donation/remote/ignore/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "remote", "ignore", "1" ] }, "description": "미재생 알림을 Ignored로 변경합니다. 재생 중인 알림은 사용 불가." }, "response": [] }, { "name": "알림 재전송", "request": { "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/api/donation/remote/resend/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "remote", "resend", "1" ] }, "description": "실패/무시된 알림을 대기열 맨 뒤에 재추가합니다. Queued로 초기화." }, "response": [] }, { "name": "알림 건너뛰기", "request": { "method": "POST", "header": [], "url": { "raw": "{{baseUrl}}/api/donation/remote/skip/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "donation", "remote", "skip", "1" ] }, "description": "현재 재생 중인 알림을 즉시 종료하고 다음 알림으로 넘깁니다." }, "response": [] } ] }, { "name": "크루", "item": [ { "name": "크루 세션 목록", "request": { "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/api/crew/list/1?page=1&perPage=20", "host": [ "{{baseUrl}}" ], "path": [ "api", "crew", "list", "1" ], "query": [ { "key": "page", "value": "1" }, { "key": "perPage", "value": "20" }, { "key": "sortBy", "value": "", "disabled": true, "description": "정렬 기준" }, { "key": "sortDir", "value": "", "disabled": true, "description": "정렬 방향" } ] }, "description": "크루 후원 세션 목록을 조회합니다. 날짜/금액/참여자 정렬, 페이징 지원." }, "response": [] }, { "name": "크루 리더보드", "request": { "auth": { "type": "noauth" }, "method": "GET", "header": [], "url": { "raw": "{{baseUrl}}/api/crew/ranking/1", "host": [ "{{baseUrl}}" ], "path": [ "api", "crew", "ranking", "1" ] }, "description": "크루원별 리더보드(점수/기여도)를 조회합니다. OBS 위젯용 익명 허용." }, "response": [] }, { "name": "크루 방송 시작", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"CrewID\": 1,\n \"Title\": \"크루 방송 제목\"\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/api/crew/session/start", "host": [ "{{baseUrl}}" ], "path": [ "api", "crew", "session", "start" ] }, "description": "크루 방송을 시작합니다. 전원 동의(Ready) 상태에서만 시작 가능." }, "response": [] }, { "name": "크루 방송 종료", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"CrewSessionID\": 1\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/api/crew/session/end", "host": [ "{{baseUrl}}" ], "path": [ "api", "crew", "session", "end" ] }, "description": "크루 방송을 종료합니다. 정산 처리(수수료 차감, 지갑 입금) 후 크루원에게 쪽지 발송." }, "response": [] }, { "name": "크루원 참여 동의", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"CrewSessionID\": 1,\n \"CrewMemberID\": 1\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseUrl}}/api/crew/session/consent", "host": [ "{{baseUrl}}" ], "path": [ "api", "crew", "session", "consent" ] }, "description": "크루원 참여 동의를 처리합니다. 전원 동의 시 Ready 전환." }, "response": [] } ] } ], "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{accessToken}}", "type": "string" } ] }, "event": [ { "listen": "prerequest", "script": { "type": "text/javascript", "packages": {}, "requests": {}, "exec": [ "" ] } }, { "listen": "test", "script": { "type": "text/javascript", "packages": {}, "requests": {}, "exec": [ "" ] } } ] }