매출 리포트
기간·PG·결제수단별 결제·환불·순매출 집계
결제 대금은 PG가 셀러에게 바로 정산하고, 플랫폼이 수수료를 떼고 지급하는 정산은 없어요. 셀러 콘솔 분석 › 매출 리포트에서 PG가 승인한 결제와 환불을 기간별로 확인해요. 이 화면은 스토어 소유자(OWNER)만 볼 수 있어요.
집계 기준
결제는 PG 승인 시각, 환불은 PG 취소가 완료된 시각을 기준으로 한국 시간 날짜에 집계해요. 실패한 환불은 빠지고, 부분 취소도 환불 1건으로 세요. 순매출은 결제 금액에서 환불 금액을 뺀 값이에요.
승인 직후 재고 소진 등으로 주문이 만들어지지 않아 자동 취소된 결제는 결제와 환불에 모두 잡혀요. 순매출에는 영향이 없어요.
결제수단은 구매자가 실제로 결제한 수단 기준이에요. 카드로 결제를 요청했어도 결제창에서 간편결제로 결제했다면 간편결제로 잡혀요. PG가 결제수단을 알려 주지 않으면 요청한 결제수단으로 집계해요.
샌드박스 모드에서 받은 테스트 결제는 실제로 돈이 오가지 않아 기본으로 집계에서 빠져요. 테스트 결제와 그 환불까지 보려면 포함하도록 골라요.
콘솔 화면
시작일과 종료일로 기간을 정해요. 기본은 오늘을 포함한 최근 30일이고, 한 번에 92일까지 조회할 수 있어요. PG와 결제수단으로 거를 수 있고, 결제 구분에서 테스트 결제를 포함할지 골라요. 테스트 결제를 포함하면 화면 위에 테스트 결제를 포함한 금액이에요 안내가 떠요.
화면 위에는 결제 금액·환불 금액·순매출 합계가 있고, 아래에 일별 매출 차트와 구분별 매출 표가 이어져요. 구분별 매출은 PG별과 결제수단별을 바꿔 가며 볼 수 있고, 순매출·결제 건수·결제 금액·환불 건수·환불 금액이 나와요.
PG 수수료는 참고용이에요. PG에서 수수료 값을 받지 못하면 표시하지 않아요. 실제 수수료와 입금액은 각 PG의 정산 내역에서 확인해 주세요.
API
curl "https://api.sayren.app/v1/sales-report?from=2026-09-01&to=2026-09-19&groupBy=PROVIDER" \
-H "Authorization: Bearer {storeToken}"{
"from": "2026-09-01",
"to": "2026-09-19",
"timezone": "Asia/Seoul",
"currency": "KRW",
"groupBy": "PROVIDER",
"provider": null,
"method": null,
"includeTest": false,
"summary": {
"paymentCount": 12, "paymentAmount": 1548000,
"refundCount": 2, "refundAmount": 129000,
"netAmount": 1419000, "pgFeeAmount": null
},
"rows": [
{
"date": null, "provider": "tosspayments", "method": null,
"paymentCount": 10, "paymentAmount": 1290000,
"refundCount": 1, "refundAmount": 129000,
"netAmount": 1161000, "pgFeeAmount": null
}
]
}| 쿼리 | 설명 |
|---|---|
from · to | YYYY-MM-DD, 한국 시간 기준. 양끝 포함, 최대 92일 |
provider | tosspayments · portone |
method | CARD · BANK_TRANSFER · VIRTUAL_ACCOUNT · MOBILE · EASY_PAY. 실제 결제수단 기준 |
groupBy | DAY(기본) · PROVIDER · METHOD · PROVIDER_METHOD |
includeTest | true면 테스트 결제와 그 환불도 집계. 기본 false |
rows에는 groupBy에 해당하는 필드만 값이 있고 나머지는 null이에요. 결제·환불이 없는 날짜·PG·결제수단은
rows에서 빠지니, 일별 차트를 그릴 때는 빈 날짜를 0으로 채워요. pgFeeAmount는 PG에서 수수료 값을 받지 못하면
null이에요.
스코프는 settlement:r이에요. 콘솔 로그인에서는 OWNER 역할만 이 스코프를 가지고, API 토큰이나 M2M 클라이언트에
이 스코프를 주면 연동 서버에서도 조회할 수 있어요.
| 코드 | 상황 |
|---|---|
400 VALIDATION_FAILED | 쿼리 형식 오류 |
400 INVALID_PARAMETER | 없는 날짜, to가 from보다 앞섬 |
400 RANGE_TOO_WIDE | 기간이 92일을 넘음 |
Store SDK에서는 api.salesReport.get({ from, to, groupBy: "DAY" })로 조회해요.
정산 API 폐기 예정
GET /settlements와 GET /settlements/{settlementId}는 폐기 예정이에요. 구매확정 때 정산 내역을 쌓지 않으므로
새 정산 내역은 생기지 않고, 이미 쌓인 내역만 조회돼요. 응답에는 다음 헤더가 붙어요.
Deprecation: true
Link: </v1/sales-report>; rel="successor-version"매출 리포트 API로 옮겨 주세요. Store SDK의 settlements.*도 폐기 예정이에요. 제거하기 전에
변경 이력으로 알려요.