Skip to main content

인증서 검증

POST /certificates/verify

인증서의 진위 여부를 검증합니다. 이미지 업로드 또는 txHash / itemId 중 하나를 사용합니다.

요청 형식: multipart/form-data

필드타입설명
imagefile검증할 인증서 이미지 (image 또는 q 중 하나 필수)
qstring (query)트랜잭션 해시 (0x...) 또는 발급 이력 ID (UUID)

이미지와 q가 동시에 전달되면 이미지가 우선 적용됩니다.

HMAC 서명

multipart 요청 시 BODY_HASH = SHA256("") (빈 문자열 해시)를 사용합니다.
쿼리스트링(?q=...)은 서명 경로에서 제외합니다. PATH = /certificates/verify

const timestamp = String(Date.now());
const bodyHash = crypto.createHash('sha256').update('').digest('hex');
const stringToSign = `POST\n/certificates/verify\n${timestamp}\n${bodyHash}`;
const signature = crypto.createHmac('sha256', apiSecret).update(stringToSign).digest('hex');

const formData = new FormData();
formData.append('image', imageFile);

const res = await fetch('https://api.koreabaas.co.kr/certificates/verify', {
method: 'POST',
headers: {
'X-API-Key': apiKey,
'X-Timestamp': timestamp,
'X-Signature': signature,
},
body: formData,
});

응답​

검증 성공 (verified: true)

{
"success": true,
"data": {
"verified": true,
"documentHash": "6b7fa434f92a8b80aab02d9bf1a12e49ffcae424e4013a1c4f68b67e3d2bbcd0",
"issuedAt": "2024-01-01T09:00:00.000Z",
"issuer": "블록오디세이",
"status": "valid",
"contractName": "졸업 증명서",
"contractType": "sbt",
"to": "0x1111111111111111111111111111111111111111",
"tokenId": "42",
"transactionHash": "0xd97fc363...",
"verifiedAt": "2024-06-01T00:00:00.000Z"
}
}

검증 실패 (verified: false)

{
"success": true,
"data": {
"verified": false,
"verifiedAt": "2024-06-01T00:00:00.000Z"
}
}

응답 필드

필드설명
verified검증 성공 여부
documentHash인증서 이미지 SHA-256 해시 (이미지 발급 건만)
issuedAt발급 일시
issuer발급 기관명
statusvalid (유효) / revoked (폐기됨)
contractName인증서 컨트랙트 이름
contractType컨트랙트 타입 (erc721, sbt 등)
to수신자 지갑 주소
tokenId토큰 ID
transactionHash발급 트랜잭션 해시
verifiedAt검증 수행 일시