샌드박스
샌드박스는 실제 사용자 데이터 없이 통합을 개발·테스트하는 연습용 환경입니다. 샌드박스 키로 인증하면 서버가 서비스 진입 직후 분기하여 결정적(항상 같은) 합성 응답을 돌려줍니다 — 실제 주체 조회 코드에는 절대 도달하지 않습니다.
라이브와 같은 URL을 사용합니다. 환경은 키에 결속됩니다.
샌드박스 호출도 접근로그에 기록되지만
environment='SANDBOX'로 분리되어 실 로그와 섞이지 않습니다.고정 연습 주체 (canonical subjects) — 점수 조회
POST /fi/score/query·POST /fi/score/batch에서 아래 주체를 사용하세요.
| pairwiseSub | 결과 | 설명 |
|---|---|---|
SANDBOX-TIER-A | 820 · EXCELLENT | 최상위 등급(750–850) 고정 케이스 |
SANDBOX-TIER-B | 700 · GOOD | 650–749 구간 고정 케이스 |
SANDBOX-TIER-C | 600 · FAIR | 550–649 구간 고정 케이스 |
SANDBOX-TIER-D | 500 · BELOW_AVERAGE | 450–549 구간 고정 케이스 |
SANDBOX-TIER-E | 400 · POOR | 0–449 구간 고정 케이스 |
SANDBOX-NO-CONSENT | 항상 거부(DENIED) | 단건은 동의 없음 에러(SW2300)와 동일한 형태, 배치는 status="DENIED" |
SANDBOX-EXPIRED | 동의 만료 케이스 | 동의가 만료된 주체의 거부 동작 연습 |
| 그 밖의 임의 값 | 300~850 결정적 점수 | sha256(pairwiseSub) 기반 — 같은 입력이면 항상 같은 점수 |
사유코드는 실제 카탈로그(31종)의 고정 4건 세트가 영어/현지어 라벨과 함께 반환되어, 라이브와 동일한 스키마로 파싱을 검증할 수 있습니다.
고정 케이스 — 증명서 검증 (verify)
POST /fi/verify는 attestationId(vcId) 접두사로 6가지 판정을 각각 재현합니다.
| vcId 접두사 | 판정(reason) | valid |
|---|---|---|
SANDBOX-VALID | VALID | true |
SANDBOX-EXPIRED | EXPIRED — 유효기간(90일) 경과 | false |
SANDBOX-REVOKED | REVOKED — 발급기관이 폐기 | false |
SANDBOX-TAMPERED | COMMITMENT_MISMATCH — 변조 의심 | false |
SANDBOX-NOT-FOUND | NOT_FOUND — 발급 기록 없음 | false |
SANDBOX-TIER-MISMATCH | TIER_MISMATCH — 제시 등급 불일치 | false |
예제: 등급별 응답 확인
curl -s https://trendy.storydot.kr/superapp/api/fi/score/query \
-H "X-Client-Id: YOUR_CLIENT_ID" \
-H "X-API-Key: YOUR_SANDBOX_KEY" \
-H "Content-Type: application/json" \
-d '{ "pairwiseSub": "SANDBOX-TIER-C", "purpose": "PREQUALIFY" }'
{
"success": true,
"data": {
"pairwiseSub": "SANDBOX-TIER-C",
"score": 600,
"scoreMin": 0,
"scoreMax": 850,
"tier": "FAIR",
"pullType": "SOFT",
"reasonCodes": [
{
"code": "RC_LOW_UTILITY_PAYMENT_RELIABILITY",
"labelEn": "Low utility bill payment reliability",
"labelLocalized": "Low utility bill payment reliability",
"category": "PAYMENT",
"impactPoints": 40,
"rank": 1
},
{
"code": "RC_LOW_TELCO_PAYMENT_REGULARITY",
"labelEn": "Irregular telecom payment history",
"labelLocalized": "Irregular telecom payment history",
"category": "PAYMENT",
"impactPoints": 30,
"rank": 2
},
{
"code": "RC_CASHFLOW_INSTABILITY",
"labelEn": "Cash-flow instability",
"labelLocalized": "Cash-flow instability",
"category": "FINANCIAL",
"impactPoints": 20,
"rank": 3
},
{
"code": "RC_DID_VC_WEAK",
"labelEn": "Limited verified digital identity",
"labelLocalized": "Limited verified digital identity",
"category": "IDENTITY",
"impactPoints": 10,
"rank": 4
}
],
"modelVersion": "sandbox-v1",
"scoredAt": "2026-01-01 00:00:00",
"decisionHash": "30b3aba5849a8cf99e59addd11bb2b8ee21a63ad142634599b5ce26ac24b0e3e",
"environment": "SANDBOX",
"confidence": "HIGH",
"dataSufficiency": {
"featuresObserved": 18,
"featuresTotal": 20,
"coveragePercent": 90.0
}
},
"message": "Score retrieved"
}
권장 테스트 체크리스트
- 등급 5구간(A~E) 각각의 응답 파싱 및 자체 정책 매핑 확인
SANDBOX-NO-CONSENT거부 처리 — 사용자에게 "동의 필요" 안내가 나가는지SANDBOX-EXPIRED— 동의 만료 후 재동의 유도 흐름- verify 6판정 전부 — 특히
COMMITMENT_MISMATCH(변조)와EXPIRED(90일 경과) 구분 표시 - 배치(1~100건) 응답의 OK/DENIED 혼합 처리
- 429 +
Retry-After재시도 로직(속도 제한 60 req/min)