Basics

이 페이지에서는 Card Minting API와 App2App API의 사용자 인증, 페이지네이션, 리턴 코드, 약어 등을 설명합니다.

Card Minting API

Authentication

Card Minting API를 사용하기 위해서는 JWT 기반 액세스 토큰 발급이 필요합니다. Klip Partners 회원 가입 시 등록한 로그인 ID와 비밀번호를 통해서 토큰을 발급 받을 수 있습니다. 발급된 토큰은 24시간 동안 유효하며 보통 만료 전에 재발급이 필요합니다. 발급된 토큰은 API 요청 헤더의 Authorization 필드에 토큰을 포함하는 방식으로 사용합니다.

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

Pagination

보유 카드 내역을 조회할 때 카드의 양의 많은 경우 한 번에 받으면 양이 많기 때문에 여러번 요청해야할 수 있습니다. 이를 위해서 조회 API에서는 결과값에 next_cursor를 함께 제공합니다. 일반적으로 카드 개수가 100개를 초과한다면 1번 호출 시 100개의 결과와 next_cursor 값을 받습니다. 나머지 카드를 조회하려면 next_cursor 값을 query 파라미터 cursor에 전달하여 API를 다시 호출해야합니다.

예들 들어 보유하고 있는 카드를 조회하면,

//Get Card Information By BApp
curl "https://api.klipwallet.com/v2/wallet/bapp" \
-H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"

아래와 같은 형태의 응답을 받습니다.

{
"bapps": [...],
"next_cursor": "N2r8KY...XOadEG"
}

남은 카드 목록을 조회하려면 next_cursor을 이용하여 아래와 같이 다시 호출합니다. next_cursor가 비어있을 때까지 계속 호출하여 보유한 전체 카드 목록을 얻을 수 있습니다.

//Get Card Information By BApp
curl "https://api.klipwallet.com/v2/wallet/bapp?cursor=N2r8KY...XOadEG" \
-H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

Success Codes/Error Codes

요청이 성공하면 HTTP code 200을 받습니다. 만약 요청이 정상 처리되지 않으면 400, 401, 500의 HTTP code가 전달됩니다. 400은 요청이 잘못된 경우, 401은 유효하지 않은 액세스 토큰을 사용했을 때 리턴됩니다. 500은 서버에 알 수 없는 장애가 발생했을 때 리턴됩니다. 400 또는 401 에러는 구체적인 에러 코드와 메시지가 함께 전달됩니다.

에러 메시지는 JSON 포맷으로 전달되며 필드는 아래와 같습니다.

{
"code": number,
"err": string
}

에러 메시지 종류는 아래와 같습니다.

Status Code

Error Code

Error Message

400

400

bad request

400

410

invalid birth for account creation

400

411

teenagers under the age of 19 are not allowed to sign up

400

412

already existing account (wallet)

400

413

already existing email

400

414

already existing account without wallet

400

4111

receiver is already an user of klip

400

4112

sender daily limit exceeded

400

4113

sender already sent invite message to receiver

400

4114

receiver daily limit exceeded

400

4115

receiver monthly limit exceeded

400

4070

send token count daily limit exceeded

400

4071

send token amount onetime limit exceeded

400

4072

send token amount decimal places exceeded

400

4080

mint count monthly limit exceeded

401

420

inactive accounts require new pin code settings

401

421

suspended accounts cannot login

401

422

the account requesting the suspension

401

423

the account has been unsubscribed

401

424

undefined status

401

425

not yet approved

401

440

content is not active

401

402

invalid session

400

403

exceed pin code error count

404

404

not Found

401

405

attempted access from non-kakako app

401

406

not found user info in db

401

4001

invalid access token

401

4002

the expired token

401

4003

fail to get authorization in header

401

4004

invalid password

401

4005

account does not have a contract address

401

4006

invalid pin code

400

4007

not allow the same code as before

400

430

duplicated ci for account creation

400

431

inconsistency with previous ci

400

432

fail to check Kakao ci

400

433

fail to check Kakao legal name

400

434

fail to check Kakao phone number

400

435

kakao ci is empty

500

500

internal server error

500

501

fail to send kakao message

500

5002

fail to call kakao unlink

401

4044

access token does not exist

500

5003

kakao server error

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

Glossary

용어

설명

Klaytn

Klaytn 블록체인 플랫폼

스마트 컨트랙트

Klaytn 블록체인의 특정 주소(Contract Address)에 있는 코드(functions)와 데이터 (state)의 모음

KLAY

Klaytn 내부에서 통용되는 가상 자산이며 Klaytn에 트랜잭션을 전송할 때 필요한 트랜잭션 수수료를 지불하는데 사용

FT

대체 가능 표준 토큰(Fungible Token) 또는 토큰, KIP-7 참조

NFT

대체 불가 표준 토큰(Non-fungible Token) 또는 카드, KIP-17 참조

카드

Klip에서 사용되는 디지털 자산으로 NFT를 의미

계정

Klaytn에서 가상 자산을 보유하는 주체인 동시에 다양한 종류의 트랜잭션을 Klaytn에 전송하는 주체(Account).

트랜잭션 전송

블록체인의 상태를 "변화"시키는 행위이며 주로 블록체인에 데이터를 업로드, 수정, 삭제하거나 블록체인에 스마트 컨트랙트를 배포, 실행하는 행위를 의미

EOA

Klaytn의 외부 소유 계정(Externally Owned Account)이며 Klaytn 상에서 KLAY, NFT, FT을 소유하고 트랜잭션을 전송하는 주체. Klaytn의 Account 참조

서명

Klaytn에서 실행되는 트랜잭션이 전송자 본인에 의해 생성되었다는 것을 증명하기 위한 정보를 생성하는 행위

계정 키

서명에 사용하는 계정의 키(AccountKey). 계정 키로 트랜잭션에 서명해야 서명이 정상적으로 완료됨.

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

App2App API

Authentication

App2App API는 기본적으로 인증을 필요로 하지 않습니다. 하지만 BApp 별로 요청을 구분하기 위해서 request key를 발급하여 API 요청 시 사용합니다. 해당 key를 통해서 Klip 서버에서 요청 내용을 구분하여 컨텍스트를 유지하여 처리합니다. 일반적으로 request key를 발급받고 사용하는 절차는 아래와 같습니다.

  • prepare API를 통해 인증 또는 서명할 내용을 전달하고 응답으로 request key를 전달 받습니다.

  • 전달받은 request key를 이용하여 Deep Link(지정된 앱을 자동으로 실행하고 홈페이지가 아닌 특정 페이지로 가기 위한 URI)를 호출하고, 모바일 카카오톡 더보기탭에 있는 Klip을 실행합니다.

  • 처리 결과는 result API를 통해서 polling하고 이 때 Query 파라미터 request_key에 어떤 요청에 대한 처리 결과를 얻고자 하는지를 전달합니다.

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

Pagination

보유 카드 내역을 조회할 때 카드의 양의 많은 경우 한 번에 받으면 양이 많기 때문에 여러번 요청해야할 수 있습니다. 이를 위해서 조회 API에서는 결과값에 next_cursor를 함께 제공합니다. 일반적으로 카드 개수가 100개를 초과한다면 1번 호출 시 100개의 결과와 next_cursor 값을 받습니다. 나머지 카드를 조회하려면 next_cursor 값을 query 파라미터 cursor에 전달하여 API를 다시 호출해야합니다.

예들 들어 보유하고 있는 카드를 조회하면,

//Get card list
curl "https://api.klipwallet.com/v2/a2a/cards?sca=SCA&eoa=EOA" \
-H "Content-Type: application/json"

아래와 같은 형태의 응답을 받습니다.

{
"name": "KLIP",
"symbol_img": "image url",
"cards": [...],
"next_cursor": "N2r8KY...XOadEG"
}

남은 카드 목록을 조회하려면 next_cursor을 이용하여 아래와 같이 다시 호출합니다. next_cursor가 비어있을 때까지 계속 호출하여 보유한 전체 카드 목록을 얻을 수 있습니다.

//Get card list
curl "https://api.klipwallet.com/v2/a2a/cards?sca=SCA&eoa=EOA&cursor=N2r8KY...XOadEG" \
-H "Content-Type: application/json"

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

SDK

App2App API 기본적으로 REST API를 제공하지만, 각 BApp 개발환경에 맞게 사용할 수 있는 SDK를 제공합니다. 현재 지원하는 SDK 종류는 Android, iOS, 모바일 웹용 JavaScript입니다. 구체적인 내용은 SDK 페이지를 참조하십시오.

Success Codes/Error Codes

요청이 성공하면 HTTP code 200을 받습니다. 만약 요청이 정상 처리되지 않으면 400, 500의 HTTP code가 전달됩니다. 400은 요청 데이터가 잘못됐거나 유효하지 않은 request_key를 사용했을 때 리턴됩니다. 500은 서버에 알 수 없는 장애가 발생했을 때 리턴됩니다. 400 에러는 구체적인 에러 코드와 메시지가 함께 전달됩니다. 자세한 내용은 각 API를 참조하십시오.

에러 메시지는 JSON 포맷으로 전달되며 필드는 아래와 같습니다.

{
"request_key": "random key",
"expiration_time": unix timestamp,
"status": "error",
"error": {
"code": int,
"err": "error message"
}
}

이와 별개로 카드 조회 API (/v2/a2a/cards)는 request key과 관련이 없기 때문에 아래와 같은 형태로 에러가 전달됩니다.

{
"code": number,
"err": string
}

에러 메시지 종류는 아래와 같습니다.

Status Code

Error Code

Error Message

400

400

bad request

400

6000

request key does not exist

400

6001

request key is expired

400

6010

invalid request type

400

6011

invalid request status

400

6200

execute contract count daily limit exceeded

400

6401

bapp name is required

400

6402

invalid transaction

400

6403

invalid to address

400

6404

invalid amount

400

6405

invalid contract

400

6406

invalid card id

400

6407

invalid abi

400

6408

invalid params

400

6409

invalid value

400

6410

unknown request type

400

6411

invalid from address

400

6412

insufficient funds

400

6500

address is on the blacklist

400

6501

invalid user status

500

500

internal server error

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.

Glossary

Term

Description

Deep link

웹이나 앱에서 홈페이지가 아닌 특정 페이지로 가기위한 URI (Query 파라미터를 통해 요청할 작업을 구분하기 위한 용도로 사용)

Request key

App2App API 요청을 구분하기 위한 랜덤하게 생성된 a0fee72d-3b1b-43a3-ae0d-e277a1001bef 형태의 문자열

이 문서 혹은 Klip에 관한 문의는 개발자 포럼을 방문해 도움을 받으십시오.