발급 이력 단건
GET /v1/issues/{issueId}
GET https://api.k-otp.dev/v1/issues/{issueId}개요
Returns the same PII-free projection as GET /issues for a single issue, including billing status and attempt counters. Issue identifiers belonging to other apps are indistinguishable from missing records.
Requires an sk_ secret key; pk_ public keys are rejected with 403.
인증
| 허용 키 | 필요 scope | 대체 허용 scope |
|---|---|---|
sk_ | otp:dashboard:read | otp:read, * |
파라미터
| 이름 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
issueId | path | string (uuid) | 예 | issueId returned by POST /v1/issue. |
응답 (200)
The issue projection.
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
issueId | string (uuid) | 예 | |
purpose | string | 예 | |
templateId | string | 예 | |
channel | "alimtalk" | "sms" | 예 | |
verificationStatus | "expired" | "issued" | "max_attempts" | "replaced" | "verified" | 예 | Effective status: an issued row past its expiry is reported as expired. |
deliveryStatus | "delivered" | "failed" | "queued" | "sent" | "unknown" | 예 | Latest tracked delivery status; unknown when the tracker has no record or is unavailable. |
overallStatus | "delivered" | "delivery_failed" | "expired" | "in_progress" | "max_attempts" | "pending_lookup" | "replaced" | "verified" | 예 | Same derivation as GET /v1/status. |
billingStatus | "debit_pending" | "debited" | "release_pending" | "released" | "reserved" | 예 | Billing lifecycle of an issue: credit is reserved at admission, then either debited (debit_pending -> debited) or released (release_pending -> released) once send processing finishes. |
debitedAmount | integer | 예 | Credits debited for this issue so far. |
currency | string | 예 | Credit unit, currently CREDIT. |
expiresAt | string (date-time) | Undefined only for legacy records that predate persisted expiry timestamps. | |
verifiedAt | string (date-time) | Present once the issue was verified. | |
attemptsUsed | integer | 예 | |
maxAttempts | integer | 예 | |
attemptsRemaining | integer | 예 | |
createdAt | string (date-time) | 예 | |
updatedAt | string (date-time) | 예 |
오류 응답
모든 오류는 { defined, code, status, message, data? } 형태입니다. 자세한 내용은 오류를 참고하세요.
| 상태 | code | 설명 |
|---|---|---|
| 400 | BAD_REQUEST | issueId is not a UUID. |
| 401 | UNAUTHORIZED | the Authorization: Bearer credential is missing, malformed, inactive, or rejected by introspection. |
| 403 | FORBIDDEN | the credential lacks otp:dashboard:read (or an accepted alias), or a pk_ public key was used. Public keys are limited to issue/verify. |
| 404 | NOT_FOUND | no issue with this issueId exists for the authenticated app. |
| 409 | CONFLICT | the request conflicts with the current state of the resource. |
| 500 | INTERNAL_SERVER_ERROR | unexpected server failure. Undefined errors (defined: false) use the same envelope. |
| 503 | SERVICE_UNAVAILABLE | credential introspection or a downstream dependency is temporarily unavailable. Retry with backoff. |
요청 예시
curl "https://api.k-otp.dev/v1/issues/0192f3c4-8b7a-7c3e-9a51-2f4d6e8b1a90" \
-H "Authorization: Bearer $KOTP_SECRET_KEY"