업로드·알림·결제
여러 서비스가 함께 쓰는 API입니다. 모두 로그인이 필요합니다.
파일 업로드
파일은 API 서버를 거치지 않고 저장소로 바로 올립니다. 먼저 업로드 주소를 받고, 그 주소로 파일을 PUT 한 뒤, 받은 url을 데이터에 저장합니다.
ts
const ticket = await client.uploads.ticket({
purpose: 'event',
contentType: file.type,
size: file.size,
});
await fetch(ticket.uploadUrl, { method: 'PUT', headers: ticket.headers, body: file });
await client.day.events.update(eventId, { image: ticket.url });업로드 주소는 10분 동안 유효합니다. 운영 환경은 S3에 올리고 CDN 주소를 돌려주며, 로컬은 API 서버 디스크(/files/…)에 저장합니다.
purpose | 형식 | 최대 크기 |
|---|---|---|
avatar | 이미지 | 5MB |
place, event, casting, product, proof | 이미지 | 10MB |
evidence | 이미지, PDF | 20MB |
asset | 이미지, 오디오, 영상 | 200MB |
이미지는 JPEG·PNG·WebP·GIF, 오디오는 MP3·WAV·M4A·WebM, 영상은 MP4·WebM·MOV를 받습니다. 형식이나 크기가 맞지 않으면 티켓 발급 단계에서 400이 돌아옵니다.
알림
ts
const { items, unread } = await client.notifications.list({ service: 'day' });
await client.notifications.readAll({ service: 'day' });알림은 서비스별(day, studio)로 나뉩니다. service를 빼면 모든 서비스의 최근 알림 50개를 돌려줍니다. 각 항목의 href는 알림을 눌렀을 때 이동할 화면 경로입니다.
결제 내역
ts
const payments = await client.payments.mine();데이벤트 등록비와 스튜디오 크레딧 충전이 모두 여기에 쌓입니다. 지금은 모의 결제(PAYMENT_PROVIDER=mock)라 실제 청구는 일어나지 않습니다.