Only this pageAll pages
Powered by GitBook
1 of 18

Klip Docs

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Introduction

이 νŽ˜μ΄μ§€λŠ” Klipκ³Ό Klip 개발자 κ°€μ΄λ“œλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

Klip

Klip은 μ‚¬μš©μžμ˜ λ””μ§€ν„Έ μžμ‚°μ„ 쉽고 νŽΈλ¦¬ν•˜κ²Œ 관리해 μ£ΌλŠ” 개인 λ””μ§€ν„Έ μ§€κ°‘ μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ λ‹€μ–‘ν•œ 블둝체인 지갑이 μžˆμ—ˆμ§€λ§Œ, μ–΄λ €μš΄ μ‚¬μš©μž κ²½ν—˜μœΌλ‘œ 인해 μ œν•œμ μœΌλ‘œ ν™œμš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Klip은 카카였 계정과 μ—°λ™λ˜μ–΄ λ©”μ‹ μ €λ§ŒνΌ μ‰¬μš΄ μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€. λ˜ν•œ, Kaia 기반의 λ‹€μ–‘ν•œ 블둝체인 μ„œλΉ„μŠ€λ“€μ„ μ†Œκ°œν•˜λŠ” 창ꡬ κΈ°λŠ₯을 ν•˜λ©° 블둝체인 μ„œλΉ„μŠ€ 확산에 κΈ°μ—¬ν•©λ‹ˆλ‹€.

BAppκ³Ό μΉ΄λ“œ

BApp(Blockchain Application)은 DApp(Decentralized Application)κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ, DAppκ³Ό 달리 νƒˆμ€‘μ•™ν™”λ₯Ό λ„˜μ–΄ λΈ”λ‘μ²΄μΈμ˜ λ‹€λ₯Έ λ§Žμ€ μž₯μ κΉŒμ§€ ν‘μˆ˜ν•œ 더 포괄적인 κ°œλ…μœΌλ‘œ μ‚¬μš©λœ μš©μ–΄μž…λ‹ˆλ‹€. DApp κ°œλ°œμ— κ΄€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λ₯Ό ν™•μΈν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

μΉ΄λ“œλž€ Klipμ—μ„œ μ‚¬μš©λ˜λŠ” λ””μ§€ν„Έ μžμ‚°μœΌλ‘œ, 일반적으둜 NFTλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. Klip νŒŒνŠΈλ„ˆμ‚¬λŠ” μžμ‚°(κ²Œμž„ μ•„μ΄ν…œ, 할인 쿠폰 λ“±)을 μΉ΄λ“œ ν˜•νƒœλ‘œ λ°œν–‰ν•˜κ³  Klip μ‚¬μš©μž λ˜λŠ” BApp μ‚¬μš©μžμ—κ²Œ 보낼 수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” μΉ΄λ“œλ₯Ό λ°›κ³  Klip μ§€κ°‘μ—μ„œ μ›ν•˜λŠ” μΉ΄λ“œλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ 또 λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 보낼 수 μžˆμŠ΅λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ Klip νŒŒνŠΈλ„ˆμ‚¬λŠ” μžμ‹ μ˜ BApp을 잠재 κ³ κ°μ—κ²Œ μ•Œλ¦¬κ³  이듀을 ꡬ맀 고객으둜 μ „ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  μΉ΄λ“œλŠ” 기본적으둜 (Non-Fungible Token)μž…λ‹ˆλ‹€. λŒ€μ²΄ λΆˆκ°€λŠ₯ν•œ 토큰은 κ°„λ‹¨ν•˜κ²Œ λ§ν•˜λ©΄ "화폐"(λΉ„νŠΈμ½”μΈ, 이더리움 λ“±)κ°€ μ•„λ‹Œ "κ³ μœ ν•œ μžμ‚°"μž…λ‹ˆλ‹€. 5λ§Œμ›κΆŒ 지폐 1μž₯은 λ‹€λ₯Έ 5λ§Œμ›κΆŒ 지폐 1μž₯으둜 μ™„λ²½νžˆ λŒ€μ²΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, λ‚΄ 예술 μž‘ν’ˆμ€ λ‹€λ₯Έ 이의 예술 μž‘ν’ˆμœΌλ‘œ λŒ€μ²΄ λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. λ‹€λ₯Έ 이의 λͺ…μž‘μ΄ μ£ΌλŠ” κ°€μΉ˜μ™€ λ‚΄ λͺ…μž‘μ΄ μ£ΌλŠ” κ°€μΉ˜κ°€ μ„œλ‘œ κ°™μ§€ μ•Šκ³  λΉ„κ΅ν•˜κΈ°λ„ μ–΄λ ΅κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ μˆ˜μ§‘ν’ˆ, 예술 μž‘ν’ˆ, 개인용 λ¬Όν’ˆ λ“± κ³ μœ ν•œ μžμ‚°μ„ λ””μ§€ν„Έν™”ν•˜μ—¬ 블둝체인상에 토큰 ν˜•νƒœλ‘œ ν‘œν˜„ν•œ 것이 λ°”λ‘œ λŒ€μ²΄ λΆˆκ°€ ν† ν°μž…λ‹ˆλ‹€. μΉ΄λ“œλŠ” BAppμ—μ„œ μ‚¬μš©ν•˜λŠ” λŒ€μ²΄ λΆˆκ°€ 토큰이며 Klip μ‚¬μš©μžλŠ” Klipμ—μ„œ μΉ΄λ“œλ₯Ό μ“°κ³  κ΅ν™˜ν•©λ‹ˆλ‹€.

Klip API

Klip APIλŠ” μ™ΈλΆ€ μ„œλΉ„μŠ€μ—μ„œ APIλ₯Ό 톡해 Klip에 μžˆλŠ” 코인 및 λŒ€μ²΄ κ°€λŠ₯ν•œ 토큰(FT)을 μ „μ†‘ν•˜κ±°λ‚˜ Klipμ—μ„œ μΉ΄λ“œ(NFT)λ₯Ό λ°œν–‰, 쑰회, 전솑 λ˜λŠ” μ‚­μ œν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. Klip APIλŠ” Klip Partners API와 App2App API둜 κ΅¬μ„±λ©λ‹ˆλ‹€. Klip은 Kaia 외에 Ethereum, Polygon μžμ‚°μ— λŒ€ν•΄μ„œλ„ λ™μΌν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

Klip Partners API

Klip Partners APIλŠ” μ„œλΉ„μŠ€μ— κ°€μž…ν•œ νŒŒνŠΈλ„ˆμ‚¬μ—μ„œ 직접 μΉ΄λ“œλ₯Ό λ°œν–‰, 쑰회, 전솑, μ‚­μ œν•˜κΈ° μœ„ν•œ APIμž…λ‹ˆλ‹€. λ³΅μž‘ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ λ°°ν¬λ‚˜ 관리 및 μš΄μ˜μ—†μ΄ κ°„λ‹¨ν•œ APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μΉ΄λ“œλ₯Ό ν™œμš©ν•˜λŠ” BApp을 κ°œλ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. Klip Partners APIλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ ˆμ°¨λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

Klip Partners μ›Ήμ‚¬μ΄νŠΈλŠ” ν—ˆκ°€λœ μ‚¬μš©μžλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜, Klip Partners μ„œλΉ„μŠ€κ°€ 2024λ…„ 7μ›” 31일자둜 μ’…λ£Œλ˜μ–΄ ν˜„μž¬λŠ” μ‹ κ·œ κ°€μž… 신청을 λ°›μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. μ•„μšΈλŸ¬ κΈ°μ‘΄ μ‚¬μš©μž μ—­μ‹œ 2024λ…„ 8μ›” 1일뢀터 Klip Partners APIλ₯Ό ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

  1. Klip Partners에 κ°€μž… 신청을 ν•©λ‹ˆλ‹€.

  2. Klip μš΄μ˜μ§„κ³Ό 별도 ν˜‘μ˜λ₯Ό 거쳐 κ°€μž… μŠΉμΈμ„ 얻은 ν›„ 으둜 μ‚¬μ΄νŠΈμ— λ‘œκ·ΈμΈν•©λ‹ˆλ‹€.

  3. 둜그인 ν›„, 둜 μΉ΄λ“œ μ΄λ―Έμ§€λ‘œ μ“Έ 이미지 νŒŒμΌμ„ μ—…λ‘œλ“œν•©λ‹ˆλ‹€.

  4. λ˜λŠ” 둜 μ—…λ‘œλ“œν•œ 이미지λ₯Ό μ‚¬μš©ν•΄ μΉ΄λ“œλ₯Ό 직접 λ°œν–‰ν•©λ‹ˆλ‹€.

λ˜ν•œ APIλ₯Ό ν†΅ν•΄μ„œ 계정 및 μΉ΄λ“œλ₯Ό μ‰½κ²Œ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 으둜 λ‘œκ·ΈμΈν•œ ν›„

    • 둜 계정 λΉ„λ°€λ²ˆν˜Έλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.

    • 으둜 ν•€ 번호λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.

    • 둜 μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜κ³  μΉ΄λ“œλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

App2App API

App2App APIλŠ” BApp κ°œλ°œμžκ°€ 별도 κ°€μž… μ ˆμ°¨μ—†μ΄ Klip μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜κ³  ν•΄λ‹Ή μ‚¬μš©μžμ˜ 토큰 및 μΉ΄λ“œλ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•œ APIμž…λ‹ˆλ‹€. λ˜ν•œ 직접 κ°œλ°œν•œ 슀마트 μ»¨νŠΈλž™νŠΈ 싀행을 Klip μ‚¬μš©μžμ—κ²Œ μš”μ²­ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 기본적으둜 Klip 앱이 μ„€μΉ˜λœ λͺ¨λ°”일 ν™˜κ²½μ—μ„œ BApp이 Deep Linkλ₯Ό 톡해 Klip에 μ„œλͺ…을 μš”μ²­ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

App2App APIλŠ” μ•„λž˜μ™€ 같은 μƒν™©μ—μ„œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • BApp μ‚¬μš©μžμ˜ Klip μ§€κ°‘ μ£Όμ†Œ 인증

  • Klip을 ν†΅ν•œ KAIA, 토큰 전솑

  • Klip을 ν†΅ν•œ μΉ΄λ“œ 쑰회 및 전솑

  • Klip을 ν†΅ν•œ Smart Contract μ‹€ν–‰

ν˜„μž¬ 토큰/NFT 전솑 및 Smart Contract μ‹€ν–‰κ³Ό 같은 νŠΈλžœμž­μ…˜ μ„œλͺ… κΈ°λŠ₯은 카이아, 이더리움, 폴리곀 λ„€νŠΈμ›Œν¬μ— λŒ€ν•΄μ„œλ§Œ 싀행이 κ°€λŠ₯ν•˜λ©°, μΆ”ν›„ 지원이 ν™•λŒ€λ  μ˜ˆμ •μž…λ‹ˆλ‹€. λ‹€λ₯Έ λ„€νŠΈμ›Œν¬μ— λŒ€ν•œ Klip 연동이 ν•„μš”ν•˜λ‹€λ©΄ λ‹Ήμž₯은 WalletConnect μ‚¬μš©μ„ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

App2App APIλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μ ˆμ°¨λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

  • νƒ­μ—μ„œ BApp κ°œλ°œν™˜κ²½μ— λ§žλŠ” SDKλ₯Ό λ‹€μš΄λ‘œλ“œ λ°›μ•„ μ„€μΉ˜ν•©λ‹ˆλ‹€. λ˜λŠ” REST APIλ₯Ό μ΄μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • Prepare, Request 및 Result APIλ₯Ό μ΄μš©ν•˜μ—¬ Klip μ‚¬μš©μž 인증 λ˜λŠ” μ„œλͺ… κΈ°λŠ₯을 BApp에 κ΅¬ν˜„ν•©λ‹ˆλ‹€. Prepare μŠ€ν…μ—μ„œ App2App API μš”μ²­μ„ μœ„ν•œ keyλ₯Ό λ°œκΈ‰λ°›κ³ , Request μŠ€ν…μ—μ„œ Klip을 μ‹€ν–‰ν•©λ‹ˆλ‹€. λ§ˆμ§€λ§‰ Result μŠ€ν…μ—μ„œ μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 참고둜 PC λ˜λŠ” 물리적으둜 λ–¨μ–΄μ§„ λͺ¨λ°”일 ν™˜κ²½μ—μ„œλŠ” QR codeλ₯Ό μ΄μš©ν•˜μ—¬ Request μŠ€ν…μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ 탭을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

이 λ¬Έμ„œμ— κ΄€ν•˜μ—¬

Klip 개발자 κ°€μ΄λ“œλŠ” BApp 개발자 λ˜λŠ” νŒŒνŠΈλ„ˆμ‚¬κ°€ Klipμ—μ„œ μ œκ³΅ν•˜λŠ” λ‹€μ–‘ν•œ APIλ₯Ό ν™œμš©ν•˜μ—¬ 토큰(FT)을 μ‘°νšŒν•˜κ³  μ „μ†‘ν•˜κ±°λ‚˜ μΉ΄λ“œ(NFT)λ₯Ό λ°œν–‰, 쑰회, 전솑 λ˜λŠ” μ‚­μ œν•˜λ„λ‘ μ•ˆλ‚΄ν•˜λŠ” λ¬Έμ„œμž…λ‹ˆλ‹€.

νŽ˜μ΄μ§€
μ„€λͺ…

이 λ¬Έμ„œλŠ” API λ˜λŠ” κ°œλ°œμ— κ΄€ν•œ 기본적인 정보λ₯Ό ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 μ •λ³΄λŠ” 변경될 수 있으며 이 λ¬Έμ„œλ₯Ό 따라 κ΅¬ν˜„ν•œ μ†Œν”„νŠΈμ›¨μ–΄λŠ” λ°˜λ“œμ‹œ μ΅œμ’…μ μœΌλ‘œ 운영 체제 μ†Œν”„νŠΈμ›¨μ–΄μ™€ ν•¨κ»˜ ν…ŒμŠ€νŠΈλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

REST API

이 νŽ˜μ΄μ§€λŠ” Klip REST APIλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

Klip REST APIλŠ” Klip Partners API와 App2App API둜 κ΅¬μ„±λ©λ‹ˆλ‹€.

Klip Partners API

Klip Partners APIλŠ” μΉ΄λ“œ(NFT)λ₯Ό λ°œν–‰, 전솑, μ‚­μ œ, κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ κ΅¬ν˜„μ„ μœ„ν•œ REST APIμž…λ‹ˆλ‹€. Klip Partners APIλŠ” μΉ΄λ“œ λ°œν–‰μ„ μœ„ν•œ Klip Partners 계정 둜그인, 계정 관리 κΈ°λŠ₯λΆ€ν„° μΉ΄λ“œλ₯Ό λ°œν–‰, 전솑, κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

Get Card Information By BApp, Get Card Information으둜 λ°œν–‰ν•œ μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

  • Send Card To User λ˜λŠ” Send Card To Klip Member둜 λ°œν–‰ν•œ μΉ΄λ“œλ₯Ό λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ μ „μ†‘ν•©λ‹ˆλ‹€.

  • Introduction

    Klipκ³Ό Klip APIλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    Basics

    인증, νŽ˜μ΄μ§€λ„€μ΄μ…˜, μ—λŸ¬μ½”λ“œ, μš©μ–΄λ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    REST API

    Klip Partners API와 App2App APIλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    App2App SDK

    App2App APIλ₯Ό Javascript, Android, iOS ν™˜κ²½μ—μ„œ μ œκ³΅ν•˜λŠ” SDKλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    Tutorial

    Klip Partners API와 App2App API νŠœν† λ¦¬μ–Όμ„ μ†Œκ°œν•©λ‹ˆλ‹€.

    Change Log

    API λ³€κ²½ 이λ ₯을 μ†Œκ°œν•©λ‹ˆλ‹€.

    Kaia Docs
    λŒ€μ²΄ λΆˆκ°€λŠ₯ν•œ 토큰
    Sign In
    Upload Image
    Mint Card To User
    Mint Card To Klip Member
    Sign In
    Change Password
    Change Pin
    Delete Card
    λ‹€μš΄λ‘œλ“œ
    App2App REST API
    개발자 포럼
    Klip Partners
    App2App API
    App2App API

    App2App APIλŠ” μ—¬λŸ¬λΆ„μ˜ BApp을 Klipκ³Ό μ—°λ™ν•˜λŠ” κΈ°λŠ₯ κ΅¬ν˜„μ„ μœ„ν•œ APIμž…λ‹ˆλ‹€. App2App APIλŠ” BAppμ—μ„œ Klip μ‚¬μš©μž 계정에 μ ‘κ·Όν•˜μ—¬ KAIA, μΉ΄λ“œ, 토큰을 μ „μ†‘ν•˜κ±°λ‚˜ 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” μš”μ²­μ„ μˆ˜ν–‰ν•˜λŠ” REST APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. App2App APIλŠ” SDK(iOS, Android, JavaScript)λ‘œλ„ μ œκ³΅λ©λ‹ˆλ‹€.

    ν•­λͺ©
    μ„€λͺ…

    μΉ΄λ“œλ₯Ό λ°œν–‰, 전솑, κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ 제곡

    BAppκ³Ό Klip을 연동해 μΉ΄λ“œ, 토큰, KAIA 전솑 및 μ»¨νŠΈλž™νŠΈ μ‹€ν–‰ μš”μ²­ κΈ°λŠ₯ 제곡

    ν˜„μž¬ 토큰/NFT 전솑 및 Smart Contract μ‹€ν–‰κ³Ό 같은 νŠΈλžœμž­μ…˜ μ„œλͺ… κΈ°λŠ₯은 카이아, 이더리움, 폴리곀 λ„€νŠΈμ›Œν¬μ— λŒ€ν•΄μ„œλ§Œ 싀행이 κ°€λŠ₯ν•˜λ©°, μΆ”ν›„ 지원이 ν™•λŒ€λ  μ˜ˆμ •μž…λ‹ˆλ‹€. λ‹€λ₯Έ λ„€νŠΈμ›Œν¬μ— λŒ€ν•œ Klip 연동이 ν•„μš”ν•˜λ‹€λ©΄ λ‹Ήμž₯은 WalletConnect μ‚¬μš©μ„ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 개발자 ν¬λŸΌμ„ λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    Klip Partners API
    App2App API

    App2App SDK

    이 νŽ˜μ΄μ§€λŠ” Klip의 SDKλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    App2App SDKλŠ” μ—¬λŸ¬λΆ„μ΄ κ°œλ°œν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ Klip을 더 μ‰½κ²Œ ν™œμš©ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” SDKμž…λ‹ˆλ‹€.

    ν˜„μž¬ Klip은 Kaia 외에도 λ‹€μ–‘ν•œ 체인 기반 μžμ‚°μ˜ 보관/전솑 κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μžˆμœΌλ‚˜, λ³Έ λ¬Έμ„œλ₯Ό 톡해 μ œκ³΅λ˜λŠ” SDKλŠ” Kaia 기반의 μžμ‚°λ§Œ 쑰회/전솑이 κ°€λŠ₯ν•œ 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. Kaia μ™Έμ˜ λ‹€λ₯Έ 체인을 μ§€μ›ν•˜λŠ” κΈ°λŠ₯은 μΆ”ν›„ 제곡될 μ˜ˆμ •μž…λ‹ˆλ‹€.

    ν•­λͺ©
    μ„€λͺ…
    λΉ„κ³ 

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    Web ν™˜κ²½μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ APIλ₯Ό μ†Œκ°œ

    Javascript

    Android SDK

    Android ν™˜κ²½μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ APIλ₯Ό μ†Œκ°œ

    Java

    iOS SDK

    iOS ν™˜κ²½μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ APIλ₯Ό μ†Œκ°œ

    Swift

    Download

    ν”Œλž«νΌλ³„ SDK λ‹€μš΄λ‘œλ“œ

    Sample & SDK

    개발자 포럼
    Javascript SDK

    Basics

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” Klip Partners API와 App2App API의 μ‚¬μš©μž 인증, νŽ˜μ΄μ§€λ„€μ΄μ…˜, 리턴 μ½”λ“œ, μ•½μ–΄ 등을 μ„€λͺ…ν•©λ‹ˆλ‹€.

    Klip Partners API

    Klip Partners μ›Ήμ‚¬μ΄νŠΈλŠ” ν—ˆκ°€λœ μ‚¬μš©μžλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜, Klip Partners μ„œλΉ„μŠ€κ°€ 2024λ…„ 7μ›” 31일자둜 μ’…λ£Œλ˜μ–΄ ν˜„μž¬λŠ” μ‹ κ·œ κ°€μž… 신청을 λ°›μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. μ•„μšΈλŸ¬ κΈ°μ‘΄ μ‚¬μš©μž μ—­μ‹œ 2024λ…„ 8μ›” 1일뢀터 Klip Partners APIλ₯Ό ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

    Authentication

    Klip Partners APIλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” JWT 기반 μ•‘μ„ΈμŠ€ 토큰 λ°œκΈ‰μ΄ ν•„μš”ν•©λ‹ˆλ‹€. Klip Partners νšŒμ› κ°€μž… μ‹œ λ“±λ‘ν•œ 둜그인 ID와 λΉ„λ°€λ²ˆν˜Έλ₯Ό ν†΅ν•΄μ„œ 토큰을 λ°œκΈ‰ 받을 수 μžˆμŠ΅λ‹ˆλ‹€. λ°œκΈ‰λœ 토큰은 24μ‹œκ°„ λ™μ•ˆ μœ νš¨ν•˜λ©° 보톡 만료 전에 μž¬λ°œκΈ‰μ΄ ν•„μš”ν•©λ‹ˆλ‹€. λ°œκΈ‰λœ 토큰은 API μš”μ²­ ν—€λ”μ˜ Authorization ν•„λ“œμ— 토큰을 ν¬ν•¨ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

    Pagination

    보유 μΉ΄λ“œ 내역을 μ‘°νšŒν•  λ•Œ μΉ΄λ“œμ˜ μ–‘μ˜ λ§Žμ€ 경우 ν•œ λ²ˆμ— λ°›μœΌλ©΄ 양이 많기 λ•Œλ¬Έμ— μ—¬λŸ¬λ²ˆ μš”μ²­ν•΄μ•Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œ 쑰회 APIμ—μ„œλŠ” 결과값에 next_cursorλ₯Ό ν•¨κ»˜ μ œκ³΅ν•©λ‹ˆλ‹€. 일반적으둜 μΉ΄λ“œ κ°œμˆ˜κ°€ 100개λ₯Ό μ΄ˆκ³Όν•œλ‹€λ©΄ 1번 호좜 μ‹œ 100개의 결과와 next_cursor 값을 λ°›μŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ μΉ΄λ“œλ₯Ό μ‘°νšŒν•˜λ €λ©΄ next_cursor 값을 query νŒŒλΌλ―Έν„° cursor에 μ „λ‹¬ν•˜μ—¬ APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ•Όν•©λ‹ˆλ‹€.

    μ˜ˆλ“€ λ“€μ–΄ λ³΄μœ ν•˜κ³  μžˆλŠ” μΉ΄λ“œλ₯Ό μ‘°νšŒν•˜λ©΄,

    μ•„λž˜μ™€ 같은 ν˜•νƒœμ˜ 응닡을 λ°›μŠ΅λ‹ˆλ‹€.

    남은 μΉ΄λ“œ λͺ©λ‘μ„ μ‘°νšŒν•˜λ €λ©΄ next_cursor을 μ΄μš©ν•˜μ—¬ μ•„λž˜μ™€ 같이 λ‹€μ‹œ ν˜ΈμΆœν•©λ‹ˆλ‹€. next_cursorκ°€ λΉ„μ–΄μžˆμ„ λ•ŒκΉŒμ§€ 계속 ν˜ΈμΆœν•˜μ—¬ λ³΄μœ ν•œ 전체 μΉ΄λ“œ λͺ©λ‘μ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

    Success Codes/Error Codes

    μš”μ²­μ΄ μ„±κ³΅ν•˜λ©΄ HTTP code 200을 λ°›μŠ΅λ‹ˆλ‹€. λ§Œμ•½ μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ 400, 401, 500의 HTTP codeκ°€ μ „λ‹¬λ©λ‹ˆλ‹€. 400은 μš”μ²­μ΄ 잘λͺ»λœ 경우, 401은 μœ νš¨ν•˜μ§€ μ•Šμ€ μ•‘μ„ΈμŠ€ 토큰을 μ‚¬μš©ν–ˆμ„ λ•Œ λ¦¬ν„΄λ©λ‹ˆλ‹€. 500은 μ„œλ²„μ— μ•Œ 수 μ—†λŠ” μž₯μ• κ°€ λ°œμƒν–ˆμ„ λ•Œ λ¦¬ν„΄λ©λ‹ˆλ‹€. 400 λ˜λŠ” 401 μ—λŸ¬λŠ” ꡬ체적인 μ—λŸ¬ μ½”λ“œμ™€ λ©”μ‹œμ§€κ°€ ν•¨κ»˜ μ „λ‹¬λ©λ‹ˆλ‹€.

    μ—λŸ¬ λ©”μ‹œμ§€λŠ” JSON 포맷으둜 μ „λ‹¬λ˜λ©° ν•„λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    μ—λŸ¬ λ©”μ‹œμ§€ μ’…λ₯˜λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    Status Code
    Error Code
    Error Message

    Glossary

    μš©μ–΄
    μ„€λͺ…

    App2App API

    Authentication

    App2App APIλŠ” 기본적으둜 인증을 ν•„μš”λ‘œ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ BApp λ³„λ‘œ μš”μ²­μ„ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œ request keyλ₯Ό λ°œκΈ‰ν•˜μ—¬ API μš”μ²­ μ‹œ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•΄λ‹Ή keyλ₯Ό ν†΅ν•΄μ„œ Klip μ„œλ²„μ—μ„œ μš”μ²­ λ‚΄μš©μ„ κ΅¬λΆ„ν•˜μ—¬ μ»¨ν…μŠ€νŠΈλ₯Ό μœ μ§€ν•˜μ—¬ μ²˜λ¦¬ν•©λ‹ˆλ‹€. 일반적으둜 request keyλ₯Ό λ°œκΈ‰λ°›κ³  μ‚¬μš©ν•˜λŠ” μ ˆμ°¨λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    • prepare APIλ₯Ό 톡해 인증 λ˜λŠ” μ„œλͺ…ν•  λ‚΄μš©μ„ μ „λ‹¬ν•˜κ³  μ‘λ‹΅μœΌλ‘œ request keyλ₯Ό 전달 λ°›μŠ΅λ‹ˆλ‹€.

    • 전달받은 request keyλ₯Ό μ΄μš©ν•˜μ—¬ Deep Link(μ§€μ •λœ 앱을 μžλ™μœΌλ‘œ μ‹€ν–‰ν•˜κ³  ν™ˆνŽ˜μ΄μ§€κ°€ μ•„λ‹Œ νŠΉμ • νŽ˜μ΄μ§€λ‘œ κ°€κΈ° μœ„ν•œ URI)λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€. Klip 앱이 μ„€μΉ˜λœ κ²½μš°μ—λŠ” Klip이 μ‹€ν–‰λ˜κ³ , μ„€μΉ˜ λ˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” μ‚¬μš©μžκ°€ 앱을 λ‹€μš΄λ‘œλ“œλ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    • 처리 κ²°κ³ΌλŠ” result APIλ₯Ό ν†΅ν•΄μ„œ pollingν•˜κ³  이 λ•Œ Query νŒŒλΌλ―Έν„° request_key에 μ–΄λ–€ μš”μ²­μ— λŒ€ν•œ 처리 κ²°κ³Όλ₯Ό μ–»κ³ μž ν•˜λŠ”μ§€λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.

    Pagination

    보유 μΉ΄λ“œ 내역을 μ‘°νšŒν•  λ•Œ μΉ΄λ“œμ˜ μ–‘μ˜ λ§Žμ€ 경우 ν•œ λ²ˆμ— λ°›μœΌλ©΄ 양이 많기 λ•Œλ¬Έμ— μ—¬λŸ¬λ²ˆ μš”μ²­ν•΄μ•Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œ 쑰회 APIμ—μ„œλŠ” 결과값에 next_cursorλ₯Ό ν•¨κ»˜ μ œκ³΅ν•©λ‹ˆλ‹€. 일반적으둜 μΉ΄λ“œ κ°œμˆ˜κ°€ 100개λ₯Ό μ΄ˆκ³Όν•œλ‹€λ©΄ 1번 호좜 μ‹œ 100개의 결과와 next_cursor 값을 λ°›μŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ μΉ΄λ“œλ₯Ό μ‘°νšŒν•˜λ €λ©΄ next_cursor 값을 query νŒŒλΌλ―Έν„° cursor에 μ „λ‹¬ν•˜μ—¬ APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ•Όν•©λ‹ˆλ‹€.

    μ˜ˆλ“€ λ“€μ–΄ λ³΄μœ ν•˜κ³  μžˆλŠ” μΉ΄λ“œλ₯Ό μ‘°νšŒν•˜λ©΄,

    μ•„λž˜μ™€ 같은 ν˜•νƒœμ˜ 응닡을 λ°›μŠ΅λ‹ˆλ‹€.

    남은 μΉ΄λ“œ λͺ©λ‘μ„ μ‘°νšŒν•˜λ €λ©΄ next_cursor을 μ΄μš©ν•˜μ—¬ μ•„λž˜μ™€ 같이 λ‹€μ‹œ ν˜ΈμΆœν•©λ‹ˆλ‹€. next_cursorκ°€ λΉ„μ–΄μžˆμ„ λ•ŒκΉŒμ§€ 계속 ν˜ΈμΆœν•˜μ—¬ λ³΄μœ ν•œ 전체 μΉ΄λ“œ λͺ©λ‘μ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

    SDK

    App2App API 기본적으둜 REST APIλ₯Ό μ œκ³΅ν•˜μ§€λ§Œ, 각 BApp κ°œλ°œν™˜κ²½μ— 맞게 μ‚¬μš©ν•  수 μžˆλŠ” SDKλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. ν˜„μž¬ μ§€μ›ν•˜λŠ” SDK μ’…λ₯˜λŠ” Android, iOS, λͺ¨λ°”일 μ›Ήμš© JavaScriptμž…λ‹ˆλ‹€. ꡬ체적인 λ‚΄μš©μ€ λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    Success Codes/Error Codes

    μš”μ²­μ΄ μ„±κ³΅ν•˜λ©΄ HTTP code 200을 λ°›μŠ΅λ‹ˆλ‹€. λ§Œμ•½ μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ 400, 500의 HTTP codeκ°€ μ „λ‹¬λ©λ‹ˆλ‹€. 400은 μš”μ²­ 데이터가 잘λͺ»λκ±°λ‚˜ μœ νš¨ν•˜μ§€ μ•Šμ€ request_keyλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ λ¦¬ν„΄λ©λ‹ˆλ‹€. 500은 μ„œλ²„μ— μ•Œ 수 μ—†λŠ” μž₯μ• κ°€ λ°œμƒν–ˆμ„ λ•Œ λ¦¬ν„΄λ©λ‹ˆλ‹€. 400 μ—λŸ¬λŠ” ꡬ체적인 μ—λŸ¬ μ½”λ“œμ™€ λ©”μ‹œμ§€κ°€ ν•¨κ»˜ μ „λ‹¬λ©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ 각 APIλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    μ—λŸ¬ λ©”μ‹œμ§€λŠ” JSON 포맷으둜 μ „λ‹¬λ˜λ©° ν•„λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    이와 λ³„κ°œλ‘œ μΉ΄λ“œ 쑰회 API (/v2/a2a/cards)λŠ” request key와 관련이 μ—†κΈ° λ•Œλ¬Έμ— μ•„λž˜μ™€ 같은 ν˜•νƒœλ‘œ μ—λŸ¬κ°€ μ „λ‹¬λ©λ‹ˆλ‹€.

    μ—λŸ¬ λ©”μ‹œμ§€ μ’…λ₯˜λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    Status Code
    Error Code
    Error Message

    Glossary

    Term
    Description

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    Klip Guide

    이 νŽ˜μ΄μ§€λŠ” Klip의 각쒅 κ°€μ΄λ“œλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    λ³Έ λ¬Έμ„œλŠ” Klip을 ν™œμš©ν•¨μ— μžˆμ–΄ μ°Έκ³ ν•  수 μžˆλŠ” 각쒅 λ””μžμΈ/개발 κ°€μ΄λ“œλ₯Ό μ•ˆλ‚΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    ν•­λͺ©
    μ„€λͺ…
    λΉ„κ³ 

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    WalletConnect

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” WalletConnectλ₯Ό μ΄μš©ν•΄ 클립을 μ—°λ™ν•˜λŠ” 방법에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

    월렛컀λ„₯트(WalletConnect)λŠ” μ§€κ°‘κ³Ό DApp(νƒˆμ€‘μ•™ν™” 블둝체인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜)을 μ—°λ™ν•˜κΈ° μœ„ν•œ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. 월렛컀λ„₯트λ₯Ό μ΄μš©ν•˜λ©΄ κ°œλ³„μ μœΌλ‘œ μ§€κ°‘κ³Ό DApp의 연동을 κ°œλ°œν•  ν•„μš” 없이, ν•˜λ‚˜μ˜ ν”„λ‘œν† μ½œλ‘œ μ§€κ°‘μ˜ μ—°κ²°κ³Ό μ„œλͺ…이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

    클립 μ—­μ‹œ ν˜„μž¬ 월렛컀λ„₯트 v1 및 v2λ₯Ό ν†΅ν•œ λ””μ•± 연동을 μ§€μ›ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ 월렛컀λ„₯트λ₯Ό ν†΅ν•œ μ§€κ°‘ 연동은 μΉ΄μΉ΄μ˜€ν†‘ λ‚΄ 클립이 μ•„λ‹Œ 만 μ§€μ›ν•˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    월렛컀λ„₯νŠΈμ— λŒ€ν•œ 보닀 μžμ„Έν•œ μ†Œκ°œμ™€ 개발 λ¬Έμ„œλŠ” μ•„λž˜λ₯Ό μ°Έκ³  ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    • 월렛컀λ„₯트 ν™ˆνŽ˜μ΄μ§€:

    • 월렛컀λ„₯트 κ°œλ°œλ¬Έμ„œ:

    Design Guidelines

    클립 및 클립 λ“œλ‘­μŠ€μ— κ²Œμ‹œλ₯Ό μœ„ν•œ 각쒅 λ””μžμΈ κ°€μ΄λ“œ

    λ””μžμΈ κ°€μ΄λ“œ

    NFT Metadata Standards

    Klipμ—μ„œ μ‚¬μš©ν•˜λŠ” NFT 메타데이터 속성 ν‘œμ€€

    개발 κ°€μ΄λ“œ

    개발자 포럼

    ν˜„μž¬ 클립은 μ†”λΌλ‚˜ 및 트둠 λ„€νŠΈμ›Œν¬μ— λŒ€ν•œ 월렛컀λ„₯트 연동은 μ§€μ›ν•˜μ§€ μ•Šκ³  있으며, μΆ”ν›„ 지원할 μ˜ˆμ •μž…λ‹ˆλ‹€.

    클립앱
    https://walletconnect.com/
    https://docs.walletconnect.com/2.0

    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

    banned accounts cannot login

    401

    422

    suspended accounts cannot login

    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

    λΈ”λ‘μ²΄μΈμ—μ„œ 가상 μžμ‚°μ„ λ³΄μœ ν•˜λŠ” 주체인 λ™μ‹œμ— λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ νŠΈλžœμž­μ…˜μ„ 블둝체인 λ„€νŠΈμ›Œν¬μ— μ „μ†‘ν•˜λŠ” 주체 (Account)

    νŠΈλžœμž­μ…˜ 전솑

    λΈ”λ‘μ²΄μΈμ˜ μƒνƒœλ₯Ό "λ³€ν™”"μ‹œν‚€λŠ” ν–‰μœ„μ΄λ©° 주둜 블둝체인에 데이터λ₯Ό μ—…λ‘œλ“œ, μˆ˜μ •, μ‚­μ œν•˜κ±°λ‚˜ 블둝체인에 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό 배포, μ‹€ν–‰ν•˜λŠ” ν–‰μœ„λ₯Ό 의미

    EOA

    μ™ΈλΆ€ μ†Œμœ  계정(Externally Owned Account)의 의미둜, Kaia μƒμ—μ„œ KAIA, NFT, FTλ₯Ό μ†Œμœ ν•˜κ³  νŠΈλžœμž­μ…˜μ„ μ „μ†‘ν•˜λŠ” 주체. Kaia의 μ°Έμ‘°

    μ„œλͺ…

    Kaiaμ—μ„œ μ‹€ν–‰λ˜λŠ” νŠΈλžœμž­μ…˜μ΄ μ „μ†‘μž 본인에 μ˜ν•΄ μƒμ„±λ˜μ—ˆλ‹€λŠ” 것을 증λͺ…ν•˜κΈ° μœ„ν•œ 정보λ₯Ό μƒμ„±ν•˜λŠ” ν–‰μœ„

    계정 ν‚€

    μ„œλͺ…에 μ‚¬μš©ν•˜λŠ” κ³„μ •μ˜ ν‚€(AccountKey). 계정 ν‚€λ‘œ νŠΈλžœμž­μ…˜μ— μ„œλͺ…ν•΄μ•Ό μ„œλͺ…이 μ •μƒμ μœΌλ‘œ μ™„λ£Œλ¨.

    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 or { ivalid params detail info }

    400

    6409

    invalid value

    400

    6410

    unknown request type

    400

    6411

    invalid from address

    400

    6412

    insufficient funds

    400

    6414

    { tx revert reason }

    400

    6416

    kas_authorization_key cannot be used with this request

    400

    6417

    the request is not supported with this chain

    400

    6418

    invalid kas_authorization_key

    400

    6500

    address is on the blacklist

    400

    6501

    invalid user status

    500

    500

    internal server error

    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

    Kaia

    Kaia 블둝체인 ν”Œλž«νΌ - κΈ°μ‘΄μ—λŠ” Klaytn λͺ…μΉ­μœΌλ‘œ 운영됨

    슀마트 μ»¨νŠΈλž™νŠΈ

    λΈ”λ‘μ²΄μΈμ˜ νŠΉμ • μ£Όμ†Œ(Contract Address)에 μžˆλŠ” μ½”λ“œ(functions)와 데이터(state)의 λͺ¨μŒ

    KAIA

    Kaia λ‚΄λΆ€μ—μ„œ ν†΅μš©λ˜λŠ” κΈ°λ³Έ 가상 μžμ‚°μœΌλ‘œ Kaia에 νŠΈλžœμž­μ…˜μ„ 전솑할 λ•Œ ν•„μš”ν•œ νŠΈλžœμž­μ…˜ 수수료λ₯Ό μ§€λΆˆν•˜λŠ”λ° μ‚¬μš©. κΈ°μ‘΄μ—λŠ” KLAY λͺ…μΉ­μœΌλ‘œ μ‚¬μš©λ¨

    FT

    λŒ€μ²΄ κ°€λŠ₯ ν‘œμ€€ 토큰(Fungible Token) λ˜λŠ” 토큰, KIP-7 μ°Έμ‘°

    NFT

    λŒ€μ²΄ λΆˆκ°€ ν‘œμ€€ 토큰(Non-fungible Token) λ˜λŠ” μΉ΄λ“œ, KIP-17 μ°Έμ‘°

    μΉ΄λ“œ

    Klipμ—μ„œ μ‚¬μš©λ˜λŠ” λ””μ§€ν„Έ μžμ‚°μœΌλ‘œ NFTλ₯Ό 의미

    400

    400

    bad request

    400

    6000

    request key does not exist

    400

    6001

    request key is expired

    400

    6010

    Deep link

    μ›Ήμ΄λ‚˜ μ•±μ—μ„œ ν™ˆνŽ˜μ΄μ§€κ°€ μ•„λ‹Œ νŠΉμ • νŽ˜μ΄μ§€λ‘œ κ°€κΈ°μœ„ν•œ URI (Query νŒŒλΌλ―Έν„°λ₯Ό 톡해 μš”μ²­ν•  μž‘μ—…μ„ κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©)

    Request key

    App2App API μš”μ²­μ„ κ΅¬λΆ„ν•˜κΈ° μœ„ν•œ λžœλ€ν•˜κ²Œ μƒμ„±λœ a0fee72d-3b1b-43a3-ae0d-e277a1001bef ν˜•νƒœμ˜ λ¬Έμžμ—΄

    SDK νŽ˜μ΄μ§€
    개발자 포럼

    already existing account (wallet)

    계정

    invalid request type

    Tutorial

    이 νŽ˜μ΄μ§€λŠ” Klip API νŠœν† λ¦¬μ–Όμ„ μ†Œκ°œν•©λ‹ˆλ‹€.

    Klip API νŠœν† λ¦¬μ–Όμ€ Klip Partners REST API νŠœν† λ¦¬μ–Όκ³Ό App2App REST API νŠœν† λ¦¬μ–Όλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

    Klip Partners API

    Klip Partners APIλŠ” μΉ΄λ“œ(NFT)λ₯Ό λ°œν–‰, 전솑, μ‚­μ œ, κ΄€λ¦¬ν•˜λŠ” κΈ°λŠ₯ κ΅¬ν˜„μ„ μœ„ν•œ REST APIμž…λ‹ˆλ‹€. Klip Partners API νŠœν† λ¦¬μ–Όμ€ Klip Partners κ°€μž…κ³Ό 둜그인, μΉ΄λ“œ λ°œν–‰, μΉ΄λ“œ 정보 쑰회, μΉ΄λ“œ 전솑, μΉ΄λ“œμ™€ 계정 정보λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방법을 μƒμ„Έν•˜κ²Œ μ•ˆλ‚΄ν•©λ‹ˆλ‹€.

    App2App API

    App2App APIλŠ” μ—¬λŸ¬λΆ„μ˜ "BApp"을 "Klip"κ³Ό μ—°λ™ν•˜λŠ” κΈ°λŠ₯ κ΅¬ν˜„μ„ μœ„ν•œ APIμž…λ‹ˆλ‹€. App2App API νŠœν† λ¦¬μ–Όμ€ BApp이 Klip에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ ν™˜κ²½ μ„€μ •λΆ€ν„° BAppμ—μ„œ Klip에 μš”μ²­μ„ λ³΄λƒ„μœΌλ‘œμ¨ μ‚¬μš©μž 인증(auth), KAIA(=KLAY) 전솑(send_klay), 토큰 전솑(send_token), μΉ΄λ“œ 전솑(send_card), μ»¨νŠΈλž™νŠΈ μ‹€ν–‰(execute_contract) μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 과정을 μƒμ„Έν•˜κ²Œ μ•ˆλ‚΄ν•©λ‹ˆλ‹€. App2App API νŠœν† λ¦¬μ–Όμ€ REST APIλ₯Ό κΈ°μ€€μœΌλ‘œ μ•ˆλ‚΄ν•©λ‹ˆλ‹€.

    ν•­λͺ©
    μ„€λͺ…

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    Download

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” App2App SDK λ‹€μš΄λ‘œλ“œ 링크λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. JavaScriptλŠ” npm을 ν†΅ν•΄μ„œ μ„€μΉ˜ν•  수 있으며, Android 및 iOSλŠ” zip μ••μΆ• νŒŒμΌμ„ μ œκ³΅ν•©λ‹ˆλ‹€.

    JavaScript

    ν”„λ‘œκ·Έλž¨
    버전
    배포일
    //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"
    }
    //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"
    {
      "code": number,
      "err": string
    }
    //Get card list
    curl "https://api.klipwallet.com/v2/a2a/cards?chain=klaytn&sca=SCA&eoa=EOA" \
    -H "Content-Type: application/json"
    {
      "name": "KLIP",
      "symbol_img": "image url",
      "cards": [...],
      "next_cursor": "N2r8KY...XOadEG"
    }
    //Get card list
    curl "https://api.klipwallet.com/v2/a2a/cards?chain=klaytn&sca=SCA&eoa=EOA&cursor=N2r8KY...XOadEG" \
    -H "Content-Type: application/json"
    {
      "request_key": "random key",
      "expiration_time": unix timestamp,
      "status": "error",
      "error": {
        "code": int,
        "err": "error message"
      }
    }
    {
      "code": number,
      "err": string
    }

    Klip Partners API

    μΉ΄λ“œλ₯Ό λ°œν–‰, 전솑, κ΄€λ¦¬ν•˜λŠ” 방법

    App2App API

    BAppκ³Ό Klip을 연동해 μΉ΄λ“œ, 토큰, KAIA(=KLAY) 전솑 및 μ»¨νŠΈλž™νŠΈ 싀행을 μš”μ²­ν•˜λŠ” 방법

    개발자 포럼
    계정

    v2.3.3

    2025.02.11

    v2.3.3

    2025.02.11

    Android

    ν”„λ‘œκ·Έλž¨
    버전
    배포일
    μ°Έκ³ 

    v2.3.0

    2024.11.18

    iOS

    ν”„λ‘œκ·Έλž¨
    버전
    배포일
    μ°Έκ³ 

    v2.3.0

    2024.11.18

    • Klip SDKλ₯Ό μ‚¬μš©ν•¨μ— μžˆμ–΄ μ‚¬μš©μžλŠ” (μ£Ό)κ·ΈλΌμš΄λ“œμ—‘μŠ€λ₯Ό μ‚¬μΉ­ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.

    • Klip SDK μ‚¬μš©μ— 따라 λ°œμƒν•˜λŠ” λͺ¨λ“  μ±…μž„μ€ μ „μ μœΌλ‘œ μ‚¬μš©μžμ—κ²Œ 있으며, (μ£Ό)κ·ΈλΌμš΄λ“œμ—‘μŠ€λŠ” μ‚¬μš©μž λ˜λŠ” 제3μžμ— λŒ€ν•΄ μ–΄λ– ν•œ μ±…μž„λ„ μ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    • μ‚¬μš©μžλŠ” Klip SDKλ₯Ό 상업적 μš©λ„λ‘œ νŒλ§€ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

    • Klip SDK μ‚¬μš©μžκ°€ κ³Όλ„ν•œ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ λ°œμƒμ‹œν‚€λŠ” μ‹œλ„ν•˜λŠ” λ“± λΆˆλ²• ν˜Ήμ€ 비정상적인 λ°©μ‹μœΌλ‘œ SDKλ₯Ό μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•˜λŠ” 경우, 사전 고지없이 Klip SDK 및 Klip API μ‚¬μš©μ΄ 차단될 수 μžˆμŠ΅λ‹ˆλ‹€.

    μ˜€ν”ˆμ†ŒμŠ€ μ‚¬μš© κ³ μ§€

    • Android SDK: μ˜€ν”ˆμ†ŒμŠ€ 라이브러리 μ‚¬μš©μ— λŒ€ν•œ κ³ μ§€λ¬Έ

    • iOS SDK: μ˜€ν”ˆμ†ŒμŠ€ 라이브러리 μ‚¬μš©μ— λŒ€ν•œ κ³ μ§€λ¬Έ

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 개발자 ν¬λŸΌμ„ λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    npm package

    v2.3.3

    2025.02.11

    Design Guidelines

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” 클립과 클립 λ“œλ‘­μŠ€ λ””μžμΈ 에셋 μ œμž‘ μ‹œ ν•„μš”ν•œ λ””μžμΈ κ°€μ΄λ“œ λ¬Έμ„œ 및 ν…œν”Œλ¦Ώμ˜ λ‹€μš΄λ‘œλ“œ 링크λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

    λΈŒλžœλ“œ λ””μžμΈ κ°€μ΄λ“œ

    κ·ΈλΌμš΄λ“œμ—‘μŠ€ μ œν’ˆμ˜ λΈŒλžœλ“œ 정체성을 μœ μ§€ν•˜κΈ° μœ„ν•œ μ‚¬μš© κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    1. κ·ΈλΌμš΄λ“œμ—‘μŠ€

    2. 클립

    3. 클립 λ“œλ‘­μŠ€

    4. κ·Έλ¦¬λ“œ

    클립

    1. λ°°λ„ˆ λ””μžμΈ κ°€μ΄λ“œ

    클립에 ν‘œμ‹œλ˜λŠ” λ°°λ„ˆ μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 1-1. (μΉ΄μΉ΄μ˜€ν†‘ λ‚΄ 클립) ν™ˆ ν•˜λ‹¨ λ¦¬μŠ€νŠΈν˜• λ°°λ„ˆ κ°€μ΄λ“œ

      • μΉ΄μΉ΄μ˜€ν†‘ λ‚΄ 클립 ν™ˆ ν™”λ©΄ ν•˜λ‹¨μ— λ…ΈμΆœλ˜λŠ” λ°°λ„ˆ μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 1-2. ν™ˆ ν•˜λ‹¨ λžœλ€ν˜• λ°°λ„ˆ κ°€μ΄λ“œ

      • 클립 ν™ˆ ν™”λ©΄ μ΅œν•˜λ‹¨μ— λ…ΈμΆœλ˜λŠ” λ°°λ„ˆ μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 1-3. ν™ˆ ν”„λ‘œλͺ¨μ…˜ νŒμ—… λ°°λ„ˆ κ°€μ΄λ“œ

      • 클립 ν™ˆ ν™”λ©΄ μ ‘κ·Ό μ‹œ νŒμ—… ν˜•νƒœλ‘œ λ…ΈμΆœλ˜λŠ” λ°°λ„ˆ μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 1-4. ν™ˆ 상단 클립 λ“œλ‘­μŠ€ μž‘ν’ˆ λ°°λ„ˆ κ°€μ΄λ“œ

      • 클립 ν™ˆ 화면에 λ…ΈμΆœλ˜λŠ” 클립 λ“œλ‘­μŠ€ λ°°λ„ˆ μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    2. 이미지 μ œμž‘ κ°€μ΄λ“œ

    클립에 μ„œλΉ„μŠ€, 토큰, NFT 등둝 μ‹œ ν•„μš”ν•œ 이미지 μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 2-1. μ„œλΉ„μŠ€ 정보 & 이미지 에셋 κ°€μ΄λ“œ

      • 클립 μ„œλΉ„μŠ€ 등둝 μ‹œ ν•„μš”ν•œ μ•± μ•„μ΄μ½˜ 및 μŠ€ν¬λ¦°μƒ· κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 2-2. 토큰 & NFT κ°€μ΄λ“œ

    3. 클립 둜그인 λ²„νŠΌ κ°€μ΄λ“œ

    app2app을 톡해 클립을 μ—°λ™ν•˜λŠ” 경우 μ°Έκ³ ν•  수 μžˆλŠ” λ””μžμΈ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 클립 둜그인 λ²„νŠΌ κ°€μ΄λ“œ

      • 클립 둜그인 κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ ν•„μš”ν•œ λ²„νŠΌ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    클립 λ“œλ‘­μŠ€

    1. μž‘ν’ˆ μ œμž‘ κ°€μ΄λ“œ

    클립 λ“œλ‘­μŠ€ μž‘ν’ˆ 및 크리에이터 μ΄λ―Έμ§€μ˜ κΈ°μˆ μ‚¬μ–‘κ³Ό μž‘ν’ˆ 정보λ₯Ό μ°Έκ³ ν•  수 μžˆλŠ” κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    2. λ°°λ„ˆ 및 μ½˜ν…μΈ  λ””μžμΈ κ°€μ΄λ“œ

    클립 λ“œλ‘­μŠ€ λ‚΄ 홍보λ₯Ό μœ„ν•œ λ°°λ„ˆ 및 μ½˜ν…μΈ  μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • 2-1. 톡합 ν™ˆ λ°°λ„ˆ κ°€μ΄λ“œ

      • Klip Drops ν™ˆνŽ˜μ΄μ§€ 상단에 λ…ΈμΆœλ˜λŠ” λ°°λ„ˆ μ œμž‘ ν…œν”Œλ¦Ώ νŒŒμΌμž…λ‹ˆλ‹€.

    • 2-2. μž‘κ°€ μ†Œκ°œ μ½˜ν…μΈ  κ°€μ΄λ“œ

      • Klip Drops ν™ˆνŽ˜μ΄μ§€ 상단 λ°°λ„ˆ 클릭 μ‹œ μƒˆ νƒ­μœΌλ‘œ λ…ΈμΆœλ˜λŠ” μž‘κ°€ μ†Œκ°œ μ½˜ν…μΈ  μ œμž‘ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    3. λ“œλ‘­μŠ€ νŒŒνŠΈλ„ˆμŠ€ 툴 κ°€μ΄λ“œ

    λ“œλ‘­μŠ€ νŒŒνŠΈλ„ˆμŠ€ 툴 (DPT) 이용 방법과 μ‹ κ·œ νŒŒνŠΈλ„ˆμ˜ ν•„μˆ˜ 섀정을 μœ„ν•œ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    이 λ¬Έμ„œ ν˜Ήμ€ 클립에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    klipSDK-2.3.3.min.js
    Sample App
    Android SDK Full Source & Samples
    레퍼런슀
    iOS SDK Full Source & Samples
    레퍼런슀

    클립에 λ…ΈμΆœλ˜λŠ” 토큰 및 NFT 등둝 μ‹œ ν•„μš”ν•œ 정보λ₯Ό μ°Έκ³ ν•  수 μžˆλŠ” κ°€μ΄λ“œμž…λ‹ˆλ‹€.

  • 토큰 μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ λ‹€μš΄λ‘œλ“œ (.pdf)

  • NFT μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ λ‹€μš΄λ‘œλ“œ (.pdf)

  • 2-3. NFT ᄏα…₯ᆯ렉션 등록 ᄀᅑ아드

    • 클립에 λ…ΈμΆœλ˜λŠ” NFT μ»¬λ ‰μ…˜ 등둝 μ‹œ ν•„μš”ν•œ 정보λ₯Ό μ°Έκ³ ν•  수 μžˆλŠ” κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    • μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ λ‹€μš΄λ‘œλ“œ (.pdf)

  • κ·ΈλΌμš΄λ“œμ—‘μŠ€ λΈŒλžœλ“œ κ°€μ΄λ“œ λ¬Έμ„œ & 둜고/심볼 파일 λ‹€μš΄λ‘œλ“œ (.zip)
    클립 λΈŒλžœλ“œ κ°€μ΄λ“œ λ¬Έμ„œ & 둜고/심볼 파일 λ‹€μš΄λ‘œλ“œ (.zip)
    클립 λ“œλ‘­μŠ€ 둜고 파일 λ‹€μš΄λ‘œλ“œ (.ai)
    κ·Έλ¦¬λ“œ 둜고 및 κ°€μ΄λ“œ λ‹€μš΄λ‘œλ“œ (.ai)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ & ν…œν”Œλ¦Ώ 파일 λ‹€μš΄λ‘œλ“œ (.zip)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ & ν…œν”Œλ¦Ώ 파일 λ‹€μš΄λ‘œλ“œ (.zip)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ & ν…œν”Œλ¦Ώ 파일 λ‹€μš΄λ‘œλ“œ (.zip)
    ν™ˆ λ°°λ„ˆ ν…œν”Œλ¦Ώ 파일 Type2 λ‹€μš΄λ‘œλ“œ (.psd)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ & ν…œν”Œλ¦Ώ 파일 λ‹€μš΄λ‘œλ“œ (.zip)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ 링크 (Figma)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ & ν…œν”Œλ¦Ώ 파일 λ‹€μš΄λ‘œλ“œ (.zip)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ λ‹€μš΄λ‘œλ“œ (.pdf)
    ν…œν”Œλ¦Ώ 파일 λ‹€μš΄λ‘œλ“œ (.psd)
    μ œμž‘ κ°€μ΄λ“œ λ¬Έμ„œ λ‹€μš΄λ‘œλ“œ (.jpg)
    DPT λΉ λ₯Έ κ°€μ΄λ“œ λ‹€μš΄λ‘œλ“œ (.pdf)
    DPT 이용 κ°€μ΄λ“œ λ‹€μš΄λ‘œλ“œ (.pdf)
    개발자 포럼
    μΉ΄μΉ΄μ˜€ν†‘ 클립 - ν™ˆ ν•˜λ‹¨ λ¦¬μŠ€νŠΈν˜• λ°°λ„ˆ μ˜ˆμ‹œ
    ν™ˆ ν•˜λ‹¨ λžœλ€ν˜• λ°°λ„ˆ μ˜ˆμ‹œ
    ν™ˆ ν”„λ‘œλͺ¨μ…˜ νŒμ—… λ°°λ„ˆ μ˜ˆμ‹œ
    ν™ˆ 상단 클립 λ“œλ‘­μŠ€ μž‘ν’ˆ λ°°λ„ˆ μ˜ˆμ‹œ
    클립 λ“œλ‘­μŠ€ 톡합 ν™ˆ λ°°λ„ˆ μ˜ˆμ‹œ

    Change Log

    이 νŽ˜μ΄μ§€λŠ” Klip Docs μ—…λ°μ΄νŠΈ 기둝을 μ œκ³΅ν•©λ‹ˆλ‹€.

    2025/09/15

    • 클립의 XRPL (λ¦¬ν”Œ) λ„€νŠΈμ›Œν¬ 지원에 따라 μ§€κ°‘ μ—°λ™μ˜ μ£Όμ†Œ 응닡값에 XRPL μ£Όμ†Œ 포함

    2025/08/18

    • 클립 지원 λ„€νŠΈμ›Œν¬ ν™•μž₯에 λ”°λ₯Έ μ§€κ°‘ μ—°λ™μ˜ μ£Όμ†Œ 응닡값 λ³€κ²½

    • μ„œλͺ… μš”μ²­μ— eth_signTypedData_v4 지원

    2025/02/11

    • iOS SPM을 μ‚¬μš©ν•˜μ—¬ SDKλ₯Ό μ μš©ν•˜λŠ” 방법 μΆ”κ°€

    • OS별 request ν•¨μˆ˜ 호좜 이슈 μˆ˜μ •μ„ μœ„ν•œ JavaScript SDK 2.3.3 배포

    2024/11/18

    • 클립 호좜 방식 변경에 λ”°λ₯Έ App2App REST API Request λ‚΄μš© μˆ˜μ •

    • 클립 호좜 방식 변경에 λ”°λ₯Έ JavaScript/Android/iOS SDK μƒˆ 버전 배포 및 λ‚΄μš© μˆ˜μ •

    2024/10/31

    • Klaytn -> Kaia 변경에 λ”°λ₯Έ λ‚΄μš© μˆ˜μ • (λ¬Έμ„œλ§Œ λ³€κ²½λœ κ²ƒμœΌλ‘œ, κΈ°λŠ₯ μŠ€νŽ™μ€ ν˜Έν™˜μ„±μ΄ 보μž₯됨)

    • Kaia의 μƒˆλ‘œμš΄ μ„œλͺ… ν‘œμ€€μ— 따라, App2App μš”μ²­ νƒ€μž…μ— sign_message_eip191 μΆ”κ°€

    2024/08/01

    • Klip Partners μ„œλΉ„μŠ€ μ’…λ£Œμ— λ”°λ₯Έ λ‚΄μš© μˆ˜μ •

    2024/03/18

    • 에 max_valueλ₯Ό μ‚¬μš©ν•˜λŠ” attributes에 λŒ€ν•œ μ„€λͺ… 및 μ˜ˆμ‹œ μΆ”κ°€

    2023/09/05

    • λ₯Ό ν™•μΈν•˜κ³  λ‹€μš΄λ‘œλ“œν•  수 μžˆλŠ” νŽ˜μ΄μ§€ μΆ”κ°€

    • 기쑴의 λ¬Έμ„œ μœ„μΉ˜λ₯Ό Tutorialμ—μ„œ λ°‘μœΌλ‘œ 이동

    2023/08/03

    • 월렛컀λ„₯트 (WalletConnect) 지원

    2023/06/05

    • Klip 둜그인 λ²„νŠΌ κ°€μ΄λ“œμ— Klip 2.0 둜고 반영

    2023/05/30

    • App2App Polygon 체인 지원

    2023/04/11

    • Card Minting API μ„Ήμ…˜ 이름을 μ’€ 더 μ§κ΄€μ μ΄κ²Œ Klip Partners API둜 λ³€κ²½

    2023/04/05

    • App2App JavaScript SDK 2.2.1 배포

    • App2App Deeplink μš”μ²­ scheme을 인톑클립 μš°μ„  ν˜ΈμΆœν•˜λ„λ‘ λ³€κ²½

    2023/03/10

    • App2App Prepare μš”μ²­ μ‹œ κ°€μŠ€μΆ”μ •λŸ‰μ„ 계산할 수 μžˆλŠ” 경우 ν•¨κ»˜ λ°˜ν™˜

    2023/01/27

    • App2App Ethereum 체인 지원

    • App2App νŠΈλžœμž­μ…˜ 수수료 λŒ€λ‚© κ°€μ΄λ“œ μΆ”κ°€

    • Contract execute μ—…λ°μ΄νŠΈ

      • param type 였λ₯˜μ— λŒ€ν•œ 상세 정보 λ°˜ν™˜

    2022/12/19

    • Klip μžμ‚° 지원 μ •μ±… λ³€κ²½κ³Ό κ΄€λ ¨λœ 주의 사항 / μ•ˆλ‚΄ μΆ”κ°€

    2022/11/15

    • Klipμ—μ„œ μ§€μ›ν•˜λŠ” 메타데이터 속성 ν‘œμ€€ μ•ˆλ‚΄ νŽ˜μ΄μ§€ μΆ”κ°€

    2022/11/02

    • Contract execute μ—…λ°μ΄νŠΈ

      • tuple 지원

      • encoded_function_call 지원

    • Sign message μ—…λ°μ΄νŠΈ

    2022/09/15

    • Klip μ•± 지원을 μœ„ν•œ SDK μ—…λ°μ΄νŠΈ (v2.2.0)

    • App2App sign message 예제 μ½”λ“œ μΆ”κ°€

    2022/08/18

    • Klip μ•± 지원을 μœ„ν•œ SDK μ—…λ°μ΄νŠΈ (v2.1.0)

    2022/08/17

    • App2App sign message κΈ°λŠ₯ μ„€λͺ… μΆ”κ°€

    2022/03/08

    • 개발자 포럼 URL λ³€κ²½

    2021/09/30

    • App2App API의 Response status에 canceled μΆ”κ°€

    2021/07/28

    • animation_url ν•„λ“œ μ œμ•½ 사항 μ—…λ°μ΄νŠΈ

    2021/07/13

    • App2App 인증 API μ‚¬μš© μ‹œ μ£Όμ˜μ‚¬ν•­ 문ꡬ μΆ”κ°€

    2021/07/07

    • App2App SDK μ˜€ν”ˆμ†ŒμŠ€ κ³ μ§€λ¬Έμ—μ„œ 사λͺ… λ³€κ²½

      λ³€κ²½ μ „
      λ³€κ²½ ν›„

    2021/06/28

    • App2App 인증 μš”μ²­ λ²„νŠΌ 문ꡬ κ΄€λ ¨ κ°€μ΄λ“œ μΆ”κ°€

    2021/05/10

    • μ‹ κ·œ API μΆ”κ°€

      • μž„μ˜μ˜ NFT resource νŒŒμΌμ„ μ—…λ‘œλ“œν•  수 μžˆλŠ” APIλ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

    • Card Minting API Request에 ν•„λ“œ μΆ”κ°€

      • animation_url

    2021/03/08

    • 사λͺ… λ³€κ²½ 및 이메일 μ£Όμ†Œ μ—…λ°μ΄νŠΈ

      λ³€κ²½ μ „
      λ³€κ²½ ν›„

    2021/02/03

    • νŠΉμ • Klip νšŒμ›μ—κ²Œ λ°œν–‰ 및 μ „μ†‘ν•˜κΈ° API 응닡 ν•„λ“œμ— νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°€ μΆ”κ°€λμŠ΅λ‹ˆλ‹€.

    • Card Minting API의 Request에 ν•„λ“œ μΆ”κ°€

      • secure ν•„λ“œμ— μΉ΄λ“œ μ†Œμœ μžλ§Œ λ³Ό 수 μžˆλŠ” 속성을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

      • status_url

    2021/01/12

    • μ‹ κ·œ API μΆ”κ°€

      • νŠΈλžœμž­μ…˜ ν•΄μ‹œλ‘œ 처리 κ²°κ³Όλ₯Ό 확인할 수 μžˆλŠ” APIκ°€ μΆ”κ°€λμŠ΅λ‹ˆλ‹€.

      • 이번 달 ν˜„μž¬κΉŒμ§€ λ°œν–‰ν•œ μΉ΄λ“œ 개수λ₯Ό μ‘°νšŒν•  수 μžˆλŠ” APIκ°€ μΆ”κ°€λμŠ΅λ‹ˆλ‹€.

    • Introduction λ‚΄ 링크 였λ₯˜ μˆ˜μ •

    2020/11/30

    • QR Code 기반 App2App 처리 κΈ°λŠ₯ μ‹ κ·œ μΆ”κ°€

      • PC λ˜λŠ” 물리적으둜 λ–¨μ–΄μ§„ ν™˜κ²½μ—μ„œ App2App κΈ°λŠ₯을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

      • λͺ¨λ°”일 카메라 μ•± λ˜λŠ” Klipμ—μ„œ QR Codeλ₯Ό μΈμ‹ν•˜λ©΄ App2App μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

    • μ—μŠ€ν¬λ‘œ μΉ΄λ“œ 전솑 API μ‹ κ·œ μΆ”κ°€

    2020/10/26

    • App2App API μΆ”κ°€

      • μ™ΈλΆ€ μ„œλΉ„μŠ€μ—μ„œ Klip μ‚¬μš©μž μ£Όμ†Œλ₯Ό κ°€μ Έμ˜€λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

      • μ™ΈλΆ€ μ„œλΉ„μŠ€μ—μ„œ Klip을 μ΄μš©ν•΄ KLAY 및 λŒ€μ²΄ κ°€λŠ₯ν•œ 토큰(FT), μΉ΄λ“œ(NFT)λ₯Ό μ „μ†‘ν•˜κ±°λ‚˜ 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

    2020/08/26

    • Mint Card To User, Mint Card To Klip Member API둜 μΉ΄λ“œ λ°œν–‰ μ‹œ μΉ΄λ“œ 메타데이터에 μž…λ ₯ν•˜λŠ” Optional ν•„λ“œ μΆ”κ°€

      • group_name

      • group_icon

    2020/07/31

    • Mint Card APIλ₯Ό Mint Card To User API둜 이름 λ³€κ²½

      • EOAλ₯Ό κ°€μ§„ μ‚¬μš©μž(Klip νšŒμ› λ˜λŠ” λΉ„νšŒμ›)μ—κ²Œ μΉ΄λ“œλ₯Ό λ°œν–‰ν•©λ‹ˆλ‹€.

      • λ°œν–‰ μ‹œ μ‚¬μš©μž EOAλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    • Mint Card To Klip Member API μ‹ κ·œ μΆ”κ°€

    2020/07/16

    • Get Card Information By BApp API Responseμ—μ„œ order_no λ³€μˆ˜λͺ…을 nft_order_no둜 λ³€κ²½

    2020/06/16

    • Send Card API의 Request Body Parameterμ—μ„œ to_klip_id μ‚¬μš© 쀑지

    2020/05/28

    • κ°€ Klip에 λ‘œκ·ΈμΈν•˜κ³  μΉ΄λ“œ(NFT)λ₯Ό λ°œν–‰/전솑/μ‘°νšŒν•  수 μžˆλ„λ‘ Klip API 개발

    NFT Metadata Standards

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” Klipμ—μ„œ μ‚¬μš©ν•˜λŠ” NFT 메타데이터 μ†μ„±μ˜ ν‘œμ€€μ„ μ„€λͺ…ν•©λ‹ˆλ‹€. 이 ν‘œμ€€μ— μ •μ˜λ˜μ§€ μ•Šμ€ 속성과 ν˜•μ‹μ˜ 경우 Klip λ‚΄μ—μ„œ μ •μƒμ μœΌλ‘œ λ…ΈμΆœλ˜μ§€ μ•Šμ„ 수 μžˆμœΌλ‹ˆ μ°Έκ³  λ°”λžλ‹ˆλ‹€.

    메타데이터 속성

    Klipμ—μ„œ μ§€μ›ν•˜λŠ” μ†μ„±κ°’μ˜ 이름과 μ„€λͺ…은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. OpenSeaμ—μ„œ μ‚¬μš©ν•˜λŠ” 속성값과 일뢀 λͺ…μΉ­ 차이가 μžˆμœΌλ‹ˆ 유의 λ°”λžλ‹ˆλ‹€.

    이름
    νƒ€μž…
    μ„€λͺ…

    name*

    token uri에 data:application/json 으둜 μ‹œμž‘ν•˜λŠ” data uriλ₯Ό μ§€μ •ν•˜λŠ” 경우, 일뢀 ν™”λ©΄μ—μ„œ μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜μ§€ μ•Šμ„ κ°€λŠ₯성이 있고 1024자 이상은 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ°€λŠ₯ν•˜λ©΄ http λ˜λŠ” https URL을 μ‚¬μš©ν•˜λŠ” 것을 κΆŒν•΄λ“œλ¦½λ‹ˆλ‹€.

    ꢌμž₯ 이미지 및 μ˜μƒ 규격

    Klip에 λ…ΈμΆœλ˜λŠ” NFT 이미지와 μ˜μƒμ€ 각각 ꢌμž₯ 규격과 파일 ν˜•μ‹μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€. μ•„λž˜ 기쀀을 λ”°λ₯΄μ§€ μ•ŠλŠ” 경우 NFT 이미지 λ˜λŠ” μ˜μƒμ΄ μ •μƒμ μœΌλ‘œ ν‘œμ‹œ/μž¬μƒλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    • 이미지 규격

      • μ΅œμ†Œ 크기: 1024px x 1024px 이상

      • μ΅œλŒ€ 크기: 23170px x 23170px μ΄ν•˜

      • μš©λŸ‰: 5MB μ΄ν•˜

    ꡬ쑰와 μ˜ˆμ‹œ

    Klipμ—μ„œ μ§€μ›ν•˜λŠ” 속성에 맞좰 μž‘μ„±λœ λ©”νƒ€λ°μ΄ν„°μ˜ μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    μ—¬κΈ°μ—μ„œ status_url에 μ§€μ •λœ URL μ£Όμ†Œλ₯Ό ν†΅ν•œ 응닡값 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    μœ„μ˜ μ˜ˆμ‹œ λ©”νƒ€λ°μ΄ν„°λ‘œ λ°œν–‰ν•œ NFTκ°€ Klipμ—μ„œ μ–΄λ–»κ²Œ λ³΄μ΄λŠ”μ§€ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

    λ¨Όμ € 메타데이터에 ν¬ν•¨λœ image 파일이 NFT λŒ€ν‘œ μ΄λ―Έμ§€λ‘œ λ‚˜νƒ€λ‚˜κ³ , κ·Έ μ•„λž˜λ‘œ nameκ³Ό description이 ν‘œμ‹œλ©λ‹ˆλ‹€. animation_url을 μΆ”κ°€ν•˜μ—¬ λ™μ˜μƒμ΄ μžˆλŠ” κ²½μš°μ—λ„ imageλŠ” ν•„μˆ˜ κ°’μœΌλ‘œ, 여기에 μ§€μ •λœ 이미지가 λŒ€ν‘œ μ΄λ―Έμ§€λ‘œ ν‘œμ‹œλ˜κ³  λ™μ˜μƒμ€ λŒ€ν‘œ 이미지λ₯Ό 클릭해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. name μ•„λž˜μ— group_iconκ³Ό group_name 정보가 ν‘œμ‹œλ©λ‹ˆλ‹€. 그룹이 μ§€μ •λ˜λ©΄ μ½œλ ‰μ…˜ λ‚΄μ˜ NFT λͺ©λ‘μ—μ„œ 상단에 ν•„ν„° 메뉴가 ν‘œμ‹œλ˜μ–΄ λΉ λ₯Έ λΆ„λ₯˜ 및 검색이 κ°€λŠ₯ν•©λ‹ˆλ‹€. description μ•„λž˜μ— hashtagsλ₯Ό 톡해 μ§€μ •ν•œ ν•΄μ‹œνƒœκ·Έ 값듀이 #κ°€ μžλ™μœΌλ‘œ λΆ™μ–΄ ν‘œμ‹œλ©λ‹ˆλ‹€.

    status_url둜 동적 정보가 μ§€μ •λœ 경우, κ·Έ ν•˜λ‹¨μ— μƒνƒœκ°’κ³Ό 속성을 μ‹€μ‹œκ°„μœΌλ‘œ 가져와 NFT 정보에 λ³΄μ—¬μ€λ‹ˆλ‹€.

    κ·Έ ν•˜λ‹¨μœΌλ‘œ attributesλ₯Ό 톡해 μ§€μ •ν•œ μ„ΈλΆ€ 속성값이 trait_type - value 쌍으둜(max_valueκ°€ ν•¨κ»˜ μ§€μ •λœ 경우 μ΅œλŒ€κ°’μ΄ ν•¨κ»˜ ν‘œμ‹œ), external_linkλ₯Ό 톡해 μ§€μ •ν•œ URL이 클릭 κ°€λŠ₯ν•œ κ΄€λ ¨ 링크둜, custom_linksλ₯Ό 톡해 μ§€μ •ν•œ λ ˆμ΄λΈ”λͺ…(display_name)κ³Ό URL(value)값이 각각 λ²„νŠΌ 링크둜 ν‘œμ‹œλ©λ‹ˆλ‹€. μ™ΈλΆ€ λ§ν¬λŠ” 클릭 μ‹œ, μ™ΈλΆ€ λΈŒλΌμš°μ €λ₯Ό 톡해 μ•± μ „ν™˜λ˜μ–΄ μ—΄λ¦¬κ²Œ λ©λ‹ˆλ‹€. μ•„μšΈλŸ¬ λ³Έ NFTλŠ” sendable이 true둜 μ§€μ •λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— "보내기" λ²„νŠΌμ΄ ν™”λ©΄ 였λ₯Έμͺ½ μƒλ‹¨μ˜ 메뉴 μ•„μ΄μ½˜ λ²„νŠΌμ„ 톡해 μ œκ³΅λ©λ‹ˆλ‹€. κ·Έ μ΄ν•˜λ‘œ ν‘œμ‹œλ˜λŠ” λ‚΄μš©λ“€μ€ NFT의 μˆ˜μ‹  λ‚΄μ—­κ³Ό μ½œλ ‰μ…˜μ— λŒ€ν•œ μ •λ³΄λ“€λ‘œ, 메타데이터와 μ§μ ‘μ μœΌλ‘œ κ΄€λ ¨ μžˆλŠ” λ‚΄μš©μ€ μ•„λ‹™λ‹ˆλ‹€.

    μ΄λ ‡κ²Œ μ™ΈλΆ€μ—μ„œ Klip의 ν‘œμ€€μ— 맞좰 κ΅¬μ„±λœ 메타데이터가 Klip UI 상 μ–΄λ–»κ²Œ ν‘œμ‹œλ˜λŠ”μ§€ μ•Œμ•„λ³΄μ•˜μŠ΅λ‹ˆλ‹€. λ³Έ μŠ€ν¬λ¦°μƒ·μ€ ν™˜κ²½μ— 따라, λ˜λŠ” μΆ”ν›„ Klip UI κ°œμ„ /변경에 따라 λ‹€μ†Œ 차이가 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    Metadata ν‘œμ€€ κ°œμ„ 

    • ν•„λ“œλͺ…을 μ •μ˜ν•  수 μžˆλŠ” μ™ΈλΆ€ 링크 제곡 (custom_links)

    • μ™ΈλΆ€ 링크 ν‘œμ€€ μΆ”κ°€ 제곡 (external_url)

    v값에 chain id 제거

  • is_hex_encoded μΆ”κ°€

  • ν•„λ“œμ— λ™μ˜μƒ μ£Όμ†Œλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    ν•„λ“œμ— μΉ΄λ“œμ˜ μƒνƒœλ₯Ό 뢈러올 수 μžˆλŠ” μ™ΈλΆ€ URL을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • external_link ν•„λ“œμ— Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • νŠœν† λ¦¬μ–Ό μ˜€νƒ€ μˆ˜μ •

  • Klip νŒŒνŠΈλ„ˆμŠ€ 계정에 보유 쀑인 μΉ΄λ“œλ₯Ό μ—μŠ€ν¬λ‘œ μ „μ†‘ν•˜λ©΄ μΉ΄λ“œ μ§€κΈ‰ 링크가 μƒμ„±λ©λ‹ˆλ‹€.

  • μƒμ„±λœ 링크λ₯Ό ν΄λ¦­ν•˜λ©΄ μΉ΄λ“œλ₯Ό 지급받을 수 μžˆμŠ΅λ‹ˆλ‹€.

  • hashtags
  • layout

  • qr_code

  • bar_code

  • Get Card Information By BApp API와 Get Card Information API의 Response κ°’ λ³€κ²½

    λ³€κ²½ μ „
    λ³€κ²½ ν›„

    bapps[i].cards.cards[i]

    bapps[i].cards[i]

    bapps[i].cards.next_cursor

    bapps[i].cards_next_cursor

  • Get Card Information API의 Response κ°’ λ³€κ²½

    λ³€κ²½ μ „
    λ³€κ²½ ν›„

    cards.cards[i]

    cards[i]

    cards.next_cursor

    next_cursor

  • Get Card Information API의 Request Parameter에 Query Parameter isAll μΆ”κ°€

  • Klip νšŒμ›μ—κ²Œ μΉ΄λ“œλ₯Ό λ°œν–‰ν•©λ‹ˆλ‹€.

  • λ°œν–‰ μ‹œ Klip νšŒμ›μ˜ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  • Send Card APIλ₯Ό Send Card To User API둜 이름 λ³€κ²½

    • EOAλ₯Ό κ°€μ§„ μ‚¬μš©μž(Klip νšŒμ› λ˜λŠ” λΉ„νšŒμ›)μ—κ²Œ μΉ΄λ“œλ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.

    • 전솑 μ‹œ μ‚¬μš©μž EOAλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  • Send Card To Klip Member API μ‹ κ·œ μΆ”κ°€

    • Klip νšŒμ›μ—κ²Œ μΉ΄λ“œλ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.

    • 전솑 μ‹œ Klip νšŒμ›μ˜ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  • Send Card To User, Send Card To Klip Member API의 Responseμ—μ„œ failCount λ³€μˆ˜λͺ…을 fail_count둜 λ³€κ²½

  • Ground1

    GroundX

    Ground X

    GroundX

    (μ£Ό)κ·ΈλΌμš΄λ“œμ›

    (μ£Ό)κ·ΈλΌμš΄λ“œμ—‘μŠ€

    [email protected]

    [email protected]

    클립 NFT 메타데이터 ν‘œμ€€
    클립 κ΄€λ ¨ λ””μžμΈ κ°€μ΄λ“œ
    클립 NFT 메타데이터 ν‘œμ€€
    Klip Guide
    Klip νŒŒνŠΈλ„ˆμŠ€ νšŒμ›μ‚¬

    ν™•μž₯자: JPG, JPEG, GIF, PNG λ“± 이미지 파일 ν™•μž₯자 (λ™μ˜μƒ ν˜•μ‹ 미지원)

  • 해상도: 72dpi 이상

  • μ˜μƒ 규격

    • μ΅œλŒ€ 크기: κ°€λ‘œ 3840px, μ„Έλ‘œ 2160px μ΄ν•˜

    • μš©λŸ‰: 50MB μ΄ν•˜

    • ν™•μž₯자: MP4

    • λ™μ˜μƒ 코덱: H.264

    • μ˜€λ””μ˜€ 코덱: AAC

    • λ ˆν„°λ°•μŠ€λŠ” μ˜μƒμ— ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 것을 ꢌμž₯

  • string

    NFT μ΄λ¦„μž…λ‹ˆλ‹€.

    description*

    string

    NFT에 κ΄€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

    image*

    string

    NFT에 μ‚¬μš©ν•  이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€. 이미지 파일 ν˜•μ‹μ΄ μ•„λ‹ˆκ±°λ‚˜ κ²½λ‘œμ— ν™•μž₯μžκ°€ ν¬ν•¨λ˜μ§€ μ•ŠλŠ” 경우 μ •μƒμ μœΌλ‘œ ν‘œμ‹œλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    animation_url

    string

    NFT에 μ‚¬μš©ν•  λ™μ˜μƒ URL μ£Όμ†Œμž…λ‹ˆλ‹€. μ§€μ›ν•˜λŠ” 파일 ν™•μž₯μžλŠ” .mp4μž…λ‹ˆλ‹€. H.264 코덱이 μ•„λ‹ˆκ±°λ‚˜ 해상도가 3840x2160을 λ„˜λŠ” 경우 μž¬μƒλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    background_color

    string

    NFT 이미지 배경에 μ‚¬μš©ν•  RGB 색상 μ½”λ“œμž…λ‹ˆλ‹€. # λ‹€μŒμ— 16μ§„μˆ˜ 6자리 λ¬Έμžμ—΄λ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

    sendable

    boolean

    TRUE이면 ν•΄λ‹Ή NFTλ₯Ό Klipμ—μ„œ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 전솑할 수 μžˆμŠ΅λ‹ˆλ‹€. μ§€μ •λ˜μ§€ μ•Šμ€ 경우 기본값은 TRUEμž…λ‹ˆλ‹€.

    group_name

    string

    NFTλ₯Ό κ·Έλ£Ήν•‘ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κ·Έλ£Ή μ΄λ¦„μž…λ‹ˆλ‹€.

    group_icon

    string

    NFTλ₯Ό κ·Έλ£Ήν•‘ν•  λ•Œ κ·Έλ£Ή μ•„μ΄μ½˜μœΌλ‘œ μ‚¬μš©ν•  이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€.

    hashtags

    array

    ν•΄μ‹œνƒœκ·Έλ“€μ΄ λ‹΄κΈ΄ string λ°°μ—΄μž…λ‹ˆλ‹€. ν•΄μ‹œνƒœκ·Έλ₯Ό 달면 Klip λ‚΄μ—μ„œ NFTλ₯Ό κ²€μƒ‰ν•˜λŠ”λ° ν™œμš©λ©λ‹ˆλ‹€.

    layout

    string

    NFT 이미지λ₯Ό λ³΄μ—¬μ£ΌλŠ” λ°©μ‹μž…λ‹ˆλ‹€. μ •μ‚¬κ°ν˜• μ΄λ―Έμ§€λŠ” general, κ°€λ‘œκ°€ 더 κΈ΄ μ΄λ―Έμ§€λŠ” horizontal, μ„Έλ‘œκ°€ κΈ΄ μ΄λ―Έμ§€λŠ” vertical둜 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ§€μ •λ˜μ§€ μ•Šμ€ 경우 기본값은 generalμž…λ‹ˆλ‹€.

    external_link

    string

    Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œμž…λ‹ˆλ‹€. μ§€μ •ν•˜λ©΄ NFT 상세 ν™”λ©΄μ—μ„œ μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” 링크가 μ œκ³΅λ©λ‹ˆλ‹€. (μ΅œλŒ€ 길이: 255)

    external_url

    string

    Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œμž…λ‹ˆλ‹€. μ§€μ •ν•˜λ©΄ NFT 상세 ν™”λ©΄μ—μ„œ μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” 링크가 μ œκ³΅λ©λ‹ˆλ‹€. (μ΅œλŒ€ 길이: 255)

    custom_links

    array

    Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œλ“€μ΄ λ‹΄κΈ΄ object λ°°μ—΄ μž…λ‹ˆλ‹€. display_name에 λ…ΈμΆœν•  λ²„νŠΌ λ ˆμ΄λΈ”, value에 μ—°κ²°ν•  URL μ£Όμ†Œλ₯Ό μŒμ„ 이뀄 μ§€μ •ν•©λ‹ˆλ‹€. Klip의 NFT 상세 ν™”λ©΄μ—μ„œ μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” 링크가 λ²„νŠΌ ν˜•νƒœλ‘œ μ œκ³΅λ©λ‹ˆλ‹€. (λ°°μ—΄μ˜ μ΅œλŒ€ 크기: 10개, 각 링크의 μ΅œλŒ€ 길이: 255)

    qr_code

    string

    QR Codeκ°€ κ·Έλ €μ§„ 이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이: 255)

    bar_code

    string

    Bar Codeκ°€ κ·Έλ €μ§„ 이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이: 255)

    attributes

    array

    NFT의 속성값듀이 λ‹΄κΈ΄ object λ°°μ—΄μž…λ‹ˆλ‹€. trait_type으둜 λ…ΈμΆœν•  속성λͺ…, value둜 속성값을 μŒμ„ 이뀄 μ§€μ •ν•©λ‹ˆλ‹€. λ˜ν•œ μ˜΅μ…”λ„λ‘œ max_valueλ₯Ό ν•¨κ»˜ μ§€μ •ν•˜μ—¬ μ†μ„±κ°’μ˜ μ΅œλŒ€κ°’μ„ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우 value의 값은 max_value의 값을 μ΄ˆκ³Όν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

    status_url

    string

    NFT의 μƒνƒœ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” μ™ΈλΆ€ URL μ£Όμ†Œμž…λ‹ˆλ‹€. ν•΄λ‹Ή URLμ—μ„œλŠ” JSON 값을 λ°˜ν™˜ν•΄μ•Όν•˜κ³ , ν•„μˆ˜μ μœΌλ‘œ bool type의 valid ν•„λ“œμ™€ μ„ νƒμ μœΌλ‘œ array type의 attributes ν•„λ“œλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    개발자 포럼
    NFTμ˜ˆμ‹œμ΄λ―Έμ§€1
    NFTμ˜ˆμ‹œμ΄λ―Έμ§€2
    NFTμ˜ˆμ‹œμ΄λ―Έμ§€3
    {
        "name": "Magic Sword",
        "description": "You can summon a demonic sword with a magic attribute.",
        "image": "https://media.klipwallet.com/card_asset/163632/c6525c6e-060c-426f-9275-0dabadb0ba97.png",
        "background_color" : "#ffffff",
        "sendable": true,
        "group_name": "Weapon",
        "group_icon": "https://media.klipwallet.com/temp_eventcard/bomb_klip.jpg",
        "hashtags": ["Game","GroundX","Magic"],
        "layout": "general",
        "external_link": "https://gxmagicgame.com",
        "custom_links": [
            {
                "display_name": "Klip Homepage",
                "value": "https://klipwallet.com/"           
            },
            {
                "display_name": "GroundX Homepage",
                "value": "https://www.groundx.xyz/"
            }
        ],
        "attributes" : [
            {
                "trait_type": "Sword",
                "value" : "Iron Short Sword"
            }, 
            {
                "trait_type": "Magic Type",
                "value": "Fire"
            },
            {
                "trait_type": "Sword Level",
                "value": "5",
                "max_value": "10"
            },
            {
                "trait_type": "Magic Level",
                "value": 2,
                "max_value": 15
            }
        ],
        "status_url" : "https://fakeapi.gx.com/itemstatus?item_id=923874829"
    }
    {
        "valid": true,
        "attributes": [
            {
                "trait_type": "VIP Membership",
                "value": "Applicable"
            },
            {
                "trait_type": "Expiration Date",
                "value": "2023-12-31"
            }
        ]
    }

    iOS SDK

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” BAppμ—μ„œ Klip을 ν™œμš©ν•˜κΈ° μœ„ν•œ App2App iOS SDKλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    μš”κ΅¬ 사항

    • iOS 12.0 이상

    • Swift 5.0 이상

    • Xcode 13.4 이상

    ν™˜κ²½ μ„€μ •

    Klip iOS SDKλŠ” λ³„λ„μ˜ κ°€μž… μ ˆμ°¨κ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. HTTP 톡신이 κ°€λŠ₯ν•œ μ–΄λŠ ν™˜κ²½μ—μ„œλ„ λ™μž‘ν•©λ‹ˆλ‹€. λ‹€λ§Œ, 기본적으둜 Klip 앱이 μ„€μΉ˜λœ ν™˜κ²½μ—μ„œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. Klip 앱을 μ‹€ν–‰ν•˜μ—¬ Klip μ‚¬μš©μžμ˜ μŠΉμΈμ„ λ°›μ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

    1. Klip SDK 적용

    Option 1. SPM μ‚¬μš©

    2.3.0 이상 λ²„μ „λ§Œ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

    option 2. SDK λ‹€μš΄λ‘œλ“œν•˜μ—¬ 적용

    1. Klip SDK λ‹€μš΄λ‘œλ“œ

    νŽ˜μ΄μ§€μ—μ„œ Klip iOS SDKλ₯Ό λ‹€μš΄λ°›μŠ΅λ‹ˆλ‹€.

    2. Klip SDK Framework μΆ”κ°€

    Klip SDK Frameworkλ₯Ό Importν•˜μ—¬ 개발 ν”„λ‘œμ νŠΈμ— μΆ”κ°€

    1. 개발 쀑인 ν”„λ‘œμ νŠΈλ₯Ό Xcode둜 μ‹€ν–‰

    2. Xcode > 개발 ν”„λ‘œμ νŠΈμ˜ TARGETS 선택 > General Tab > Framworks, Libraries, and Embedded Content Tab > μ™Όμͺ½ ν•˜λ‹¨μ˜ + λ²„νŠΌμ„ 클릭

    3. Source Directory에 λ‹€μš΄λ°›μ€ Klip SDK ν”„λ‘œμ νŠΈμ˜ sdk 디렉토리λ₯Ό 선택, ν΄λ¦­ν•œ ν›„ Nextλ₯Ό 클릭

    4. μ™Όμͺ½μ˜ Project navigator의 Frameworks에 ν•΄λ‹Ή SDKκ°€ Import λ˜μ—ˆλŠ”μ§€ 확인 ν›„ build μˆ˜ν–‰

    Apple App Store λ“±λ‘μš© μ•± λΉŒλ“œ μ‹œμ—λŠ” KlipLib.xcframework만 ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. KlipLib-simulator.xcframeworkλŠ” 개발 ν™˜κ²½μ—λ§Œ μ‚¬μš©ν•΄μ£Όμ„Έμš”.

    Klip SDK μ†ŒμŠ€κ°€ 개발 ν”„λ‘œμ νŠΈμ— λ³΅μ‚¬λ˜κ³  라이브러리 μ½”λ“œλ₯Ό 직접 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    2. Info.plist μ„€μ •

    μ•± μ‹€ν–‰ ν—ˆμš© λͺ©λ‘(Allowlist) λ“±λ‘ν•˜κΈ°

    iOS 9.0 μ΄μƒμ—μ„œ iOS SDK둜 Klip λ“± μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ κΈ°λŠ₯을 μ΄μš©ν•˜λ €λ©΄ Info.plist νŒŒμΌμ— 섀정을 μΆ”κ°€ν•˜μ—¬ μ»€μŠ€ν…€ μŠ€ν‚΄ 정보λ₯Ό 등둝해야 ν•©λ‹ˆλ‹€.

    [Info] > [Custom iOS Target Properties]에 Array νƒ€μž… ν‚€(Key)인 LSApplicationQueriesSchemesλ₯Ό μΆ”κ°€ν•˜κ³ , ν•΄λ‹Ή ν‚€μ˜ 'Item'으둜 μ»€μŠ€ν…€ μŠ€ν‚΄μ— μ‚¬μš©ν•  값인 'klip'을 μΆ”κ°€ν•©λ‹ˆλ‹€.

    4. Source Import μ„€μ •

    v2.1.0 이상

    v2.1.0 미만

    API

    κ°œμš”

    App2App API μš”μ²­μ€ 크게 prepare, request, getResult의 μˆœμ„œλ‘œ 진행이 λ©λ‹ˆλ‹€.

    • prepareλŠ” μ–΄λ– ν•œ μš”μ²­μ„ ν• μ§€ μš”μ²­μ„ μ •μ˜ν•˜λŠ” λ‹¨κ³„λ‘œ 총 5κ°€μ§€ μ’…λ₯˜μ˜ μš”μ²­μ΄ 쑴재

    • requestλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ 톡해 Klip으둜 화면이 μ „ν™˜λ˜μ–΄ μ‹€μ œ μ„œλͺ… ν”„λ‘œμ„ΈμŠ€λ₯Ό μ§„ν–‰

    • getResultλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ 톡해 결과값을 λ°›κ³  확인

    μΆ”κ°€μ μœΌλ‘œ getCardListλŠ” BApp 개발의 편의λ₯Ό μœ„ν•΄ Klip μ‚¬μš©μžμ˜ NFT λͺ©λ‘μ„ λ°›μ•„μ˜¬ 수 μžˆλ„λ‘ μ œκ³΅λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

    KlipSDK.shared

    Klip SDKλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

    Return Value

    Type
    Description

    Example

    KlipSDK.shared.prepare

    KlipSDK.shared.prepare(request: KlipRequest, bappInfo: BAppInfo, completion: @escaping(KlipCallback<KlipTxResponse>) -> Void) App2App API μš”μ²­ 처리λ₯Ό μ€€λΉ„ν•˜κ³  request keyλ₯Ό λ°œκΈ‰ν•©λ‹ˆλ‹€.

    Request 값에 μ‚¬μš©ν•  객체

    • Klip μ—°κ²° νƒ€μž…(=인증)의 경우 AuthRequest

    • KAIA(=KLAY) 전솑 νƒ€μž…μ˜ 경우 KlayTxRequest

    • Token 전솑 νƒ€μž…μ˜ 경우 TokenTxRequest

    Parameters

    Name
    Type
    Description

    Klip μ‚¬μš©μžμ—κ²Œ λ™μ˜ μš”μ²­μ‹œ, request와 bappInfo에 μž…λ ₯된 정보가 좜λ ₯λ©λ‹ˆλ‹€. 응닡 결과에 ν¬ν•¨λœ request keyλŠ” μ‚¬μš©μžμ—κ²Œ νŠΈλžœμž­μ…˜μ„ μš”μ²­ν•˜κΈ° μœ„ν•œ μ»¨ν…μŠ€νŠΈ ν‚€μ˜ 역할을 μˆ˜ν–‰ν•˜λ©°, μ‚¬μš©μž λ™μ˜ μš”μ²­ 및 결과확인 API와 ν•¨κ»˜ μ‚¬μš© λ©λ‹ˆλ‹€.

    Example 1. μ‚¬μš©μž 정보 νšλ“ν•˜κΈ°

    Example 2. KAIA(=KLAY) μ „μ†‘ν•˜κΈ°

    Example 3. Token μ „μ†‘ν•˜κΈ°

    Example 4. Card μ „μ†‘ν•˜κΈ°

    Example 5. Contract μ‹€ν–‰ν•˜κΈ°

    Example 6. Sign Message μš”μ²­ν•˜κΈ°

    KlipSDK.shared.request

    KlipSDK.shared.request(requestKey: String) -> Void Deep Linkλ₯Ό μ΄μš©ν•˜μ—¬ Klip에 인증 λ˜λŠ” μ„œλͺ…을 μš”μ²­ν•©λ‹ˆλ‹€. μ‹€ν–‰ 쀑인 슀마트폰 기기에 Klip 앱이 μ„€μΉ˜λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ μžλ™ μ‹€ν–‰ν•  수 μ—†λŠ” 경우 'Klip μ†Œκ°œ νŽ˜μ΄μ§€(https://klipwallet.com)' 둜 μ΄λ™ν•˜μ—¬ μ‚¬μš©μžλŠ” Klip 앱을 λ‹€μš΄λ‘œλ“œλ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. requestKeyμ—λŠ” prepare λ‹¨κ³„μ—μ„œ Klip μ„œλ²„λ‘œλΆ€ν„° 받은 μš”μ²­ 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    PC ν™˜κ²½μ—μ„œ QR codeλ₯Ό μ΄μš©ν•œ request μŠ€ν… μ²˜λ¦¬λŠ” ν•­λͺ©μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    Parameters

    Name
    Type
    Description

    Example

    KlipSDK.shared.getResult

    KlipSDK.shared.getResult(requestKey: String, completion: @escaping(KlipCallback<KlipTxResponse>) -> Void) App2App API μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. requestKeyμ—λŠ” prepare 및 request λ‹¨κ³„μ—μ„œ μ‚¬μš©ν•œ μš”μ²­ 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    KlipSDK.shared.getCardList

    KlipSDK.shared.getCardList(cardAddress: String, userAddress: String, cursor: String?, completion: @escaping(KlipCallback<CardListResponse>) -> Void) μ‚¬μš©μžμ˜ λͺ¨λ“  μΉ΄λ“œ 쀑 νŠΉμ • μΉ΄λ“œμ˜ λͺ©λ‘μ„ κ°€μ Έμ˜΅λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    Error Code

    Http Status
    Error Code
    Description

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    Card 전솑 νƒ€μž…μ˜ 경우 CardTxRequest
  • Contract μ‹€ν–‰ νƒ€μž…μ˜ 경우 ContractTxRequest

  • Sign Message μš”μ²­ νƒ€μž…μ˜ 경우 SignMessageRequest - 이 경우 Klaytn ν‘œμ€€μ— 따라 "\x19Klaytn Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€.

  • Klip

    Klip μΈμŠ€ν„΄μŠ€

    request

    KlipRequest

    μš”μ²­ νƒ€μž…μ— λ”°λ₯Έ μš”μ²­μ •λ³΄

    bappInfo

    BAppInfo

    μš”μ²­ μ•± 정보

    callback

    KlipCallback<KlipTxResponse>

    μš”μ²­ 응닡 κ²°κ³Όλ₯Ό 받을 μ½œλ°±ν•¨μˆ˜μž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λ©΄, μ™„λ£Œκ²°κ³ΌμΈ KlipTxResponseλ₯Ό 전솑받고, μ²˜λ¦¬κ°€ μ‹€νŒ¨λ˜λ©΄, μ‹€νŒ¨κ²°κ³ΌμΈKlipErrorResponseλ₯Ό μ „μ†‘λ°›μŠ΅λ‹ˆλ‹€.

    requestKey

    String

    μš”μ²­ 번호

    requestKey

    String

    μš”μ²­ 번호

    callback

    KlipCallback<KlipTxResponse>

    μš”μ²­ 응닡 κ²°κ³Όλ₯Ό 받을 μ½œλ°±ν•¨μˆ˜μž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λ©΄, μ™„λ£Œκ²°κ³ΌμΈ KlipTxResponseλ₯Ό 전솑받고, μ²˜λ¦¬κ°€ μ‹€νŒ¨λ˜λ©΄, μ‹€νŒ¨κ²°κ³ΌμΈKlipErrorResponseλ₯Ό μ „μ†‘λ°›μŠ΅λ‹ˆλ‹€.

    cardAddress

    String

    μ‘°νšŒν•  μΉ΄λ“œ μ£Όμ†Œ

    userAddress

    String

    μ‘°νšŒν•  μ‚¬μš©μž μ£Όμ†Œ

    cursor

    String

    (optional) μ‘°νšŒν•  μ»€μ„œκ°’μž…λ‹ˆλ‹€. λ§Œμ•½, μ‘°νšŒν•  μΉ΄λ“œμ˜ 보유λͺ©λ‘μ΄ 100개 이상이면, λ‹€μŒ 100개 정보λ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

    callback

    KlipCallback<CardListResponse>

    μš”μ²­ 응닡 κ²°κ³Όλ₯Ό 받을 μ½œλ°±ν•¨μˆ˜μž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λ©΄, μΉ΄λ“œλͺ©λ‘μΈ CardListResponseλ₯Ό 전솑받고, μ²˜λ¦¬κ°€ μ‹€νŒ¨λ˜λ©΄, μ‹€νŒ¨ 결과인KlipErrorResponseλ₯Ό μ „μ†‘λ°›μŠ΅λ‹ˆλ‹€.

    -

    -

    Klip REST API μ—λŸ¬μ½”λ“œμ™€ 동일

    500

    10

    Klip SDKμ—μ„œ μ—λŸ¬ λ°œμƒ (ex, Http μ—°κ²° μ‹€νŒ¨)

    500

    21

    Klip SDKμ—μ„œ μ—λŸ¬ λ°œμƒ (Klip REST API 미지원 μ—λŸ¬μ½”λ“œ)

    500

    22

    λ‹€μš΄λ‘œλ“œ
    QR code 예제
    개발자 포럼

    Klip SDKμ—μ„œ μ—λŸ¬ λ°œμƒ (Klip Protocol μ—λŸ¬)

    https://github.com/ground-x/klip-a2a-ios-sdk.git
     	<key>LSApplicationQueriesSchemes</key>
     	<array>
     		<string>klip</string>
     	</array>
    import KlipLib
    import KlipSDK
    let klip = KlipSDK.shared
    // μ‚¬μš©μž 정보 νšλ“ μš”μ²­λ¬Έ
    let req: AuthRequest = AuthRequest();
    
    // BApp 정보
    let bappInfo: BAppInfo = BAppInfo(name : "BApp Name");
    
    // 응닡 κ²°κ³Ό Callback
    KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }
    // KAIA 전솑 νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    let req: KlayTxRequest = KlayTxRequest(to: "0x..receiver address..", amount: "10")
      
    KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }
    // Token 전솑 νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    let req: TokenTxRequest = TokenTxRequest(to: "0x..receiver address..", amount: "10", contract: "0x..token contract address..")
      
    KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }
    // Card 전솑 νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    let req: CardTxRequest = CardTxRequest(to: "0x..receiver address..", contract: "0x..card contract address..", cardId: "9")
      
    KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }
    // Contract μ‹€ν–‰ νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    let req: ContractTxRequest = ContractTxRequest(to: "0x..contract address..", value: "10", abi: "{...}", params: "[{...}]")
      
    KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }
    // Sign Message μš”μ²­λ¬Έ
    let req = SignMessageRequest(value: "message", from: "0x..contract address..")
      
    KlipSDK.shared.prepare(request: req, bappInfo: bappInfo) { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }
    KlipSDK.shared.request(requestKey: "request key...")
    KlipSDK.shared.getResult(requestKey: "request key...") { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }
    KlipSDK.shared.getCardList(cardAddress: "0x..card address..", userAddress: "0x..user address..", cursor: nil) { result in
        switch result {
        case .success(let response):
        case .failure(let error):
        }
    }

    App2App API

    이 νŠœν† λ¦¬μ–Όμ€ App2App REST APIλ₯Ό μ†μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ μž‘μ„±λœ 개발자 κ°€μ΄λ“œμž…λ‹ˆλ‹€. SDK도 기본적으둜 REST API κΈ°λ°˜μ΄λ―€λ‘œ μ•„λž˜ λ‚΄μš©μ„ μ°Έκ³ ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

    KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    App2App REST API Tutorial

    Android SDK

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” BAppμ—μ„œ Klip을 ν™œμš©ν•˜κΈ° μœ„ν•œ App2App Android SDKλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    μš”κ΅¬ 사항

    ν™˜κ²½ μ„€μ •

    App2App APIλŠ” λ³„λ„μ˜ κ°€μž… μ ˆμ°¨κ°€ ν•„μš”μ—†κ³  기본적으둜 HTTP 톡신이 κ°€λŠ₯ν•œ μ–΄λŠ ν™˜κ²½μ—μ„œλ„ λ™μž‘ κ°€λŠ₯ν•©λ‹ˆλ‹€. λ‹€λ§Œ, 클립 앱을 μ‹€ν–‰ν•˜μ—¬ μ‚¬μš©μžμ˜ μŠΉμΈμ„ λ°›μ•„μ•Όν•˜κΈ° λ•Œλ¬Έμ— 기본적으둜 클립 앱이 μ„€μΉ˜λœ ν™˜κ²½μ—μ„œ 호좜 ν•΄μ•Όν•©λ‹ˆλ‹€.

    ν˜„μž¬ μƒŒλ“œλ°•μŠ€ ν™˜κ²½μ€ λ”°λ‘œ μ œκ³΅λ˜μ§€ μ•ŠμœΌλ©° μ‹€μ œ 카카였 κ³„μ •μœΌλ‘œλ§Œ κ΅¬ν˜„ 및 ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

    μ•„λž˜ μ˜ˆμ œλŠ” REST APIλŠ” curl λͺ…령을 μˆ˜ν–‰ν•˜κ³ , Deep LinkλŠ” 각 λͺ¨λ°”일 ν™˜κ²½μ˜ SDKμ—μ„œ μ œκ³΅ν•˜λŠ” APIλ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜, λͺ¨λ°”일웹 ν™˜κ²½μ˜ 경우 Web2App 라이브러리λ₯Ό μ΄μš©ν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Web2App λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ•„λž˜ GitHub μ €μž₯μ†Œλ₯Ό ν†΅ν•΄μ„œ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ μ‚¬μš© 방법은 ν•΄λ‹Ή μ‚¬μ΄νŠΈλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    • curl download

    • Web2App GitHub repository

    Step 1 : Prepare

    App2App 처리 μ‹œ κ°€μ • λ¨Όμ € μˆ˜ν–‰ν•΄μ•Όν•  Prepare 과정은 Klipμ—μ„œ μ²˜λ¦¬ν•  μš”μ²­ 데이터λ₯Ό μ „λ‹¬ν•˜κ³  Request Keyλ₯Ό λ°œκΈ‰λ°›λŠ” κ³Όμ •μž…λ‹ˆλ‹€. Reqeust KeyλŠ” Deep Link 호좜 및 κ²°κ³Ό 확인 κ³Όμ •μ—μ„œ ν•„μš”ν•©λ‹ˆλ‹€.

    μš”μ²­μ˜ μ’…λ₯˜λŠ” auth와 transaction이 있으며, transaction은 λ‹€μ‹œ 코인/토큰 전솑 νŠΈλžœμž­μ…˜, μΉ΄λ“œ 전솑 νŠΈλžœμž­μ…˜, 그리고 μ»¨νŠΈλž™νŠΈ μ‹€ν–‰ νŠΈλžœμž­μ…˜μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€. ν•„μš”μ— λ”°λΌμ„œ μ μ ˆν•œ ν•„λ“œλ₯Ό μ•„λž˜μ™€ 같이 μ„€μ •ν•˜μ—¬ APIλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

    νŠΈλžœμž­μ…˜ μš”μ²­μ—μ„œ κ³΅ν†΅μœΌλ‘œ μ‚¬μš©ν•˜λŠ” from ν•„λ“œμ—λŠ” νŠΈλžœμž­μ…˜μ— μ„œλͺ…ν•˜λŠ” Klip μ‚¬μš©μžμ˜ 계정 μ£Όμ†Œλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 이 ν•„λ“œλŠ” Optionalμ΄μ§€λ§Œ BAppμ—μ„œ μ˜λ„ν•œ μ‚¬μš©μžμ™€ μ‹€μ œ Klip μ‚¬μš©μžκ°€ μ„œλ‘œ μΌμΉ˜ν•˜λŠ”μ§€ κ²€μ‚¬ν•˜κΈ° μœ„ν•œ ν•„λ“œμ΄λ―€λ‘œ μ„€μ •ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

    νŠΈλžœμž­μ…˜ 수수료λ₯Ό BAppμ—μ„œ λŒ€μ‹  μ§€λΆˆν•˜κ³ μž ν•  경우 수수료 λŒ€λ‚© κ°€λŠ₯ν•œ KAS (Klaytn API Service) μ„œλΉ„μŠ€λ₯Ό κ΅¬λ…ν•˜μ—¬μ•Ό ν•˜λ©°, μš”μ²­ λ°μ΄ν„°μ˜ BApp ν•„λ“œ 내뢀에 인증 정보λ₯Ό ν•¨κ»˜ 전달해야 ν•©λ‹ˆλ‹€.

    KAS λŒ€λ‚© μ„œλΉ„μŠ€ ꡬ독 및 authorization key λ°œκΈ‰ 방법은 λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜μ‹œκΈ° 바라며, λ¬Έμ˜μ‚¬ν•­μ€ KAS ν—¬ν”„μ„Όν„°λ₯Ό μ΄μš©ν•˜μ—¬ μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    Case 1) Auth μš”μ²­

    Auth μš”μ²­μ€ Klip μ‚¬μš©μžμ˜ EOAλ₯Ό μ–»μ•Όν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. μš”μ²­ μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    API μš”μ²­ 헀더에 Authorization, Cookie λ“±μ˜ ν•„λ“œλ₯Ό λ„£μœΌλ©΄ CORS μ„€μ • λ•Œλ¬Έμ— μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ„œμ— μ„€λͺ…λœ ν•„λ“œ 이외에 μΆ”κ°€λ‘œ λ„£μ§€ μ•Šλ„λ‘ μœ μ˜ν•΄μ•Όν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    callback 객체의 success ν•„λ“œμ—λŠ” Request 처리 성곡 μ‹œ λ‹€μ‹œ BApp으둜 λ˜λŒμ•„μ˜¬ Deep Linkλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. fail의 κ²½μš°λŠ” μ²˜λ¦¬μ— μ‹€νŒ¨ν–ˆμ„ λ•Œ λ˜λŒμ•„μ˜¬ Deep Linkλ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄, μ‚¬μš©μžκ°€ μŠΉμΈν–ˆμœΌλ‚˜ 이미 μ™„λ£Œλœ 경우, 만료된 request keyλ₯Ό μ‚¬μš©ν•œ 경우, μž”κ³  λΆ€μ‘± 등에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. Android ν”Œλž«νΌμ˜ 경우, Intent Scheme ν˜•μ‹(intent://...)의 Deep Link둜 μž‘μ„±μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

    BAppμ—μ„œ Deep Linkλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” 경우 μ„ΈνŒ…ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€. μ΄λ•ŒλŠ” Klipμ—μ„œ BApp으둜 λ‹€μ‹œ λͺ…μ‹œμ μœΌλ‘œ λ˜λŒμ•„κ°€μ•Ό μ²˜λ¦¬κ°€ μ™„λ£Œλ¨μ„ μ•ˆλ‚΄ν•©λ‹ˆλ‹€.

    μ·¨μ†Œ ν˜Ήμ€ X λ²„νŠΌμ˜ 경우 callback이 λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ•± λ™μž‘μ„ μ·¨μ†Œν•˜κ±°λ‚˜ 클립 μ•± μ’…λ£Œλ₯Ό μ„ νƒν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. 이에 따라 μžλ™ ν™”λ©΄ μ „ν™˜μ΄ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    Case 2) Send Token μš”μ²­

    Send Token μš”μ²­μ€ Klip μ‚¬μš©μžμ˜ 토큰을 μ§€μ •λœ μ£Όμ†Œλ‘œ 보낼 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. μš”μ²­ μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    Klaytn 체인은 ν˜„μž¬ Kaia 체인으둜 운영되고 μžˆμ§€λ§Œ ν•˜μœ„ ν˜Έν•œμ„±μ„ μœ„ν•΄ kaia λŒ€μ‹ μ— klaytn 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€.

    transaction 객체의 contract ν•„λ“œμ—λŠ” ν† ν°μ˜ μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ(SCA)λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€(λ„€μ΄ν‹°λΈŒ μ½”μΈμ˜ 경우 0x0000000000000000000000000000000000000000 μž…λ ₯). amount ν•„λ“œμ—λŠ” 보낼 ν† ν°μ˜ 양을 μ„€μ •ν•©λ‹ˆλ‹€. μ†Œμˆ˜μ  6μžλ¦¬κΉŒμ§€λ§Œ μ§€μ›ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 Auth μš”μ²­ μ˜ˆμ‹œμ™€ λ™μΌν•œ ν˜•νƒœμ˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    Case 3) Send Card μš”μ²­

    Send Card μš”μ²­μ€ Klip μ‚¬μš©μžμ˜ μΉ΄λ“œλ₯Ό μ§€μ •λœ μ£Όμ†Œλ‘œ 보낼 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. μš”μ²­ μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    transaction 객체의 contract ν•„λ“œμ—λŠ” Klipμ—μ„œ μ œκ³΅ν•˜λŠ” μΉ΄λ“œμ˜ μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ(SCA)λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. card_id ν•„λ“œμ—λŠ” 보낼 ν† ν°μ˜ 고유번호λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 Auth μš”μ²­ μ˜ˆμ‹œμ™€ λ™μΌν•œ ν˜•νƒœμ˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    Case 4) Execute Contract μš”μ²­

    Execute Contract μš”μ²­μ€ Klip μ‚¬μš©μžμ˜ μ„œλͺ…μœΌλ‘œ 슀마트 μ»¨νŠΈλž™νŠΈ ν•¨μˆ˜λ₯Ό μˆ˜ν–‰ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. μš”μ²­ μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    tuple νƒ€μž…μ˜ κ²½μš°λŠ” λ‹€μŒμ˜ 예제처럼 μ‚¬μš©ν•©λ‹ˆλ‹€.

    {% hint style="info" %} Klaytn 체인은 ν˜„μž¬ Kaia 체인으둜 운영되고 μžˆμ§€λ§Œ ν•˜μœ„ ν˜Έν•œμ„±μ„ μœ„ν•΄ kaia λŒ€μ‹ μ— klaytn 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€. {% endhint %}

    `

    transaction객체의toν•„λ“œμ—λŠ” μ‹€ν–‰ν•  μ»¨νŠΈλž™νŠΈμ˜ μ£Όμ†Œ(SCA)λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€.valueν•„λ“œμ—λŠ” 전솑할 KAIA(KLAY)λ₯Ό kei(peb) λ‹¨μœ„λ‘œ μ„€μ •ν•©λ‹ˆλ‹€. payable ν•¨μˆ˜μΈ κ²½μš°μ—λ§Œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.abiμ—λŠ” μ‹€ν–‰ν•  ν•¨μˆ˜μ˜ ABIλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€. paramsμ—λŠ” ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œ 인자λ₯Ό λ°°μ—΄ ν˜•νƒœμ˜ λ¬Έμžμ—΄μ„ μ„€μ •ν•©λ‹ˆλ‹€. abi및params` ν•„λ“œλŠ” String νƒ€μž…μž„μ„ μœ μ˜ν•˜μ—¬ μ „μ†‘ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 Auth μš”μ²­ μ˜ˆμ‹œμ™€ λ™μΌν•œ ν˜•νƒœμ˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    Case 5) Sign Message μš”μ²­

    Sign Message μš”μ²­μ€ Klip μ‚¬μš©μžμ˜ κ³„μ •μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ„œλͺ…ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. μš”μ²­ μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    원문이 hex encoding 된 데이터λ₯Ό μ‚¬μš©ν•  경우 λ‹€μŒμ²˜λŸΌ μ‚¬μš© ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    Klaytn 체인은 ν˜„μž¬ Kaia 체인으둜 운영되고 μžˆμ§€λ§Œ ν•˜μœ„ ν˜Έν•œμ„±μ„ μœ„ν•΄ kaia λŒ€μ‹ μ— klaytn 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€.

    message 였브젝트의 value ν•„λ“œμ— μ„œλͺ…ν•  원문을 ν¬ν•¨ν•©λ‹ˆλ‹€. from ν•„λ“œλŠ” μ„œλͺ…ν•˜λŠ” 계정 μ£Όμ†Œμž…λ‹ˆλ‹€. 선택 ν•­λͺ©μ΄λΌ μƒλž΅ν•  수 μžˆμœΌλ‚˜, λ§Œμ•½ μž…λ ₯ν•œλ‹€λ©΄ ν•΄λ‹Ή κ°’μœΌλ‘œ μ„œλͺ… κ³„μ •μ˜ μ£Όμ†Œκ°€ μ˜¬λ°”λ₯Έμ§€ κ²€μ¦ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 Auth μš”μ²­ μ˜ˆμ‹œμ™€ λ™μΌν•œ ν˜•νƒœμ˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    원문에 μ•„μŠ€ν‚€μ½”λ“œ μ΄μ™Έμ˜ λ¬Έμžκ°€ ν¬ν•¨λœ κ²½μš°μ—λŠ”, caver-js의 caver.utils.hashMessage λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œ ν•΄μ‹±ν•œ 결과물을 Klipμ—μ„œ μ‘λ‹΅ν•œ signature κ°’μœΌλ‘œ recoverν•˜λ©΄ κ²°κ³Όκ°€ μ‹€μ œ μ„œλͺ…ν•œ 계정과 λ‹€λ₯Έ μ£Όμ†Œλ‘œ 응닡될 수 μžˆλŠ” λΆ€λΆ„ μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    원문이 β€˜0xβ€™λ‘œ μ‹œμž‘ ν•  경우 caver-js의 caver.utils.hashMessage λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œ ν•΄μ‹±ν•œ 결과물은 μžλ™μœΌλ‘œ hex encoding 된 λ°μ΄ν„°λ‘œ νŒλ‹¨ν•˜μ—¬ μƒμ„±ν•©λ‹ˆλ‹€. 동일 데이터에 λŒ€ν•΄ Klipμ—μ„œ β€œis_hex_encoded": true μ‚¬μš©ν•˜μ—¬ signature λ₯Ό λ§Œλ“€μ§€ μ•ŠμœΌλ©΄ recover ν•œ κ²°κ³Όκ°€ μ‹€μ œ μ„œλͺ…ν•œ 계정과 λ‹€λ₯Έ μ£Όμ†Œλ‘œ 응닡될 수 μžˆλŠ” λΆ€λΆ„ μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    Step 2 : Request

    RequestλŠ” BAppμ—μ„œ 클립 앱에 App2App 처리λ₯Ό μš”μ²­ν•˜κΈ° μœ„ν•œ Deep Linkλ₯Ό μ‹€ν–‰ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. Deep Linkλ₯Ό 톡해 클립 앱이 μ‹€ν–‰λœ 경우, μ‚¬μš©μžμ—κ²Œ 확인 창이 λœ¨κ²Œλ©λ‹ˆλ‹€. 인증의 κ²½μš°λŠ” BApp에 EOAλ₯Ό μ œκ³΅μ— λ™μ˜λ₯Ό κ΅¬ν•˜λŠ” 창이 뜨게되며, νŠΈλžœμž­μ…˜ 처리의 경우 μš”μ²­ν•œ νŠΈλžœμž­μ…˜ 데이터λ₯Ό 화면에 보여주고, pin code μž…λ ₯λ°›μ•„μ„œ μ‹€μ œ νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜κ²Œλ©λ‹ˆλ‹€.

    λ§Œμ•½ Prepare κ³Όμ •μ—μ„œ callback Deep Linkλ₯Ό μ„€μ •ν•œ 경우, BApp으둜 μžλ™μœΌλ‘œ λ„˜μ–΄κ°‘λ‹ˆλ‹€. μ„€μ •ν•˜κΈ° μ•Šμ€ 경우 μ‚¬μš©μžμ—κ²Œ BApp으둜 λ˜λŒμ•„κ°€κΈ° μœ„ν•œ μ•ˆλ‚΄ λ©”μ‹œμ§€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

    Klipμ—μ„œ μ œκ³΅ν•˜λŠ” URL은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. κ³΅ν†΅μ μœΌλ‘œ request_keyλ₯Ό 쿼리 슀트링으둜 λ°›μŠ΅λ‹ˆλ‹€. Prepare κ³Όμ •μ—μ„œ 얻은 값을 μ„€μ •ν•©λ‹ˆλ‹€.

    μœ„ Deep Linkλ₯Ό 톡해 클립 앱을 μ‹€ν–‰ν•˜κ±°λ‚˜ μ„€μΉ˜ν•  수 μžˆλ„λ‘ μœ λ„λ©λ‹ˆλ‹€.

    Step 3 : Result

    App2App API μš”μ²­μ˜ μ΅œμ’… μƒνƒœλŠ” μ•„λž˜μ™€ 같이 Result APIλ₯Ό pollingν•˜μ—¬ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. Prepare κ³Όμ •μ—μ„œ 얻은 request_key값을 쿼리 슀트링으둜 μ„€μ •ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μš”μ²­ typeλ³„λ‘œ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    Case 1) Auth μš”μ²­

    Case 2) Sign Message μš”μ²­

    result 객체의 signature ν•„λ“œλ‘œ λΆ€ν„° 원문에 λŒ€ν•œ μ„œλͺ…값을 받을 수 μžˆμŠ΅λ‹ˆλ‹€. recoverλŠ” caver.utils.recover λ©”μ†Œλ“œ λ˜λŠ” μ•„λž˜ 예제 μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μœ„μ˜ μ˜ˆμ‹œλŠ” type을 sign_message둜 μ„€μ •ν•œ 경우둜, sign_message_eip191을 μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” Kaia의 ν‘œμ€€μ— 따라 "\x19Ethereum Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μ—¬ λ©”μ‹œμ§€μ— μ„œλͺ…ν•©λ‹ˆλ‹€. Kaiaμ—μ„œ λ³€κ²½λœ λ©”μ‹œμ§€ μ„œλͺ… ν‘œμ€€μ˜ 변화에 λŒ€ν•΄μ„œλŠ” μ—¬κΈ°λ₯Ό μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    원문에 μ•„μŠ€ν‚€μ½”λ“œ μ΄μ™Έμ˜ λ¬Έμžκ°€ ν¬ν•¨λœ κ²½μš°μ—λŠ”, caver-js의 caver.utils.hashMessage λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œ ν•΄μ‹±ν•œ 결과물을 Klipμ—μ„œ μ‘λ‹΅ν•œ signature κ°’μœΌλ‘œ recoverν•˜λ©΄ κ²°κ³Όκ°€ μ‹€μ œ μ„œλͺ…ν•œ 계정과 λ‹€λ₯Έ μ£Όμ†Œλ‘œ 응닡될 수 μžˆλŠ” λΆ€λΆ„ μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    원문이 β€˜0xβ€™λ‘œ μ‹œμž‘ ν•  경우 caver-js의 caver.utils.hashMessage λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œ ν•΄μ‹±ν•œ 결과물은 μžλ™μœΌλ‘œ hex encoding 된 λ°μ΄ν„°λ‘œ νŒλ‹¨ν•˜μ—¬ μƒμ„±ν•©λ‹ˆλ‹€. 동일 데이터에 λŒ€ν•΄ Klipμ—μ„œβ€œis_hex_encoded": true μ‚¬μš©ν•˜μ—¬ signature λ₯Ό λ§Œλ“€μ§€ μ•ŠμœΌλ©΄ recover ν•œ κ²°κ³Όκ°€ μ‹€μ œ μ„œλͺ…ν•œ 계정과 λ‹€λ₯Έ μ£Όμ†Œλ‘œ 응닡될 수 μžˆλŠ” λΆ€λΆ„ μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    Case 3) Auth, Sign Message μ΄μ™Έμ˜ μš”μ²­

    Authκ°€ μ•„λ‹Œ λ‹€λ₯Έ μš”μ²­ νƒ€μž…μΌ 경우 result 객체가 μΆ”κ°€λ‘œ λ„˜μ–΄μ˜΅λ‹ˆλ‹€. result 객체의 tx_hash ν•„λ“œλ₯Ό 볡사해 kaiaScan, Etherscan, Polygon λ“±μ—μ„œ μ‚¬μš©ν•˜λ©΄ νŠΈλžœμž­μ…˜μ˜ 처리 μƒνƒœμ— κ΄€ν•œ μžμ„Έν•œ 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. result 객체의 status ν•„λ“œλŠ” pending μƒνƒœμ˜ 경우, μ‚¬μš©μžκ°€ Klipμ—μ„œ ν™•μΈν–ˆμžλ§Œ, μ²΄μΈμ—μ„œ 아직 νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” μ€‘μž„μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 일반적으둜 λͺ‡ 초 후에 λ‹€μ‹œ ν™•μΈν•˜λ©΄ μš”μ²­μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. successλŠ” μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ 처리될 λ•Œ, fail은 μš”μ²­ μ²˜λ¦¬μ— μ‹€νŒ¨ν•  λ•Œμ˜ μƒνƒœμž…λ‹ˆλ‹€.

    Get Additional Information

    일반적으둜 BAppμ—μ„œ μΉ΄λ“œλ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‚¬μš©μžκ°€ λ³΄μœ ν•˜κ³  μžˆλŠ” μΉ΄λ“œ λͺ©λ‘μ„ μ‘°νšŒν•˜μ—¬ 고유번호λ₯Ό μ–»μ–΄μ•Όν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. Auth 과정을 ν†΅ν•΄μ„œ 얻은 EOA와 μ‘°νšŒν•˜λ €λŠ” μ»¨νŠΈλž™νŠΈμ˜ μ£Όμ†Œλ₯Ό 인자둜 μ‚Όμ•„μ„œ ν•΄λ‹Ή EOAκ°€ μ»¨νŠΈλž™νŠΈμ— μ†Œμœ ν•˜κ³  μžˆλŠ” μΉ΄λ“œ λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μš”μ²­ μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œ 정보가 정상 μ‘°νšŒλ˜μ—ˆλ‹€λ©΄ 계정이 이 BAppμ—μ„œ μ†Œμœ ν•œ μΉ΄λ“œ λͺ©λ‘κ³Ό 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    • cardsμ—μ„œ cardλŠ” 이 BAppμ—μ„œ μ“°μ΄λŠ” μΉ΄λ“œμž…λ‹ˆλ‹€. BAppμ—λŠ” μΉ΄λ“œ 1μ’…λ₯˜κ°€ λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€.

    • Query νŒŒλΌλ―Έν„°λ‘œ cursor λ˜λŠ” isAll λ‘˜ 쀑 ν•˜λ‚˜λ§Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€(isAll이 false이면 cursorλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€).

    • cursorλ₯Ό μ‚¬μš©ν•˜λ©΄ Pagination을 μ‚¬μš©ν•©λ‹ˆλ‹€.

      • 1회 μš”μ²­μ— μ΅œλŒ€ μΉ΄λ“œ 100개의 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

      • 정보λ₯Ό 뢈러울 μΉ΄λ“œκ°€ 100개λ₯Ό 초과 μ‹œ λ‹€μŒ μΉ΄λ“œ 정보λ₯Ό 뢈러올 수 μžˆλŠ” μ»€μ„œκ°’μΈ next_cursor둜 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

      • λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό λ°›μœΌλ €λ©΄ cursor에 이전 ν˜ΈμΆœμ—μ„œ 받은 next_cursorλ₯Ό λ„£κ³  APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

    μœ„ μ˜ˆμ‹œμ—μ„œ cards.next_cursor값이 μ‘΄μž¬ν•˜λ―€λ‘œ 이 계정은 conan μΉ΄λ“œλ₯Ό 100개 이상 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. ν•œ λ²ˆμ— μ‘°νšŒν•  μΉ΄λ“œ κ°œμˆ˜κ°€ 100개λ₯Ό μ΄ˆκ³Όν•œλ‹€λ©΄ 1회 호좜 μ‹œ μΉ΄λ“œ 100개 μ •λ³΄λ§Œ λ°›κ³  cards.next_cursor값을 λ°›μŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜λ €λ©΄ cards.next_cursor값을 Query νŒŒλΌλ―Έν„° cursor에 μ „λ‹¬ν•˜κ³  APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄, 정보λ₯Ό 뢈러올 μΉ΄λ“œ κ°œμˆ˜κ°€ 150개라면, λ¨Όμ € APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ μΉ΄λ“œ 100개의 정보와 cards.next_cursor값을 λ°›μŠ΅λ‹ˆλ‹€. 그리고 λ™μΌν•œ APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•  λ•Œ cards.next_cursor값을 Query νŒŒλΌλ―Έν„° cursor둜 μ‚¬μš©ν•˜λ©΄ λ‚˜λ¨Έμ§€ 50개의 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ 경우 HTTP 400 λ˜λŠ” 500이 λ¦¬ν„΄λ˜λ©° μžμ„Έν•œ λ‚΄μš©μ€ Basicsλ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 개발자 ν¬λŸΌμ„ λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    {"bapp": {"name" :  "My BApp", "kas_authorization_key": "Basic abcdefghijklmnopqrstuvwxyz0123456789="}}
    curl -X POST "https://a2a-api.klipwallet.com/v2/a2a/prepare" \
    -d '{"bapp": { "name" : "My BApp" }, "callback": { "success": "mybapp:\/\/klipwallet\/success", "fail": "mybapp:\/\/klipwallet\/fail" }, "type": "auth" }' \
    -H "Content-Type: application/json"
    {
      "request_key": "0b0ee0ad-62b3-4146-980b-531b3201265d", // random string
      "status": "prepared", // μ •μƒμ μœΌλ‘œ 처리된 경우. λ§Œμ•½ λ¬Έμ œκ°€ μžˆλ‹€λ©΄ "error" μƒνƒœκ°€ λ„˜μ–΄μ˜΄.
      "expiration_time": 1600011054, //unix timestamp
      "estimated_gas": 210000 // νŠΈλžœμž­μ…˜μ„ λ°œμƒμ‹œν‚€λŠ” μš”μ²­μ΄λ©΄μ„œ from 값이 μ‘΄μž¬ν•  경우 μ‹€μ œ νŠΈλžœμž­μ…˜ 생성에 μ‚¬μš©λ  gasLimit 값을 λ°˜ν™˜. μ΄μ™Έμ˜ 경우 μƒλž΅.
    }
    curl -X POST "https://a2a-api.klipwallet.com/v2/a2a/prepare" \
    -d '{"bapp": { "name" : "My BApp" }, "chain": "klaytn", "type": "send_token", "transaction": { "contract": "0xdc8c8d2CD5829dE8e8a31Fc595D69c4B403e9dD8", "from": "0xcD1722f2947Def4CF144679da39c4C32bDc35681", "to": "0x85c17299e9462e035c149847776e4edb7f4b2aa9", "amount": "100" } }' \
    -H "Content-Type: application/json"
    curl -X POST "https://a2a-api.klipwallet.com/v2/a2a/prepare" \
    -d '{"bapp": { "name" : "My BApp" }, "type": "send_card", "transaction": { "contract": "0xB21F0285d27beb2373ECB5c17E119ccEAd7Ee10A", "from": "0xcD1722f2947Def4CF144679da39c4C32bDc35681", "to": "0x85c17299e9462e035c149847776e4edb7f4b2aa9", "card_id": "1234" } }' \
    -H "Content-Type: application/json"
    curl -X POST "https://a2a-api.klipwallet.com/v2/a2a/prepare" \
    -d '{"bapp": { "name" : "My BApp" }, "chain": "klaytn", "type": "execute_contract", "transaction": { "to": "0xd4fFbe967c31C29199478Be2b5A53dC69eF9B825", "value": "0", "abi": "{ \"constant\": false, \"inputs\": [ { \"name\": \"a\", \"type\": \"string\" } ], \"name\": \"testString\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }", "params": "[\"test_string\"]" } }' \
    -H "Content-Type: application/json"
    curl -X POST 'https://a2a-api.klipwallet.com/v2/a2a/prepare' \
    -d '{
        "bapp": {
            "name": "name",
            "callback": {}
        },
        "chain": "klaytn",
        "type": "execute_contract",
        "transaction": {
            "to": "0xF857Dcd31A2a69764bfEbb30dc51EA24519b8aEc",
            "value": "0",
            "abi": "{\"inputs\": [{\"components\": [{\"internalType\": \"string\",\"name\": \"text\",\"type\": \"string\"},{\"internalType\": \"bool\",\"name\": \"completed\",\"type\": \"bool\"}],\"internalType\": \"struct Test.Todo\",\"name\": \"a\",\"type\": \"tuple\"}],\"name\": \"testStruct\",\"outputs\": [],\"stateMutability\": \"nonpayable\",\"type\": \"function\"}",
            "params": "[[\"2001\",false]]"
        }
    }' \
    -H 'Content-Type: application/json' 
    curl -X POST "https://a2a-api.klipwallet.com/v2/a2a/prepare" \
    -d '{"bapp": { "name" : "My BApp" }, "chain": "klaytn", "type": "sign_message", "message": { "value": "original message", "from": "0x220AD25E31BBF7c19D95Be0e47d4cdc0Ad8f8FEa" } }' \
    -H "Content-Type: application/json"
    curl -X POST "https://a2a-api.klipwallet.com/v2/a2a/prepare" \
    -d '{"bapp": { "name" : "My BApp" }, "chain": "klaytn", "type": "sign_message", "message": { "is_hex_encoded": true, "value": "0x1290fe99a322", "from": "0x220AD25E31BBF7c19D95Be0e47d4cdc0Ad8f8FEa" } }' \
    -H "Content-Type: application/json"
    https://klipwallet.com?target=/a2a?request_key=0b0ee0ad-62b3-4146-980b-531b3201265d
    curl -X GET "https://a2a-api.klipwallet.com/v2/a2a/result?request_key=0b0ee0ad-62b3-4146-980b-531b3201265d" \
    -H "Content-Type: application/json"
    {
        "request_key": "0b0ee0ad-62b3-4146-980b-531b3201265d",
        "expiration_time": 1752488581,
        "status": "completed",
        "result": {
            "klaytn_address": "0x7529d7814a19d9a9F9d8405D4eF9BDA56B02f457", //ν˜Έν™˜μ„±μ„ μœ„ν•΄ ν•„λ“œλͺ…에 klaytn μœ μ§€
            "evm_address": "0x7529d7814a19d9a9F9d8405D4eF9BDA56B02f457",
            "bitcoin_address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
            "solana_address": "M1TRvDk3XZMnafQZhcD2NrBkAcXbDRjmyJDxb5YJUcF",
            "tron_address": "TPF9k4bHPSpZinYMuWcGCeMuCLtAH8Ku43",
            "xrpl_address": "rmBdbQFdwTHAC1a98X6SA5BaXzfUcPwe7"
        }
    }
    {
      "request_key":  "0b0ee0ad-62b3-4146-980b-531b3201265d",
      "expiration_time": 1600011054,
      "status": "completed",
      "result": {
        "signature": "0x1dc98165c3fc523bcdbdf18eadba12b004cd30b232e5e65fdd6424412cbf0dab2d131dda838cd249a7d00414ae53abe5ba6fa7bf8446f28c328bc60443c1545d07f5",
        "hash": "0x0b9ac081057767a46500710d1007d4f0de7f23b109b50ffdc60d03b175a9eb6f"
      }
    }
    const Bytes = require('eth-lib/lib/Bytes');
    const elliptic = require("elliptic");
    const secp256k1 = new elliptic.ec("secp256k1");
    const { keccak256, keccak256s } = require("eth-lib/lib/hash");
    const utils = require("caver-js/packages/caver-utils");
    
    function recover(message) {
      const hex = message.signature
      const hash = message.message
      const vals = [Bytes.slice(64, Bytes.length(hex), hex), Bytes.slice(0, 32, hex), Bytes.slice(32, 64, hex)];
    
      const vrs = { v: Bytes.toNumber(vals[0]), r: vals[1].slice(2), s: vals[2].slice(2) };
    
      const ecPublicKey = secp256k1.recoverPubKey(new Buffer(hash.slice(2), "hex"), vrs, vrs.v < 2 ? vrs.v : 1 - vrs.v % 2); // because odd vals mean v=0... sadly that means v=0 means v=1... I hate that
      const publicKey = "0x" + ecPublicKey.encode("hex", false).slice(2);
      const publicHash = keccak256(publicKey);
    
      const recoveredAddress = "0x" + publicHash.slice(-40);
    
      if (recoveredAddress.toLowerCase() === message.address.toLowerCase()) {
        console.log("ok", recoveredAddress, message.address)
        return true
      } else {
        console.log("not match", recoveredAddress, message.address)
      }
      return false
    }
    
    const EthereumPrefix = "Ethereum Signed Message"
    const PolygonPrefix = "Ethereum Signed Message"
    const KlaytnPrefix = "Klaytn Signed Message"
    
    function hashMessage(chainPrefix, data) {
      const message = utils.isHexStrict(data) ? utils.hexToBytes(data) : data
      const messageBuffer = Buffer.from(message)
      const preamble = `\x19` + chainPrefix + `:\n${message.length}`
      const preambleBuffer = Buffer.from(preamble)
      const saltedMessage = Buffer.concat([preambleBuffer, messageBuffer])
      return keccak256(saltedMessage)
    }
    
    const message = {
      message: hashMessage(PolygonPrefix, 'original message'),
      address: "0xa99694791182d3f6d0e0ccf5a2b0703845a50a50",
      signature: "0x25b46420d40415d1a3cab6d1b2849e93e100fb310eebc9db8580a6eb465fc3535dd7f61c6a95efe281acfe0a9de6f089eec57ea78c578738e1dc16ded1c7999d1c"
    }
    
    recover(message)
    {
      "request_key": "0b0ee0ad-62b3-4146-980b-531b3201265d",
      "expiration_time": 1600011054,
      "status": "completed",
      "result": {
        "tx_hash": "0x82d018556e88b8f8f43dc2c725a683afc204bfd3c17230c41252354980f77fb3",
        "status": "success"
      }
    }
    curl -X GET "https://a2a-api.klipwallet.com/v2/a2a/cards?chain=klaytn&sca=0xB21F0285d27beb2373ECB5c17E119ccEAd7Ee10A&eoa=0x85c17299e9462e035c149847776e4edb7f4b2aa9&cursor=" -H "Content-Type: application/json"
    {
        "name": "conan",
        "symbol_img": "https://media.klipwallet.com/token_icon/klay_klip.svg",
        "cards": [
        {
          "created_at": 1580176787,
          "created_at_format": "format",
          "updated_at": 1580176787,
          "updated_at_format": "format",
          "owner": "0x85c17299e9462e035c149847776e4edb7f4b2aa9",
          "sender": "0x2412b300750f505fb2e68ddf0cd45e9d95f5378d",
          "sender_kakao_id": "1234"
          "card_id": 19,
          "card_uri": "https://media.klipwallet.com/card-asset/1234/19.json",
          "transaction_hash": "0x293a2e53ecf238109908e65a2b7ff4aad0919ce3ce54af08d6fc4323f28e935d"
        },
        ],
        "next_cursor": "mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL"
    }

    API 16: Android 4.1(Jelly Bean) 이상

  • Java 11 이상

  • Android Studio 3.0.0 이상

  • Android Permission : Internet Permission

  • ν™˜κ²½ μ„€μ •

    Klip Android SDKλŠ” λ³„λ„μ˜ κ°€μž… μ ˆμ°¨κ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. HTTP 톡신이 κ°€λŠ₯ν•œ μ–΄λŠ ν™˜κ²½μ—μ„œλ„ λ™μž‘ν•©λ‹ˆλ‹€. λ‹€λ§Œ, 기본적으둜 Klip 앱이 μ„€μΉ˜λœ ν™˜κ²½μ—μ„œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. Klip 앱을 μ‹€ν–‰ν•˜μ—¬ Klip μ‚¬μš©μžμ˜ μŠΉμΈμ„ λ°›μ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

    Klip Android SDK Sample μ•±μ˜ μ‹€ν–‰ κ°€μ΄λ“œλŠ” ν”„λ‘œμ νŠΈμ— ν¬ν•¨λ˜μ–΄ μžˆλŠ” README.md에 μ†Œκ°œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

    1. Klip SDK λ‹€μš΄λ‘œλ“œ

    λ‹€μš΄λ‘œλ“œ νŽ˜μ΄μ§€μ—μ„œ Klip Android SDKλ₯Ό λ‹€μš΄λ°›μŠ΅λ‹ˆλ‹€.

    2. Klip SDK 라이브러리 μΆ”κ°€

    방법 1. Klip SDK λΉŒλ“œ ν›„ 개발 ν”„λ‘œμ νŠΈμ— μΆ”κ°€

    1. λ‹€μš΄λ°›μ€ Klip SDK ν”„λ‘œμ νŠΈμ˜ μœ„μΉ˜μ—μ„œ Terminal을 μ‹€ν–‰

    2. ./gradlew :sdk:build λͺ…령을 μ‹€ν–‰ν•˜μ—¬ Klip SDK ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œ (λΉŒλ“œκ°€ μ™„λ£Œλ˜λ©΄ <Klip SDK ν”„λ‘œμ νŠΈ>/sdk/build/outputs/aar/μœ„μΉ˜μ— 결과물인 AAR 파일이 생성됨)

    3. 개발 ν”„λ‘œμ νŠΈμ— libs 디렉토리λ₯Ό 생성

    4. λΉŒλ“œλœ AAR νŒŒμΌμ„ 개발 ν”„λ‘œμ νŠΈμ˜ libs λ””λ ‰ν† λ¦¬λ‘œ 볡사

    5. 개발 ν”„λ‘œμ νŠΈμ˜ build.gradle에 디렉토리 μ°Έμ‘° 및 λ””νŽœλ˜μ‹œ 섀정을 μΆ”κ°€

    방법 2. Klip SDK μ†ŒμŠ€μ½”λ“œλ₯Ό Importν•˜μ—¬ 개발 ν”„λ‘œμ νŠΈμ— μΆ”κ°€

    1. 개발 쀑인 ν”„λ‘œμ νŠΈλ₯Ό Android Studio둜 μ‹€ν–‰

    2. Android Studio > File > New > Import Module을 클릭

    3. Source Directory에 λ‹€μš΄λ°›μ€ Klip SDK ν”„λ‘œμ νŠΈμ˜ sdk 디렉토리λ₯Ό 선택, ν΄λ¦­ν•œ ν›„ Nextλ₯Ό 클릭

    4. Klip SDK ν”„λ‘œμ νŠΈμ˜ gradle.properties λ‚΄μš©λ“€μ„ 개발 ν”„λ‘œμ νŠΈλ‘œ 볡사

    5. 개발 ν”„λ‘œμ νŠΈμ˜ build.gradle에 λ””νŽœλ˜μ‹œ 섀정을 μΆ”κ°€

    Klip SDK μ†ŒμŠ€κ°€ 개발 ν”„λ‘œμ νŠΈμ— λ³΅μ‚¬λ˜κ³  라이브러리 μ½”λ“œλ₯Ό 직접 μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½, 단일 λ²„μ „μ˜ 라이브러리 μ½”λ“œλ₯Ό μœ μ§€ν•˜λ €λŠ” κ²½μš°μ—λŠ” 이 방법이 μ μ ˆν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 이 경우, 방법 1μ—μ„œ μ•ˆλ‚΄ν•œ λ‚΄μš©μ— 따라 컴파일된 AAR νŒŒμΌμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

    3. μ„€μ •ν•˜κΈ°

    인터넷 μ‚¬μš© κΆŒν•œ μ„€μ •ν•˜κΈ°

    Klip SDKλ₯Ό 톡해 HTTP 톡신 μ‚¬μš©μ„ ν—ˆμš©ν•˜κΈ° μœ„ν•΄, 앱에 인터넷 μ‚¬μš© κΆŒν•œμ„ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. AndroidManifest.xml νŒŒμΌμ— λ‹€μŒκ³Ό 같이 android.permission.INTERNET κΆŒν•œμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

    νŒ¨ν‚€μ§€ 쿼리 μΆ”κ°€ν•˜κΈ°

    App2App SDK Android v2.0.1 μ΄ν•˜ 버전을 μ‚¬μš©ν•˜λ©΄μ„œ Android 11을 νƒ€κ²ŸνŒ…ν•˜λŠ” μ•±(API μˆ˜μ€€ 30)을 κ°œλ°œν•˜λŠ” 경우 Klipκ³Ό 연동을 μœ„ν•΄ νŒ¨ν‚€μ§€ 쿼리λ₯Ό μΆ”κ°€ν•΄ μƒν˜Έμž‘μš©μ„ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. AndroidManifest.xml νŒŒμΌμ— λ‹€μŒκ³Ό 같이 queries μš”μ†Œλ₯Ό μΆ”κ°€ν•˜μ„Έμš”. (App2App SDK v2.1.0 이상을 μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” μ„€μ •ν•˜μ§€ μ•Šμ•„λ„ λ©λ‹ˆλ‹€.) μžμ„Έν•œ λ‚΄μš©μ€ Android 11의 νŒ¨ν‚€μ§€ 곡개 μƒνƒœλ₯Ό μ°Έκ³ ν•©λ‹ˆλ‹€.

    API

    κ°œμš”

    App2App API μš”μ²­μ€ 크게 prepare, request, getResult의 μˆœμ„œλ‘œ 진행이 λ©λ‹ˆλ‹€.

    • prepareλŠ” μ–΄λ– ν•œ μš”μ²­μ„ ν• μ§€ μš”μ²­μ„ μ •μ˜ν•˜λŠ” λ‹¨κ³„λ‘œ 총 5κ°€μ§€ μ’…λ₯˜μ˜ μš”μ²­μ΄ 쑴재

    • requestλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ 톡해 Klip으둜 화면이 μ „ν™˜λ˜μ–΄ μ‹€μ œ μ„œλͺ… ν”„λ‘œμ„ΈμŠ€λ₯Ό μ§„ν–‰

    • getResultλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ 톡해 결과값을 λ°›κ³  확인

    μΆ”κ°€μ μœΌλ‘œ getCardListλŠ” BApp 개발의 편의λ₯Ό μœ„ν•΄ Klip μ‚¬μš©μžμ˜ NFT λͺ©λ‘μ„ λ°›μ•„μ˜¬ 수 μžˆλ„λ‘ μ œκ³΅λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

    Klip.getInstance

    Klip SDKλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    context

    Context

    μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…μŠ€νŠΈ

    Return Value

    Type
    Description

    Klip

    Klip μΈμŠ€ν„΄μŠ€

    Example

    Klip.prepare

    App2App API μš”μ²­ 처리λ₯Ό μ€€λΉ„ν•˜κ³  request keyλ₯Ό λ°œκΈ‰ν•©λ‹ˆλ‹€.

    App2App REST API의 Prepare μš”μ²­κ³Ό 같이, Android SDKμ—μ„œλ„ BAppInfo의 setCallback λ©”μ†Œλ“œλ₯Ό ν†΅ν•΄μ„œ BApp으둜 λŒμ•„κ°€κΈ° μœ„ν•œ Deep Linkλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Link ν˜•μ‹μ€ Intent Scheme ν˜•μ‹(intent://...)의 Deep Link둜 μž‘μ„±μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

    Request 값에 μ‚¬μš©ν•  객체

    • Klip μ—°κ²° νƒ€μž…(=인증)의 경우 AuthRequest

    • KAIA(=KLAY) 전솑 νƒ€μž…μ˜ 경우 KlayTxRequest

    • Token 전솑 νƒ€μž…μ˜ 경우 TokenTxRequest

    • Card 전솑 νƒ€μž…μ˜ 경우 CardTxRequest

    • Contract μ‹€ν–‰ νƒ€μž…μ˜ 경우 ContractTxRequest

    • Sign Message μš”μ²­ νƒ€μž…μ˜ 경우 SignMessageRequest - 이 경우 Klaytn ν‘œμ€€μ— 따라 "\x19Klaytn Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    request

    KlipRequest

    μš”μ²­ νƒ€μž…μ— λ”°λ₯Έ μš”μ²­μ •λ³΄

    bappInfo

    BAppInfo

    μš”μ²­ μ•± 정보

    callback

    KlipCallback<KlipResponse>

    μš”μ²­ 응닡 κ²°κ³Όλ₯Ό 받을 μ½œλ°±ν•¨μˆ˜μž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λ©΄, μ™„λ£Œκ²°κ³ΌμΈ KlipResponseλ₯Ό 전솑받고, μ²˜λ¦¬κ°€ μ‹€νŒ¨λ˜λ©΄, μ‹€νŒ¨κ²°κ³ΌμΈKlipErrorResponseλ₯Ό μ „μ†‘λ°›μŠ΅λ‹ˆλ‹€.

    Throws

    Type
    Description

    KlipRequestException

    μš”μ²­ μ˜ˆμ™Έ (ex, ν•„μˆ˜ Parameter λ―Έμž…λ ₯μ‹œ λ°œμƒ)

    Klip μ‚¬μš©μžμ—κ²Œ λ™μ˜ μš”μ²­μ‹œ, request와 bappInfo에 μž…λ ₯된 정보가 좜λ ₯λ©λ‹ˆλ‹€. 응닡 결과에 ν¬ν•¨λœ request keyλŠ” μ‚¬μš©μžμ—κ²Œ νŠΈλžœμž­μ…˜μ„ μš”μ²­ν•˜κΈ° μœ„ν•œ μ»¨ν…μŠ€νŠΈ ν‚€μ˜ 역할을 μˆ˜ν–‰ν•˜λ©°, μ‚¬μš©μž λ™μ˜ μš”μ²­ 및 결과확인 API와 ν•¨κ»˜ μ‚¬μš©λ©λ‹ˆλ‹€.

    Example 1. μ‚¬μš©μž 정보 νšλ“ν•˜κΈ°

    Example 2. KAIA(=KLAY) μ „μ†‘ν•˜κΈ°

    Example 3. Token μ „μ†‘ν•˜κΈ°

    Example 4. Card μ „μ†‘ν•˜κΈ°

    Example 5. Contract μ‹€ν–‰ν•˜κΈ°

    Example 6. Sign Message μ‹€ν–‰ν•˜κΈ°

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 개발자 ν¬λŸΌμ„ λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    Klip.request

    Deep Linkλ₯Ό μ΄μš©ν•˜μ—¬ Klip에 인증 λ˜λŠ” μ„œλͺ…을 μš”μ²­ν•©λ‹ˆλ‹€. μ‹€ν–‰ 쀑인 슀마트폰 기기에 Klip 앱이 μ„€μΉ˜λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ μžλ™ μ‹€ν–‰ν•  수 μ—†λŠ” 경우 'Klip μ†Œκ°œ νŽ˜μ΄μ§€(https://klipwallet.com)' 둜 μ΄λ™ν•˜μ—¬ μ‚¬μš©μžλŠ” Klip 앱을 λ‹€μš΄λ‘œλ“œλ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. requestKeyμ—λŠ” prepare λ‹¨κ³„μ—μ„œ Klip μ„œλ²„λ‘œλΆ€ν„° 받은 μš”μ²­ 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    PC ν™˜κ²½μ—μ„œ QR codeλ₯Ό μ΄μš©ν•œ request μŠ€ν… μ²˜λ¦¬λŠ” QR code 예제 ν•­λͺ©μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    Parameters

    Name
    Type
    Description

    requestKey

    String

    μš”μ²­ 번호

    Throws

    Type
    Description

    KlipRequestException

    μš”μ²­ μ˜ˆμ™Έ (ex, ν•„μˆ˜ Parameter λ―Έμž…λ ₯μ‹œ λ°œμƒ)

    Example

    Klip.getResult

    App2App API μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. requestKeyμ—λŠ” prepare 및 request λ‹¨κ³„μ—μ„œ μ‚¬μš©ν•œ μš”μ²­ 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    requestKey

    String

    μš”μ²­ 번호

    callback

    KlipCallback<KlipResponse>

    μš”μ²­ 응닡 κ²°κ³Όλ₯Ό 받을 μ½œλ°±ν•¨μˆ˜μž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λ©΄, μ™„λ£Œκ²°κ³ΌμΈ KlipResponseλ₯Ό 전솑받고, μ²˜λ¦¬κ°€ μ‹€νŒ¨λ˜λ©΄, μ‹€νŒ¨κ²°κ³ΌμΈKlipErrorResponseλ₯Ό μ „μ†‘λ°›μŠ΅λ‹ˆλ‹€.

    Throws

    Type
    Description

    KlipRequestException

    μš”μ²­ μ˜ˆμ™Έ (ex, ν•„μˆ˜ Parameter λ―Έμž…λ ₯μ‹œ λ°œμƒ)

    Example

    Klip.getCardList

    μ‚¬μš©μžμ˜ λͺ¨λ“  μΉ΄λ“œ 쀑 νŠΉμ • μΉ΄λ“œμ˜ λͺ©λ‘μ„ κ°€μ Έμ˜΅λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    cardAddress

    String

    μ‘°νšŒν•  μΉ΄λ“œ μ£Όμ†Œ

    userAddress

    String

    μ‘°νšŒν•  μ‚¬μš©μž μ£Όμ†Œ

    cursor

    String

    (optional) μ‘°νšŒν•  μ»€μ„œκ°’μž…λ‹ˆλ‹€. λ§Œμ•½, μ‘°νšŒν•  μΉ΄λ“œμ˜ 보유λͺ©λ‘μ΄ 100개 이상이면, λ‹€μŒ 100개 정보λ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

    callback

    KlipCallback<CardListResponse>

    μš”μ²­ 응닡 κ²°κ³Όλ₯Ό 받을 μ½œλ°±ν•¨μˆ˜μž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜λ©΄, μΉ΄λ“œλͺ©λ‘μΈ CardListResponseλ₯Ό 전솑받고, μ²˜λ¦¬κ°€ μ‹€νŒ¨λ˜λ©΄, μ‹€νŒ¨ 결과인KlipErrorResponseλ₯Ό μ „μ†‘λ°›μŠ΅λ‹ˆλ‹€.

    Throws

    Type
    Description

    KlipRequestException

    μš”μ²­ μ˜ˆμ™Έ (ex, ν•„μˆ˜ Parameter λ―Έμž…λ ₯μ‹œ λ°œμƒ)

    Example

    Error Code

    μ—λŸ¬μ½”λ“œλŠ” KlipCallback의 μ‹€νŒ¨μ˜ 응닡결과인 KlipErrorResponse의 getErrorCode()ν•¨μˆ˜λ₯Ό 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

    Http Status
    Error Code
    Description

    -

    -

    와 동일

    500

    10

    Klip SDKμ—μ„œ μ—λŸ¬ λ°œμƒ (ex, Http μ—°κ²° μ‹€νŒ¨)

    500

    21

    Klip SDKμ—μ„œ μ—λŸ¬ λ°œμƒ (Klip REST API 미지원 μ—λŸ¬μ½”λ“œ)

    500

    22

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 개발자 ν¬λŸΌμ„ λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    JavaScript SDK

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” BAppμ—μ„œ Klip을 ν™œμš©ν•˜κΈ° μœ„ν•œ App2App JavaScript SDKλ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.

    KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    μš”κ΅¬ 사항

    • (npm μ΄μš©ν•˜μ—¬ μ„€μΉ˜ν•˜λŠ” 경우) node 10 이상 ꢌμž₯

    ν™˜κ²½ μ„€μ •

    Klip JavaScript SDKλŠ” λ³„λ„μ˜ κ°€μž… μ ˆμ°¨κ°€ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. HTTP 톡신이 κ°€λŠ₯ν•œ μ–΄λŠ ν™˜κ²½μ—μ„œλ„ λ™μž‘ν•©λ‹ˆλ‹€. λ‹€λ§Œ, 기본적으둜 Klip 앱이 μ„€μΉ˜λœ ν™˜κ²½μ—μ„œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. Klip 앱을 μ‹€ν–‰ν•˜μ—¬ Klip μ‚¬μš©μžμ˜ μŠΉμΈμ„ λ°›μ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

    npm을 μ΄μš©ν•˜λŠ” 경우

    npm install klip-sdk ν˜Ήμ€ yarn add klip-sdk μ»€λ§¨λ“œλ₯Ό 톡해 μ„€μΉ˜ ν›„ λ‹€μŒκ³Ό 같이 ES module import λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

    직접 νŒŒμΌμ„ λ‹€μš΄ λ°›μ•„ μ‚¬μš©ν•˜λŠ” 경우

    νƒ­μ—μ„œ Klip JavaScript SDKλ₯Ό λ‹€μš΄λ°›μŠ΅λ‹ˆλ‹€. λ‹€μš΄ 받은 νŒŒμΌμ„ λ ˆν¬μ§€ν† λ¦¬μ— μœ„μΉ˜μ‹œν‚¨ ν›„ HTMLνŒŒμΌμ— λ‹€μŒκ³Ό 같이 슀트립트 νƒœκ·Έλ₯Ό μ‚½μž…ν•©λ‹ˆλ‹€.

    이후 κΈ€λ‘œλ²Œ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ„ μ–Έλœ klipSDK λ³€μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ 각 λ©”μ†Œλ“œμ— μ ‘κ·Όν•©λ‹ˆλ‹€.

    API

    κ°œμš”

    App2App API μš”μ²­μ€ 크게 prepare, request, getResult의 μˆœμ„œλ‘œ 진행이 λ©λ‹ˆλ‹€.

    • prepareλŠ” μ–΄λ– ν•œ μš”μ²­μ„ ν• μ§€ μš”μ²­μ„ μ •μ˜ν•˜λŠ” λ‹¨κ³„λ‘œ 총 5κ°€μ§€ μ’…λ₯˜μ˜ μš”μ²­μ΄ 쑴재

    • requestλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ 톡해 Klip으둜 화면이 μ „ν™˜λ˜μ–΄ μ‹€μ œ μ„œλͺ… ν”„λ‘œμ„ΈμŠ€λ₯Ό μ§„ν–‰

    • getResultλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ„ 톡해 결과값을 λ°›κ³  확인

    μΆ”κ°€μ μœΌλ‘œ getCardListλŠ” BApp 개발의 편의λ₯Ό μœ„ν•΄ Klip μ‚¬μš©μžμ˜ NFT λͺ©λ‘μ„ λ°›μ•„μ˜¬ 수 μžˆλ„λ‘ μ œκ³΅λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

    prepare

    App2App API μš”μ²­μ„ μ€€λΉ„ν•˜κ³  request keyλ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    μ‚¬μš© κ°€λŠ₯ν•œ μš”μ²­ μœ ν˜•

    • Klip μ—°κ²° νƒ€μž…(=인증)의 경우 auth

    • KAIA(=KLAY) 전솑 νƒ€μž…μ˜ 경우 sendKLAY

    • Token 전솑 νƒ€μž…μ˜ 경우 sendToken

    prepare.auth

    μ‚¬μš©μžμ˜ 정보λ₯Ό νšλ“ν•˜λŠ” μš”μ²­μž…λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    prepare.sendKLAY

    μ‚¬μš©μžμ˜ KAIA(=KLAY)λ₯Ό νŠΉμ • μ£Όμ†Œλ‘œ μ „μ†‘ν•˜λŠ” μš”μ²­μž…λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    prepare.sendToken

    μ‚¬μš©μžκ°€ λ³΄μœ ν•œ 토큰을 νŠΉμ • μ£Όμ†Œλ‘œ μ „μ†‘ν•˜λŠ” μš”μ²­μž…λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    prepare.sendCard

    μ‚¬μš©μžκ°€ λ³΄μœ ν•œ μΉ΄λ“œ(NFT)λ₯Ό νŠΉμ • μ£Όμ†Œλ‘œ μ „μ†‘ν•˜λŠ” μš”μ²­μž…λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    prepare.executeContract

    μ‚¬μš©μžκ°€ νŠΉμ • μ»¨νŠΈλž™νŠΈμ˜ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν•˜λŠ” μš”μ²­μž…λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    prepare.signMessage

    μ‚¬μš©μžκ°€ Klip κ³„μ •μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ„œλͺ…ν•˜λŠ” μš”μ²­μž…λ‹ˆλ‹€. κΈ°μ‘΄ Klaytn ν‘œμ€€μ— 따라 "\x19Klaytn Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    request

    Deep Linkλ₯Ό μ΄μš©ν•˜μ—¬ Klip에 인증 λ˜λŠ” μ„œλͺ…을 μš”μ²­ν•©λ‹ˆλ‹€. μ‹€ν–‰ 쀑인 슀마트폰 기기에 Klip 앱이 μ„€μΉ˜λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ μžλ™ μ‹€ν–‰ν•  수 μ—†λŠ” 경우 'Klip μ†Œκ°œ νŽ˜μ΄μ§€(https://klipwallet.com)' 둜 μ΄λ™ν•˜μ—¬ μ‚¬μš©μžλŠ” Klip 앱을 λ‹€μš΄λ‘œλ“œλ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€. requestKeyμ—λŠ” prepare λ‹¨κ³„μ—μ„œ Klip μ„œλ²„λ‘œλΆ€ν„° 받은 μš”μ²­ 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    PC ν™˜κ²½μ—μ„œ QR codeλ₯Ό μ΄μš©ν•œ request μŠ€ν… μ²˜λ¦¬λŠ” ν•­λͺ©μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    Parameters

    Name
    Type
    Description

    Example

    getResult

    App2App API μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. requestKeyμ—λŠ” prepare 및 request λ‹¨κ³„μ—μ„œ μ‚¬μš©ν•œ μš”μ²­ 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    getCardList

    μ‚¬μš©μžμ˜ μΉ΄λ“œ (NFT) 보유 λͺ©λ‘μ„ κ°€μ Έμ˜΅λ‹ˆλ‹€. μ‘°νšŒν•˜κ³ μž ν•˜λŠ” NFT μ»¨νŠΈλž™νŠΈ μ£Όμ†Œλ₯Ό μ•Œκ³  μžˆμ–΄μ•Ό ν•˜λ©°, Klipμ—μ„œ μ§€μ›ν•˜λŠ” μ»¨νŠΈλž™νŠΈλ§Œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

    Parameters

    Name
    Type
    Description

    Example

    Error Code

    Http Status
    Error Code
    Description

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    repositories {
      flatDir {
        dirs 'libs'
      }
    }
    dependencies {
      // Klip SDK  
      implementation 'com.klipwallet.app2app:klip-a2a-sdk-android_release_v2.3.0:2.3.0@aar'
    }
    dependencies {
      // Klip SDK  
      implementation project(path: ':sdk')
    }
    <manifest ...>
      <uses-permission android:name="android.permission.INTERNET" />
      ...
    </manifest> 
    <manifest ...>
        <queries>
            <package android:name="com.klipwallet.app" />
        </queries>
        ...
    </manifest>
    public class SampleActivity extends AppCompatActivity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Klip klip = Klip.getInstance(this);
      }
    }
    // μ‚¬μš©μž 정보 νšλ“ μš”μ²­λ¬Έ
    AuthRequest req = new AuthRequest();
    
    // BApp 정보
    BAppInfo bappInfo = new BAppInfo("BApp Name");
    
    // 응닡 κ²°κ³Ό Callback
    KlipCallback callback = new KlipCallback<KlipResponse>() {
      @Override public void onSuccess(final KlipResponse res) {}
      @Override public void onFail(final KlipErrorResponse res) {}
    }
    
    klip.prepare(req, bappInfo, callback);
    // KAIA 전솑 νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    KlayTxRequest req = new KlayTxRequest.Builder()
      .to("0x..receiver address..")
      .amount("10")
      .build();
      
    klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 μ°Έκ³ )
    // Token 전솑 νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    TokenTxRequest req = new TokenTxRequest.Builder()
      .contract("0x..token contract address..")
      .to("0x..receiver address..")
      .amount("10")
      .build();
      
    klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 μ°Έκ³ )
    // Card 전솑 νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    CardTxRequest req = new CardTxRequest.Builder()
      .contract("0x..card contract address..")
      .to("0x..receiver address..")
      .cardId("9")
      .build();
      
    klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 μ°Έκ³ )
    // Contract 전솑 νŠΈλžœμž­μ…˜ μš”μ²­λ¬Έ
    ContractTxRequest req = new ContractTxRequest.Builder()
      .to("0x..contract address..")
      .value("10")
      .abi("{..contract abi..}")
      .params(new ArrayList<Object>(){
        // contract parameters
      })
      .build();
      
    klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 μ°Έκ³ )
    // Sign Message μš”μ²­λ¬Έ
    SignMessageRequest req = new SignMessageRequest.Builder()
        .from("0x..contract address..")
        .value("message")
        .build();
    
    klip.prepare(req, bappInfo, callback); // bappInfo, callback (example 1 μ°Έκ³ )
    klip.request(requestKey); // Klip μ•± 호좜
    KlipCallback callback = new KlipCallback<KlipResponse>() {
      @Override public void onSuccess(final KlipResponse res) {}
      @Override public void onFail(final KlipErrorResponse res) {}
    }
    
    Klip klip = Klip.getInstance();
    klip.getResult(requestKey, callback)
    KlipCallback callback = new KlipCallback<KlipCardListResponse>() {
      @Override public void onSuccess(final KlipCardListResponse res) {}
      @Override public void onFail(final KlipErrorResponse res) {}
    }
    
    Klip klip = Klip.getInstance();
    klip.getCardList("0x..card address..",
      "0x..user address..",
      null,
      callback);

    Klip SDKμ—μ„œ μ—λŸ¬ λ°œμƒ (Klip Protocol μ—λŸ¬)

    Klip REST API μ—λŸ¬μ½”λ“œ
    Card 전솑 νƒ€μž…μ˜ 경우 sendCard
  • Contract μ‹€ν–‰ νƒ€μž…μ˜ 경우 executeContract

  • Sign Message μš”μ²­ νƒ€μž…μ˜ 경우 signMessage - 이 경우 Klaytn ν‘œμ€€μ— 따라 "\x19Klaytn Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€.

  • successLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ • μ™„λ£Œ ν›„ λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    failLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  경우 λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    from

    string

    μ‚¬μš©μžμ˜ Klip 계정 μ£Όμ†Œκ°€ from μ£Όμ†Œμ™€ μΌμΉ˜ν•˜λŠ” 경우만 μ§„ν–‰ (optional)

    successLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ • μ™„λ£Œ ν›„ λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    failLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  경우 λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    from

    string

    μ‚¬μš©μžμ˜ Klip 계정 μ£Όμ†Œκ°€ from μ£Όμ†Œμ™€ μΌμΉ˜ν•˜λŠ” 경우만 μ§„ν–‰ (optional)

    successLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ • μ™„λ£Œ ν›„ λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    failLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  경우 λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    params

    string

    μ‹€ν–‰ν•  ν•¨μˆ˜μ˜ 인자 λͺ©λ‘

    from

    string

    μ‚¬μš©μžμ˜ Klip 계정 μ£Όμ†Œκ°€ from μ£Όμ†Œμ™€ μΌμΉ˜ν•˜λŠ” 경우만 μ§„ν–‰ (optional)

    successLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ • μ™„λ£Œ ν›„ λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    failLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  경우 λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    failLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  경우 λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    bappName

    string

    μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œλ  BApp의 이름

    successLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ • μ™„λ£Œ ν›„ λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    failLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ •μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•  경우 λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    bappName

    string

    μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œλ  BApp의 이름

    to

    string

    λ°›λŠ” μ‚¬λžŒμ˜ μ£Όμ†Œ

    amount

    string

    보낼 KAIA(=KLAY) μˆ˜λŸ‰ (λ‹¨μœ„: KAIA, μ†Œμˆ˜μ  μ΅œλŒ€ 6자리 ν—ˆμš©)

    from

    string

    μ‚¬μš©μžμ˜ Klip 계정 μ£Όμ†Œκ°€ from μ£Όμ†Œμ™€ μΌμΉ˜ν•˜λŠ” 경우만 μ§„ν–‰ (optional)

    bappName

    string

    μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œλ  BApp의 이름

    to

    string

    λ°›λŠ” μ‚¬λžŒμ˜ μ£Όμ†Œ

    amount

    string

    보낼 토큰 μˆ˜λŸ‰ (λ‹¨μœ„: ν† ν°μ˜ default λ‹¨μœ„, μ†Œμˆ˜μ  μ΅œλŒ€ 6자리 ν—ˆμš©)

    contract

    string

    토큰 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ

    bappName

    string

    μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œλ  BApp의 이름

    to

    string

    λ°›λŠ” μ‚¬λžŒμ˜ μ£Όμ†Œ

    id

    string

    NFT id

    contract

    string

    NFT μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ

    bappName

    string

    μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œλ  BApp의 이름

    to

    string

    μ»¨νŠΈλž™νŠΈμ˜ μ£Όμ†Œ

    value

    string

    μ»¨νŠΈλž™νŠΈ μ‹€ν–‰ν•˜λ©΄μ„œ 같이 보낼 KAIA(=KLAY) μˆ˜λŸ‰ (λ‹¨μœ„: kei(=peb))

    abi

    string

    μ‹€ν–‰ν•  ν•¨μˆ˜μ˜ abi

    bappName

    string

    μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œλ  BApp의 이름

    value

    string

    μ„œλͺ…ν•  λ©”μ‹œμ§€ 원문

    from

    string

    μ‚¬μš©μžμ˜ Klip 계정 μ£Όμ†Œκ°€ from μ£Όμ†Œμ™€ μΌμΉ˜ν•˜λŠ” 경우만 μ§„ν–‰ (optional)

    successLink

    string

    μ‚¬μš©μž λ™μ˜κ³Όμ • μ™„λ£Œ ν›„ λŒμ•„μ˜¬ BApp에 λŒ€ν•œ Deep Link (optional)

    requestKey

    String

    μš”μ²­ 번호

    onUnsupportedEnvironment

    Function

    λͺ¨λ°”일 ν™˜κ²½μ΄ μ•„λ‹Œ 경우 μ‹€ν–‰ ν•  콜백 ν•¨μˆ˜ (optional)

    requestKey

    String

    μš”μ²­ 번호

    contract

    String

    μ‘°νšŒν•  μΉ΄λ“œμ˜ μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ

    eoa

    String

    μ‘°νšŒν•  μ‚¬μš©μž μ£Όμ†Œ

    cursor

    String

    μ‘°νšŒν•  μ»€μ„œκ°’μž…λ‹ˆλ‹€. λ§Œμ•½, μ‘°νšŒν•  μΉ΄λ“œμ˜ 보유λͺ©λ‘μ΄ 100개 이상이면, λ‹€μŒ 100개 정보λ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€.(optional)

    -

    -

    Klip REST API μ—λŸ¬μ½”λ“œμ™€ 동일

    λ‹€μš΄λ‘œλ“œ
    QR code 예제
    개발자 포럼
    import { prepare, request, getResult, getCardList } from 'klip-sdk'
    <script src="./lib/klipSDK-2.3.2.min.js"></script>
    klipSDK.prepare(...)
    klipSDK.request(...)
    klipSDK.getResult(...)
    klipSDK.getCardList(...)
    const bappName = 'my app'
    const successLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const failLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const res = await prepare.auth({ bappName, successLink, failLink })
    if (res.err) {
      // μ—λŸ¬ 처리
    } else if (res.request_key) {
      // request_key 보관
    }
    const bappName = 'my app'
    const from = '0xB21F0285d27beb2373EC...'
    const to = '0xD8b1dC332...'
    const amount = '13.2'
    const successLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const failLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const res = await prepare.sendKLAY({ bappName, from, to, amount, successLink, failLink })
    if (res.err) {
      // μ—λŸ¬ 처리
    } else if (res.request_key) {
      // request_key 보관
    }
    const bappName = 'my app'
    const from = '0xB21F0285d27beb2373EC...'
    const to = '0xD8b1dC332...'
    const amount = '10.123'
    const contract = '0x813FB7677BbBAA...'
    const successLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const failLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const res = await prepare.sendToken({ bappName, from, to, amount, contract, successLink, failLink })
    if (res.err) {
      // μ—λŸ¬ 처리
    } else if (res.request_key) {
      // request_key 보관
    }
    const res = await prepare.sendCard({ bappName, from, to, id, contract, successLink, failLink })
    if (res.err) {
      setErrorMsg(res.err)
    } else {
      setRequestKey(res.request_key)
    }
    const bappName = 'my app'
    const from = '0xB21F0285d27beb2373EC...'
    const to = '0xD8b1dC332...'
    const value = '800000000'
    const abi = "{\"constant\":false,\"inputs\":[{\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"buyCard\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"}"
    const params =  "[\"2829\"]"
    const successLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const failLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const res = await prepare.executeContract({ bappName, from, to, value, abi, params, successLink, failLink })
    if (res.err) {
      // μ—λŸ¬ 처리
    } else if (res.request_key) {
      // request_key 보관
    }
    const bappName = 'my app'
    const value = 'original message ...'
    const from = '0xB21F0285d27beb2373EC...'
    const successLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const failLink = 'myApp://...' // Android ν”Œλž«νΌμ˜ 경우, 'intent://...' 둜 μž‘μ„±
    const res = await prepare.signMessage({ bappName, value, from, successLink, failLink })
    if (res.err) {
      // μ—λŸ¬ 처리
    } else if (res.request_key) {
      // request_key 보관
    }
    request(
      'b37f873d-32ce-4d5d-b72e-08d528e7fb8e', 
      () => alert('λͺ¨λ°”일 ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•΄μ£Όμ„Έμš”')
    );
    getResult('b37f873d-32ce-4d5d-b72e-08d528e7fb8e')
    const contract = '0xB21F0285d27beb2373EC...'
    const eoa = '0xD8b1dC332...'
    const cursor = ''
    getCardList({ contract, eoa, cursor })

    App2App

    이 νŽ˜μ΄μ§€μ—μ„œλŠ” BAppμ—μ„œ Klip을 ν™œμš©ν•˜κΈ° μœ„ν•œ App2App REST APIλ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.

    KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    ν˜„μž¬ 토큰/NFT 전솑 및 Smart Contract μ‹€ν–‰κ³Ό 같은 νŠΈλžœμž­μ…˜ μ„œλͺ… κΈ°λŠ₯은 카이아, 이더리움, 폴리곀 λ„€νŠΈμ›Œν¬μ— λŒ€ν•΄μ„œλ§Œ 싀행이 κ°€λŠ₯ν•˜λ©°, μΆ”ν›„ 지원이 ν™•λŒ€λ  μ˜ˆμ •μž…λ‹ˆλ‹€. λ‹€λ₯Έ λ„€νŠΈμ›Œν¬μ— λŒ€ν•œ Klip 연동이 ν•„μš”ν•˜λ‹€λ©΄ λ‹Ήμž₯은 WalletConnect μ‚¬μš©μ„ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    β€» κ°œμš”

    App2App APIλ₯Ό μ‚¬μš©ν•˜λŠ” λ‹¨κ³„λŠ” Prepare, Request, Result 3λ‹¨κ³„λ‘œ κ΅¬λΆ„λ©λ‹ˆλ‹€.

    • Klip APIλ₯Ό μ‚¬μš©ν•¨μ— μžˆμ–΄ μ‚¬μš©μžλŠ” (μ£Ό)μ•ˆλž©λΈ”λ‘μ²΄μΈμ»΄νΌλ‹ˆλ₯Ό μ‚¬μΉ­ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.

    • Klip API μ‚¬μš©μ— 따라 λ°œμƒν•˜λŠ” λͺ¨λ“  μ±…μž„μ€ μ „μ μœΌλ‘œ μ‚¬μš©μžμ—κ²Œ 있으며, (μ£Ό)μ•ˆλž©λΈ”λ‘μ²΄μΈμ»΄νΌλ‹ˆλŠ” μ‚¬μš©μž λ˜λŠ” 제3μžμ— λŒ€ν•΄ μ–΄λ– ν•œ μ±…μž„λ„ μ§€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    • Klip API μ‚¬μš©μžκ°€ κ³Όλ„ν•œ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ λ°œμƒμ‹œν‚€λŠ” μ‹œλ„ν•˜λŠ” λ“± λΆˆλ²• ν˜Ήμ€ 비정상적인 λ°©μ‹μœΌλ‘œ APIλ₯Ό μ‚¬μš©ν•˜λ €κ³  μ‹œλ„ν•˜λŠ” 경우, 사전 고지없이 API μ‚¬μš©μ΄ 차단될 수 μžˆμŠ΅λ‹ˆλ‹€.

    Prepare

    BAppμ—μ„œ μ–΄λ–€ μž‘μ—…μ„ μ‹€ν–‰ν•˜κ³  싢은지 μ •μ˜ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. "인증"을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€λŠ” 체인에 νŠΈλžœμž­μ…˜μ„ μ „μ†‘ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. νŠΈλžœμž­μ…˜ 전솑을 μœ„ν•΄ Prepare λ‹¨κ³„μ—μ„œλŠ” νŠΈλžœμž­μ…˜ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ‹€ν–‰ κ°€λŠ₯ν•œ μž‘μ—…μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    • 인증

    • 토큰 전솑

    • μΉ΄λ“œ 전솑

    • 슀마트 μ»¨νŠΈλž™νŠΈ μ‹€ν–‰

    인증

    BApp νšŒμ›μ˜ Klip 지갑에 μ ‘κ·Όν•˜κΈ° μœ„ν•œ 인증 μž‘μ—…μž…λ‹ˆλ‹€. BAppμ—μ„œ Klip μ‚¬μš©μžμ˜ λ₯Ό μ–»μ–΄μ•Όν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 이 κΈ°λŠ₯을 μœ„ν•œ Klip 둜그인 λ²„νŠΌμ„ μ œκ³΅ν•˜λŠ” 경우, λ²„νŠΌ μŠ€νƒ€μΌκ³Ό λ²„νŠΌλͺ…은 μ•„λž˜ κ°€μ΄λ“œλ₯Ό μ€€μˆ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    Klip 둜그인 λ²„νŠΌ κ°€μ΄λ“œ

    • Klip App2App λ²„νŠΌ μ œμž‘ κ°€μ΄λ“œ (, )

    • Klip App2App λ²„νŠΌ ν…œν”Œλ¦Ώ

    이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 경우, Klip 계정을 μ—°κ²° ν•΄μ§€ν•˜λŠ” κΈ°λŠ₯도 λ°˜λ“œμ‹œ μ œκ³΅ν•΄μ•Ό ν•˜λ©° ν•΄μ§€ μ‹œ μˆ˜μ§‘ν•œ μ‚¬μš©μž EOA 정보λ₯Ό μ¦‰μ‹œ μ‚­μ œν•΄μ•Ό ν•©λ‹ˆλ‹€.

    μœ„μ™€ 같은 쑰건이 μ§€μΌœμ§€μ§€ μ•Šμ„ 경우, 사전 고지없이 API μ‚¬μš©μ΄ 차단될 수 μžˆμŠ΅λ‹ˆλ‹€.

    토큰 전솑

    BApp νšŒμ›μ˜ Klip μ§€κ°‘μ—μ„œ λ‹€λ₯Έ 계정 μ£Όμ†Œ(EOA)둜 토큰(Fungible Token)을 μ „μ†‘ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. 토큰 전솑을 μœ„ν•œ νŠΈλžœμž­μ…˜ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ»¨νŠΈλž™νŠΈ μ£Όμ†Œμ— 0x0000000000000000000000000000000000000000 값을 μž…λ ₯ν•˜λ©΄ λ„€μ΄ν‹°λΈŒ 코인 (KAIA, ETH, MATIC λ“±) 전솑이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

    μΉ΄λ“œ 전솑

    BApp νšŒμ›μ˜ Klip μ§€κ°‘μ—μ„œ λ‹€λ₯Έ 계정 μ£Όμ†Œ(EOA)둜 μΉ΄λ“œ(Non-Fungible Token)을 μ „μ†‘ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. μΉ΄λ“œ 전솑을 μœ„ν•œ νŠΈλžœμž­μ…˜ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

    슀마트 μ»¨νŠΈλž™νŠΈ μ‹€ν–‰

    Klip κ³„μ •μœΌλ‘œ 슀마트 μ»¨νŠΈλž™νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. μ»¨νŠΈλž™νŠΈ 싀행을 μœ„ν•œ νŠΈλžœμž­μ…˜ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

    λ©”μ‹œμ§€ μ„œλͺ…

    Klip κ³„μ •μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ„œλͺ…ν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.

    Prepare API ν˜ΈμΆœμ— μ„±κ³΅ν•˜λ©΄ μ‘λ‹΅κ°’μœΌλ‘œ β€œμΈμ¦ν‚€"(Request Key)λ₯Ό λ°›μŠ΅λ‹ˆλ‹€. μΈμ¦ν‚€λŠ” Prepare λ‹¨κ³„μ—μ„œ μ •μ˜ν•œ μž‘μ—…μ„ μ‹€μ œλ‘œ μ‹€ν–‰ν•˜λ„λ‘ μš”μ²­ν•˜λŠ” "Request"와 κ²°κ³Όλ₯Ό ν™•μΈν•˜λŠ” "Result" λ‹¨κ³„μ—μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.

    Request

    μœ„ λ‹¨κ³„μ—μ„œ μ •μ˜ν•œ μž‘μ—…μ„ μ‹€μ œλ‘œ μ‹€ν–‰ν•˜λ„λ‘ μš”μ²­ν•©λ‹ˆλ‹€.

    "인증"은 BApp νšŒμ›μ˜ Klip μ§€κ°‘ μ£Όμ†Œ(EOA)λ₯Ό BApp으둜 λ°›μ•„μ˜€λŠ” μž‘μ—…μ΄λ©° κ·Έ 외에 λ‚˜λ¨Έμ§€ μž‘μ—…μ€ μœ„ νŠΈλžœμž­μ…˜μ— μ„œλͺ…(sign)을 λ°›λŠ” μž‘μ—…μž…λ‹ˆλ‹€. 이듀 4κ°€μ§€ μž‘μ—…μ€ 사싀 체인에 νŠΈλžœμž­μ…˜ 전솑을 μš”μ²­ν•˜λŠ” μž‘μ—…μ΄λ©° 토큰 전솑, KAIA 전솑, μΉ΄λ“œ 전솑, 슀마트 μ»¨νŠΈλž™νŠΈ μ‹€ν–‰ νŠΈλžœμž­μ…˜μ„ 체인에 μ „μ†‘ν•©λ‹ˆλ‹€. 이 λ‹¨κ³„μ—μ„œλŠ” 이듀 νŠΈλžœμž­μ…˜μ— 계정 ν‚€λ‘œ μ„œλͺ…ν•œ λ‹€μŒ 체인에 μ „μ†‘ν•©λ‹ˆλ‹€.

    인증 λ˜λŠ” μ„œλͺ…은 Deep Linkλ₯Ό 톡해 Klip에 μš”μ²­ν•©λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄, BApp νšŒμ› β€œA”가 λ‹€λ₯Έ BApp νšŒμ› β€œBβ€μ—κ²Œ 토큰 λ˜λŠ” μ•„μ΄ν…œμ„ μ „μ†‘ν•˜λŠ” λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ μ—¬λŸ¬λΆ„μ˜ BApp은 App2App APIλ₯Ό μ‚¬μš©ν•΄ β€œAβ€μ˜ Klip μ§€κ°‘ μ£Όμ†Œλ₯Ό 인증(이미 ν™•λ³΄ν•˜κ³  μžˆλ‹€λ©΄ μƒλž΅ κ°€λŠ₯)ν•˜κ³  β€œAβ€μ˜ Klip 지갑에 μ ‘κ·Όν•©λ‹ˆλ‹€. 그리고 μ „μ†‘ν•˜λ €λŠ” 토큰 λ˜λŠ” μΉ΄λ“œλ₯Ό β€œBβ€μ˜ 계정 μ£Όμ†Œμ— μ „μ†‘ν•˜λŠ” νŠΈλžœμž­μ…˜μ„ λ³΄λƒ…λ‹ˆλ‹€.

    Result

    λ§ˆμ§€λ§‰μœΌλ‘œ Result λ‹¨κ³„λŠ” Request λ‹¨κ³„μ—μ„œ μš”μ²­ν•œ μž‘μ—…μ„ μ‹€ν–‰ν–ˆμ„ λ•Œ κ²°κ³Ό λ˜λŠ” 응닡값을 μ–»λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

    APIλŠ” ν˜•νƒœμ— λ”°λΌμ„œ 두 κ°€μ§€λ‘œ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€. λ¨Όμ € Prepare와 Result μŠ€ν…μ€ Klip Backend μ„œλ²„λ‘œ μš”μ²­μ„ λ‚ λ¦¬λŠ” REST API ν˜•νƒœμ΄κ³ , Request μŠ€ν…μ€ Klip을 λ„μ›Œμ„œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ Deep Link ν˜•νƒœμž…λ‹ˆλ‹€. μ•žμ„  두 가지와 λ³„κ°œλ‘œ ν•„μš” μ‹œ μ‚¬μš©μžμ˜ μΉ΄λ“œ μ†Œμœ  정보λ₯Ό μ–»κΈ°μœ„ν•œ REST API ν˜•νƒœμ˜ μš”μ²­μ΄ μžˆμŠ΅λ‹ˆλ‹€.

    β€» API Flow Diagram

    App2App 처리λ₯Ό μœ„ν•œ λŒ€λž΅μ μΈ 흐름은 μ•„λž˜ κ·Έλ¦Όκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    API μš”μ²­κ³Ό λ³„κ°œλ‘œ μΉ΄λ“œ 정보 μ‘°νšŒλŠ” 일반적인 REST API 호좜 흐름과 λ™μΌν•©λ‹ˆλ‹€. Klip κ±°μΉ˜μ§€ μ•Šκ³  Backend에 μš”μ²­ν•˜μ—¬ 정보λ₯Ό λ°›μ•„μ˜΅λ‹ˆλ‹€. 흐름은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    Deep LinkλŠ” μ•„λž˜μ™€ 같은 ν˜•νƒœμ˜ 링크이고, BApp μœ μ €κ°€ ν΄λ¦­ν–ˆμ„ λ•Œ 클립 앱을 μ‹€ν–‰ν•˜κ±°λ‚˜ μ„€μΉ˜ν•  수 μžˆλ„λ‘ μœ λ„λ©λ‹ˆλ‹€. request_key ν•„λ“œμ—λŠ” Prepare κ³Όμ •μ—μ„œ μ‘λ‹΅μœΌλ‘œ 전달받은 값을 μ‚¬μš©ν•©λ‹ˆλ‹€.

    β€» API Specification

    App2App API μ„ΈλΆ€ μŠ€νŽ™μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    Prepare

    POST https://a2a-api.klipwallet.com/v2/a2a/prepare

    App2App API μš”μ²­ 처리λ₯Ό μ€€λΉ„ν•˜κ³  request keyλ₯Ό λ°œκΈ‰ν•©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    bapp object μ˜ˆμ‹œ

    name은 인증 λ˜λŠ” μ„œλͺ… μ‹œ Klip μ‚¬μš©μž 화면에 ν‘œμ‹œλ  BApp의 μ΄λ¦„μž…λ‹ˆλ‹€. callback의 success ν•„λ“œλŠ” Klipμ—μ„œ μ‚¬μš©μž 확인이 μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λμ„ λ•Œ BApp으둜 λŒμ•„κ°€κΈ° μœ„ν•œ Deep Linkμž…λ‹ˆλ‹€. fail은 λ°˜λŒ€λ‘œ μ‹€νŒ¨ν•œ 경우 BApp으둜 λŒμ•„κ°€κΈ° μœ„ν•œ Deep Linkμž…λ‹ˆλ‹€. Android ν”Œλž«νΌμ˜ 경우, Intent Scheme ν˜•μ‹(intent://..)의 Deep Link둜 μž‘μ„±μ΄ ν•„μš”ν•©λ‹ˆλ‹€. callback κ°μ²΄λŠ” optionalμž…λ‹ˆλ‹€. kas_authorization_key λŠ” optional이며, BAppμ—μ„œ νŠΈλžœμž­μ…˜ 수수료λ₯Ό λŒ€λ‚©ν•˜κ³ μž ν•  경우 μ‚¬μš©ν•˜λŠ” KAS (Klaytn API Service) 인증 μ •λ³΄μž…λ‹ˆλ‹€. KAS λŒ€λ‚© μ„œλΉ„μŠ€ ꡬ독 및 authorization key λ°œκΈ‰ 방법은 λ₯Ό μ°Έκ³ ν•˜μ‹œκΈ° 바라며, λ¬Έμ˜μ‚¬ν•­μ€ λ₯Ό μ΄μš©ν•˜μ—¬ μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    transaction object μ˜ˆμ‹œ

    1. type: send_token

    contractλŠ” ν† ν°μ˜ 슀마트 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œμž…λ‹ˆλ‹€ (λ„€μ΄ν‹°λΈŒ μ½”μΈμ˜ 경우 0x0000000000000000000000000000000000000000 μž…λ ₯). toλŠ” 토큰을 μ „μ†‘λ°›λŠ” μ‚¬λžŒμ˜ 계정 μ£Όμ†Œμž…λ‹ˆλ‹€. amountλ₯Ό 받을 토큰 μ–‘μž…λ‹ˆλ‹€. 참고둜, amountλŠ” μ»¨νŠΈλž™νŠΈ λ‚΄ decimal을 λ°˜μ˜ν•˜μ—¬ μžλ™μœΌλ‘œ ν™˜μ‚°λ˜λŠ” μˆ˜μΉ˜μž…λ‹ˆλ‹€. 예λ₯Ό λ“€λ©΄, 18 decimal의 FT μ»¨νŠΈλž™νŠΈμ—μ„œ amount 1은 10^18 개의 μ΅œμ†Œ λ‹¨μœ„ 토큰을 μ˜λ―Έν•˜κ²Œ λ©λ‹ˆλ‹€. from은 Klip μ‚¬μš©μžμ˜ μ£Όμ†Œμž…λ‹ˆλ‹€. from은 optional ν•„λ“œμ΄κ³  Klip μ‚¬μš©μžμ˜ μ‹€μ œ μ£Όμ†Œμ™€ λΉ„κ΅ν•˜μ—¬ μ˜λ„ν•˜μ§€ μ•Šμ€ μš”μ²­μ„ κ²€μ‚¬ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

    2. type: send_card

    contractλŠ” NFT의 슀마트 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œμž…λ‹ˆλ‹€. toλŠ” μΉ΄λ“œλ₯Ό μ „μ†‘λ°›λŠ” μ‚¬λžŒμ˜ μ£Όμ†Œμž…λ‹ˆλ‹€. card_idλŠ” 전솑할 μΉ΄λ“œμ˜ κ³ μœ λ²ˆν˜Έμž…λ‹ˆλ‹€. from은 Klip μ‚¬μš©μžμ˜ μ£Όμ†Œμž…λ‹ˆλ‹€. from은 optional ν•„λ“œμ΄κ³  Klip μ‚¬μš©μžμ˜ μ‹€μ œ μ£Όμ†Œμ™€ λΉ„κ΅ν•˜μ—¬ μ˜λ„ν•˜μ§€ μ•Šμ€ μš”μ²­μ„ κ²€μ‚¬ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

    3. type: execute_contract

    toλŠ” μ‹€ν–‰ν•  슀마트 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œμž…λ‹ˆλ‹€. valueλŠ” ν•΄λ‹Ή μ»¨νŠΈλž™νŠΈμ— 전솑할 μ½”μΈμ˜ μˆ˜λŸ‰μž…λ‹ˆλ‹€. value의 λ‹¨μœ„λŠ” μ‹€μ œ ν•΄λ‹Ή 체인의 νŠΈλžœμž­μ…˜ 생성 μΈμžμ™€ λ™μΌν•©λ‹ˆλ‹€. Kaia κΈ°μ€€μœΌλ‘œ λ‹¨μœ„λŠ” kei이며, 1 KAIAλŠ” 1000000000000000000 (10^18) keiμž…λ‹ˆλ‹€. abiλŠ” μ‹€ν–‰ν•  μ»¨νŠΈλž™νŠΈ ν•¨μˆ˜ μ •λ³΄μž…λ‹ˆλ‹€. paramsλŠ” ν•΄λ‹Ή ν•¨μˆ˜μ— λ„˜κ²¨μ€„ μΈμžκ°’μž…λ‹ˆλ‹€. μ΅œμ‹  버전 λΆ€ν„°λŠ” tuple νƒ€μž…λ„ μ§€μ›ν•©λ‹ˆλ‹€. abi 와 param λŒ€μ‹ μ— encoded_function_call을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. encoded_function_call 에 tx의 data에 λ“€μ–΄κ°ˆ 정보λ₯Ό μž…λ ₯ν•΄μ£Όλ©΄ ν•΄λ‹Ή 값을 μ‚¬μš©ν•˜μ—¬ txλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€. abi, param ν˜Ήμ€ encoded_function_call 쀑 ν•˜λ‚˜λ§Œμ„ μ‚¬μš©ν•˜μ—¬ txλ₯Ό μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 값은 λΉ„μ›Œμ Έ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. from은 Klip μ‚¬μš©μžμ˜ μ£Όμ†Œμž…λ‹ˆλ‹€. from

    from은 optional ν•„λ“œμ΄μ§€λ§Œ νŠΈλžœμž­μ…˜ 처리 μ‹œ μ›λž˜ μ˜λ„ν–ˆλ˜ Klip μ‚¬μš©μžκ°€ λ§žλŠ”μ§€ κ²€μ¦ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ˜λ―€λ‘œ κ°€λŠ₯ν•˜λ©΄ μ„€μ •ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

    message object μ˜ˆμ‹œ

    1. type: sign_message

    from은 Klip μ‚¬μš©μžμ˜ μ£Όμ†Œμž…λ‹ˆλ‹€. Klip μ‚¬μš©μžμ˜ μ‹€μ œ μ£Όμ†Œμ™€ λΉ„κ΅ν•˜μ—¬ μ˜λ„ν•˜μ§€ μ•Šμ€ μš”μ²­μ„ κ²€μ‚¬ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. 선택 ν•­λͺ©μ΄λ―€λ‘œ μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. is_hex_encodedλŠ” λ©”μ‹œμ§€ μ›λ¬Έμ˜ 데이터 νƒ€μž…μž…λ‹ˆλ‹€. true 일 경우 μ„œλͺ… 값을 λ°μ΄ν„°μ˜ hex encoding 된 byte λ°°μ—΄λ‘œ νŒλ‹¨ν•˜μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€. μƒλž΅ν•˜κ±°λ‚˜ false 일 κ²½μš°λŠ” λ¬Έμžμ—΄λ‘œ νŒλ‹¨ν•©λ‹ˆλ‹€. valueλŠ” μ„œλͺ…ν•  λ©”μ‹œμ§€μ˜ μ›λ¬Έμž…λ‹ˆλ‹€. is_hex_encoded κ°€ true 일 경우 0x 둜 μ‹œμž‘ν•˜λŠ” hex encoding된 byte 배열이여야 ν•©λ‹ˆλ‹€.

    2. type: sign_message_eip191

    sign_message_eip191은 기본적으둜 sign_message와 λ™μΌν•˜κ²Œ Klip μ‚¬μš©μžμ˜ 계정 ν‚€λ‘œ λ©”μ‹œμ§€λ₯Ό μ„œλͺ…ν•˜λŠ” 역할을 μˆ˜ν–‰ν•˜λ‚˜, sign_messageλŠ” Klaytn의 ν‘œμ€€μ— 따라 "\x19Klaytn Signed Message:\n" + len(message)의 접두사λ₯Ό 뢙이고, sign_message_eip191은 Kaia의 ν‘œμ€€μ— 따라 "\x19Ethereum Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μΈλ‹€λŠ” 차이점이 μžˆμŠ΅λ‹ˆλ‹€. Kaiaμ—μ„œ λ³€κ²½λœ λ©”μ‹œμ§€ μ„œλͺ… ν‘œμ€€μ˜ 변화에 λŒ€ν•΄μ„œλŠ” λ₯Ό μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€. from은 Klip μ‚¬μš©μžμ˜ μ£Όμ†Œμž…λ‹ˆλ‹€. Klip μ‚¬μš©μžμ˜ μ‹€μ œ μ£Όμ†Œμ™€ λΉ„κ΅ν•˜μ—¬ μ˜λ„ν•˜μ§€ μ•Šμ€ μš”μ²­μ„ κ²€μ‚¬ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€. 선택 ν•­λͺ©μ΄λ―€λ‘œ μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. is_hex_encodedλŠ” λ©”μ‹œμ§€ μ›λ¬Έμ˜ 데이터 νƒ€μž…μž…λ‹ˆλ‹€. true 일 경우 μ„œλͺ… 값을 λ°μ΄ν„°μ˜ hex encoding 된 byte λ°°μ—΄λ‘œ νŒλ‹¨ν•˜μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€. μƒλž΅ν•˜κ±°λ‚˜ false 일 κ²½μš°λŠ” λ¬Έμžμ—΄λ‘œ νŒλ‹¨ν•©λ‹ˆλ‹€. valueλŠ” μ„œλͺ…ν•  λ©”μ‹œμ§€μ˜ μ›λ¬Έμž…λ‹ˆλ‹€. is_hex_encoded κ°€ true 일 경우 0x 둜 μ‹œμž‘ν•˜λŠ” hex encoding된 byte 배열이여야 ν•©λ‹ˆλ‹€.

    3. type: sign_typedData_v4

    μ—¬κΈ°μ—μ„œ vaule 값은 EIP-712μ—μ„œ μ •μ˜λœ json ν˜•νƒœμ˜ κ΅¬μ‘°ν™”λœ λ©”μ‹œμ§€λ‘œμ¨, μ •ν™•ν•œ μŠ€νŽ™μ€ λ₯Ό μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    Request Example

    Response Details

    λͺ…μΉ­
    ν˜•μ‹
    μ„€λͺ…

    statusλŠ” prepared, requested, completed, canceled, error μƒνƒœμ€‘ ν•˜λ‚˜λ₯Ό κ°€μ§‘λ‹ˆλ‹€. canceled μƒνƒœλŠ” μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ App2App 진행을 μ·¨μ†Œν–ˆμ„ λ•Œ μ„€μ •λ©λ‹ˆλ‹€.

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Request

    DEEP LINK https://klipwallet.com?target=/a2a?request_key=

    Klip에 인증 λ˜λŠ” μ„œλͺ…을 μš”μ²­ν•˜κΈ° μœ„ν•œ μ˜ˆμ œλŠ” μ•„λž˜ Request Example ν•­λͺ©μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    Query Parameters

    Name
    Type
    Description

    Request Example

    μ•„λž˜ μ˜ˆμ œμ—μ„œ request_key ν•„λ“œλŠ” Prepare μŠ€ν…μ—μ„œ 얻은 κ°’μœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

    iOS λ˜λŠ” Android ν™˜κ²½

    μœ„ Deep Linkλ₯Ό 톡해 클립 앱을 μ‹€ν–‰ν•˜κ±°λ‚˜ μ„€μΉ˜ν•  수 μžˆλ„λ‘ μœ λ„λ©λ‹ˆλ‹€.

    PC λ˜λŠ” 이기쒅 λ””λ°”μ΄μŠ€ ν™˜κ²½ (QR code)

    μ•„λž˜μ™€ 같은 URL ν˜•μ‹μœΌλ‘œ QR codeλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” 클립 μ•± λ˜λŠ” λ„€μ΄ν‹°λΈŒ 카메라앱λ₯Ό 톡해 QR codeλ₯Ό μΈμ‹ν•˜μ—¬ App2App μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    QR code 생성을 μœ„ν•΄μ„œ 개발 ν™˜κ²½λ³„λ‘œ μ•„λž˜ μ˜€ν”ˆμ†ŒμŠ€ ν”„λ‘œμ νŠΈλ₯Ό μ°Έκ³ ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

    • JavaScript : https://www.npmjs.com/package/qrcode

    • Android : https://github.com/zxing/zxing

    Result

    GET https://a2a-api.klipwallet.com/v2/a2a/result?request_key=

    App2App API μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

    Query Parameters

    Name
    Type
    Description

    Request Example

    Response Details

    1. type: auth

    λͺ…μΉ­
    ν˜•μ‹
    μ„€λͺ…

    statusλŠ” prepared, requested, completed, canceled, error μƒνƒœμ€‘ ν•˜λ‚˜λ₯Ό κ°€μ§‘λ‹ˆλ‹€. canceled μƒνƒœλŠ” μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ App2App 진행을 μ·¨μ†Œν–ˆμ„ λ•Œ μ„€μ •λ©λ‹ˆλ‹€.

    2. type: send_klay, send_token, send_card, execute_contract

    λͺ…μΉ­
    ν˜•μ‹
    μ„€λͺ…

    result object의 status ν•„λ“œλŠ” pending μƒνƒœμ˜ 경우, μ‚¬μš©μžκ°€ Klipμ—μ„œ ν™•μΈν–ˆμžλ§Œ, μ²΄μΈμ—μ„œ 아직 νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” μ€‘μž„μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 일반적으둜 λͺ‡ μ΄ˆν›„μ— λ‹€μ‹œ ν™•μΈν•˜λ©΄ μš”μ²­λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 그리고 successλŠ” μš”μ²­μ΄ μ„±κ³΅μ μœΌλ‘œ μ²˜λ¦¬λμ„ λ•Œ, fail은 μš”μ²­μ΄ μ‹€νŒ¨ν–ˆμ„ λ•Œμ˜ μƒνƒœλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

    3. type: sign_message, sign_message_eip191

    λͺ…μΉ­
    ν˜•μ‹
    μ„€λͺ…

    result 였브젝트의 signature ν•„λ“œλŠ” μš”μ²­λœ 원문에 μ„œλͺ…ν•œ κ²°κ³Όμž…λ‹ˆλ‹€. statusλŠ” prepared, requested, completed, canceled, error μƒνƒœ 쀑 ν•˜λ‚˜λ₯Ό κ²°κ³Όκ°’μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€. canceledλŠ” μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ App2App 진행을 μ·¨μ†Œν–ˆμ„ λ•Œ λ°˜ν™˜λ©λ‹ˆλ‹€.

    4. type: sign_typedData_v4

    λͺ…μΉ­
    ν˜•μ‹
    μ„€λͺ…

    result 였브젝트의 signature ν•„λ“œλŠ” μš”μ²­λœ 원문에 μ„œλͺ…ν•œ κ²°κ³Όμž…λ‹ˆλ‹€. statusλŠ” prepared, requested, completed, canceled, error μƒνƒœ 쀑 ν•˜λ‚˜λ₯Ό κ²°κ³Όκ°’μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€. canceledλŠ” μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ App2App 진행을 μ·¨μ†Œν–ˆμ„ λ•Œ λ°˜ν™˜λ©λ‹ˆλ‹€.

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Get Card Information

    GET https://a2a-api.klipwallet.com/v2/a2a/cards?cursor=

    μ‚¬μš©μž EOA와 NFT μ»¨νŠΈλž™νŠΈ μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜κ³ , 이 μ‚¬μš©μžκ°€ μ†Œμœ ν•œ μΉ΄λ“œ μ€‘μ—μ„œ 이 NFT μ»¨νŠΈλž™νŠΈμ—μ„œ λ°œν–‰ν•œ μΉ΄λ“œ λͺ©λ‘μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

    Query Parameters

    Name
    Type
    Description

    Request Example

    Response Details

    λͺ…μΉ­
    ν˜•μ‹
    μ„€λͺ…

    Response Details for cards[i]

    λͺ…μΉ­
    ν˜•μ‹
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    λ©”μ‹œμ§€ μ„œλͺ…

    message

    object

    μ„œλͺ…ν•  λ°μ΄ν„°μž…λ‹ˆλ‹€. fromκ³Ό value 값을 ν¬ν•¨ν•˜λ©° from은 μƒλž΅ κ°€λŠ₯ν•©λ‹ˆλ‹€. sign_message νƒ€μž…μΈ 경우 이 ν•„λ“œλ₯Ό ν•„μˆ˜μ μœΌλ‘œ κΈ°μž…ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έ μ™Έμ˜ νƒ€μž…μ—μ„œλŠ” μ„€μ •ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œλ₯Ό μ°Έκ³ ν•˜μ‹­μ‹œμ˜€.

    은 optional ν•„λ“œμ΄κ³  Klip μ‚¬μš©μžμ˜ μ‹€μ œ μ£Όμ†Œμ™€ λΉ„κ΅ν•˜μ—¬ μ˜λ„ν•˜μ§€ μ•Šμ€ μš”μ²­μ„ κ²€μ‚¬ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
    abi
    및
    params
    의 ꡬ체적인 μ˜ˆμ‹œλŠ” νŠœν† λ¦¬μ–Όμ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    Error

    object

    νŠΈλžœμž­μ…˜μ΄ μ‹€νŒ¨(revert)ν•  κ°€λŠ₯성이 μžˆκ±°λ‚˜ execute_contract μš”μ²­μ—μ„œ params 값이 μ μ ˆν•˜μ§€ μ•Šμ€ 경우 μ—λŸ¬λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 1. revert from μ£Όμ†Œμ™€ ν•¨κ»˜ μš”μ²­ μ‹œ νŠΈλžœμž­μ…˜μ„ κ²€μ¦ν•˜μ—¬ revert λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. λ˜λŒμ•„κ°ˆ κ°€λŠ₯성이 있기 λ•Œλ¬Έμ— νŠΈλžœμž­μ…˜μ„ μƒμ„±ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή μ˜€λΈŒμ νŠΈλŠ” code와 messageλ₯Ό λ°˜ν™˜ν•˜λ©° revert 상황일 λ•Œ 값은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. messageλŠ” νŠΈλžœμž­μ…˜μ΄ λ˜λŒμ•„κ°€λŠ” 원인을 string으둜 ν¬ν•¨ν•©λ‹ˆλ‹€. "error":{"code":6414,"message":(revert 원인)} 2. params error paramsλŠ” abi의 νƒ€μž…μ— λ§žλŠ” 데이터λ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€. address type에 숫자(222)λ₯Ό 넣을 경우 λ‹€μŒμ²˜λŸΌ μ—λŸ¬λ₯Ό λ°˜ν™˜ ν•©λ‹ˆλ‹€. ν•„λ“œλͺ…을 ν•¨κ»˜ λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— μ–΄λ–€ param이 잘λͺ» μž…λ ₯λ˜μ—ˆλŠ”μ§€ μ°ΎλŠ”λ° 도움을 μ€λ‹ˆλ‹€. "error":{"code":6408,"message":"dummy_arg_name: [(json.Number)222] is not (address)"}

    iOS : https://github.com/EFPrefix/EFQRCode

    hash

    string

    원문에 λŒ€ν•΄ 각 μ²΄μΈμ—μ„œ 미리 μ •ν•΄μ§„ 데이터λ₯Ό λΆ™μ—¬ ν•΄μ‹±ν•œ κ°’μž…λ‹ˆλ‹€. μ‹€μ œλ‘œ μ„œλͺ…에 μ‚¬μš©λ˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.

    hash

    string

    원문에 λŒ€ν•΄ EIP191 ν‘œμ€€μ— μ •μ˜λœ prefixλ₯Ό λΆ™μ—¬ ν•΄μ‹±ν•œ κ°’μž…λ‹ˆλ‹€. μ‹€μ œλ‘œ μ„œλͺ…에 μ‚¬μš©λ˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.

    card_id

    number

    μΉ΄λ“œ IDμž…λ‹ˆλ‹€.

    card_uri

    string

    μΉ΄λ“œ 메타데이터가 λ‹΄κΈ΄ JSON 파일 URLμž…λ‹ˆλ‹€.

    transaction_hash

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ νŠΈλžœμž­μ…˜ ν•΄μ‹œμž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    chain

    string

    App2App API μš”μ²­μ„ μˆ˜ν–‰ν•  체인 μ •λ³΄μž…λ‹ˆλ‹€. klaytn, ethereum, polygon λ“± μ„Έ μ’…λ₯˜μ˜ 체인을 μ§€μ›ν•˜λ©° 기본값은 klaytnμž…λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œλ₯Ό μ°Έκ³ ν•˜μ‹­μ‹œμ˜€. μ‹€μ œλ‘œλŠ” Kaia 체인과 μƒν˜Έμž‘μš©ν•˜μ§€λ§Œ ν˜Έν™˜μ„± μœ μ§€λ₯Ό μœ„ν•΄ klaytn λͺ…칭이 μ‚¬μš©λ©λ‹ˆλ‹€. λ‹€λ₯Έ 체인의 μ§€κ°‘ μ£Όμ†Œλ₯Ό μ–»κΈ° μœ„ν•΄ type=auth둜 μš”μ²­ν•˜λŠ” κ²½μš°μ—λ„ μœ„ μ„Έ 값을 μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  μ§€κ°‘ μ£Όμ†Œκ°€ 일괄 λ°˜ν™˜λ©λ‹ˆλ‹€.

    bapp*

    object

    App2App API μš”μ²­μ„ μˆ˜ν–‰ν•  BApp μ •λ³΄μž…λ‹ˆλ‹€. 이름과 callback URL둜 Deep Linkλ₯Ό ν•¨κ»˜ 전달할 수 μžˆμŠ΅λ‹ˆλ‹€. callback ν•„λ“œλŠ” μ˜΅μ…”λ„μž…λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œλ₯Ό μ°Έκ³ ν•˜μ‹­μ‹œμ˜€.

    type*

    string

    App2App API μš”μ²­ typeμž…λ‹ˆλ‹€. 인증은 auth, 코인 및 토큰 전솑은 send_token, μΉ΄λ“œ 전솑은 send_card, λ©”μ‹œμ§€ μ„œλͺ…은 sign_message, sign_message_eip191, sign_typedData_v4, λ§ˆμ§€λ§‰μœΌλ‘œ μ»¨νŠΈλž™νŠΈ 싀행은 execute_contractμž…λ‹ˆλ‹€.

    transaction

    object

    μ„œλͺ…ν•  λ°μ΄ν„°μž…λ‹ˆλ‹€. to, amount, contract λ“±μ˜ 정보가 λ“€μ–΄κ°€λ©° 전솑 μš”μ²­ typeλ³„λ‘œ ν•„μš”ν•œ ν•„λ“œλ₯Ό μ„ΈνŒ…ν•΄μ•Όν•©λ‹ˆλ‹€. auth, sign_messageλ₯Ό μ œμ™Έν•œ μš”μ²­ νƒ€μž…μ€ 이 ν•„λ“œλ₯Ό ν•„μˆ˜μ μœΌλ‘œ κΈ°μž…ν•΄μ•Όν•©λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œλ₯Ό μ°Έκ³ ν•˜μ‹­μ‹œμ˜€.

    request_key

    string

    μš”μ²­μ„ μœ λ‹ˆν¬ν•˜κ²Œ κ΅¬λΆ„ν•œ ν‚€κ°’μž…λ‹ˆλ‹€. Request, Result API 호좜 μ‹œ μ‚¬μš©ν•©λ‹ˆλ‹€.

    status

    string

    API μš”μ²­μ˜ ν˜„μž¬ μƒνƒœμž…λ‹ˆλ‹€. 기본적으둜 prepared μƒνƒœκ°€ λ©λ‹ˆλ‹€.

    expiration_time

    number

    request key 만료 μ‹œκ°„μ„ unix timestamp둜 ν‘œν˜„ν•œ κ°’μž…λ‹ˆλ‹€.

    estimated_gas

    number

    νŠΈλžœμž­μ…˜μ„ λ°œμƒμ‹œν‚€λŠ” μš”μ²­μ΄λ©΄μ„œ from 값이 μ‘΄μž¬ν•  경우 μ‹€μ œ νŠΈλžœμž­μ…˜ 생성에 μ‚¬μš©λ  gasLimit κ°’μž…λ‹ˆλ‹€.

    request_key*

    string

    Prepare λ‹¨κ³„μ—μ„œ 얻은 request keyλ₯Ό μ „λ‹¬ν•˜μ‹­μ‹œμ˜€. request_keyλ₯Ό ν†΅ν•΄μ„œ μš”μ²­μ„ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

    request_key*

    string

    Prepare λ‹¨κ³„μ—μ„œ 얻은 request keyλ₯Ό μ „λ‹¬ν•˜μ‹­μ‹œμ˜€. request_keyλ₯Ό ν†΅ν•΄μ„œ μš”μ²­μ„ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.

    request_key

    string

    μš”μ²­ ν‚€κ°’μž…λ‹ˆλ‹€.

    expiration_time

    number

    request key 만료 μ‹œκ°„μ„ unix timestamp둜 ν‘œν˜„ν•œ κ°’μž…λ‹ˆλ‹€.

    status

    string

    API μš”μ²­μ˜ ν˜„μž¬ μƒνƒœμž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ—ˆλ‹€λ©΄ completed μƒνƒœκ°€ λ¦¬ν„΄λ©λ‹ˆλ‹€.

    result

    object

    μ§€κ°‘ μ—°λ™μ˜ κ²°κ³Όμž…λ‹ˆλ‹€. μ§€κ°‘ μ£Όμ†Œκ°€ μ²΄μΈλ³„λ‘œ λ°˜ν™˜λ©λ‹ˆλ‹€. 클립은 EVM ν˜Έν™˜ 체인듀 간에 λ™μΌν•œ μ£Όμ†Œλ₯Ό κ°€μ§€λ©°, evm_address둜 λ°˜ν™˜λ©λ‹ˆλ‹€. 이 값은 klaytn_address와 λ™μΌν•©λ‹ˆλ‹€. 아직 μ‚¬μš©μžκ°€ 앱을 μ—…λ°μ΄νŠΈν•˜μ§€ μ•Šμ•„ μ‹ κ·œ 체인의 지갑을 μƒμ„±ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” 일뢀 λˆ„λ½λ  수 μžˆμŠ΅λ‹ˆλ‹€.

    request_key

    string

    μš”μ²­ ν‚€κ°’μž…λ‹ˆλ‹€.

    expiration_time

    number

    request key 만료 μ‹œκ°„μ„ unix timestamp둜 ν‘œν˜„ν•œ κ°’μž…λ‹ˆλ‹€.

    status

    string

    API μš”μ²­μ˜ ν˜„μž¬ μƒνƒœμž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ—ˆλ‹€λ©΄ completed μƒνƒœκ°€ λ¦¬ν„΄λ©λ‹ˆλ‹€.

    result

    object

    μ„œλͺ… μš”μ²­μ˜ κ²°κ³Όμž…λ‹ˆλ‹€. transaction hash와 ν•΄λ‹Ή transaction의 처리 μƒνƒœκ°€ λ¦¬ν„΄λ©λ‹ˆλ‹€.

    request_key

    string

    μš”μ²­ ν‚€ κ°’μž…λ‹ˆλ‹€.

    expiration_time

    number

    request key 만료 μ‹œκ°„μ„ unix timestamp둜 ν‘œν˜„ν•œ κ°’μž…λ‹ˆλ‹€.

    status

    string

    API μš”μ²­ μƒνƒœμž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ—ˆλ‹€λ©΄ completedλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

    signature

    string

    μ„œλͺ… μš”μ²­μ˜ κ²°κ³Όμž…λ‹ˆλ‹€. 원문에 λŒ€ν•œ μ„œλͺ…이 전달 λ©λ‹ˆλ‹€. μ„œλͺ…μ˜ v 값은 27 ν˜Ήμ€ 28μž…λ‹ˆλ‹€. μš”μ²­ type이 sign_message인 κ²½μš°μ—λŠ” "\x19Klaytn Signed Message:\n" + len(message)의 접두사λ₯Ό 뢙이고, sign_message_eip191은 "\x19Ethereum Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μ—¬ μ„œλͺ…ν•©λ‹ˆλ‹€.

    request_key

    string

    μš”μ²­ ν‚€ κ°’μž…λ‹ˆλ‹€.

    expiration_time

    number

    request key 만료 μ‹œκ°„μ„ unix timestamp둜 ν‘œν˜„ν•œ κ°’μž…λ‹ˆλ‹€.

    status

    string

    API μš”μ²­ μƒνƒœμž…λ‹ˆλ‹€. μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ—ˆλ‹€λ©΄ completedλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

    signature

    string

    μ„œλͺ… μš”μ²­μ˜ κ²°κ³Όμž…λ‹ˆλ‹€. 원문에 "\x19Ethereum Signed Message:\n" + len(message)의 접두사λ₯Ό λΆ™μ—¬ μ„œλͺ…이 μ „λ‹¬λ©λ‹ˆλ‹€. μ„œλͺ…μ˜ v 값은 27 ν˜Ήμ€ 28μž…λ‹ˆλ‹€.

    chain

    string

    μ†Œμœ  정보λ₯Ό μ‘°νšŒν•  체인λͺ…μž…λ‹ˆλ‹€. (klaytn, ethereum, polygon)

    sca*

    string

    μ†Œμœ  정보λ₯Ό μ‘°νšŒν•  smart contract addressμž…λ‹ˆλ‹€.

    eoa*

    string

    μ–΄λ–€ μ‚¬μš©μž EOA의 μΉ΄λ“œ μ†Œμœ  정보λ₯Ό μ–»μ–΄μ˜¬μ§€ νŠΉμ •ν•©λ‹ˆλ‹€. 일반적으둜 App2App auth μš”μ²­μ„ 톡해 얻은 EOAλ₯Ό 인자둜 μ‚¬μš©ν•©λ‹ˆλ‹€.

    cursor

    string

    μΉ΄λ“œ λ³΄μœ λŸ‰μ΄ 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό λ°›λŠ” μ»€μ„œκ°’μž…λ‹ˆλ‹€.

    name

    string

    이 Contract μ΄λ¦„μž…λ‹ˆλ‹€.

    symbol_img

    string

    이 Contract symbol image URLμž…λ‹ˆλ‹€.

    cards

    array

    각 μΉ΄λ“œ 정보λ₯Ό 담은 object λ°°μ—΄μž…λ‹ˆλ‹€.

    next_cursor

    string

    μΉ΄λ“œ 결과값이 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό 뢈러올 μ»€μ„œκ°’μž…λ‹ˆλ‹€.

    created_at

    number

    μΉ΄λ“œκ°€ λ°œν–‰λœ μ‹œκ°„μž…λ‹ˆλ‹€.

    updated_at

    number

    μΉ΄λ“œκ°€ μ—…λ°μ΄νŠΈλœ μ‹œκ°„μž…λ‹ˆλ‹€.

    owner

    string

    이 계정 EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    sender

    string

    이 κ³„μ •μœΌλ‘œ μΉ΄λ“œλ₯Ό 보낸 μ‚¬λžŒμ˜ EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    EOA
    pdf
    figma
    λ‹€μš΄λ‘œλ“œ
    이 λ¬Έμ„œ
    KAS ν—¬ν”„μ„Όν„°
    μ—¬κΈ°
    μ—¬κΈ°
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    개발자 포럼
    App2App Flow
    App2App Information API Flow
    QR code μƒ˜ν”Œ
    https://klipwallet.com?target=/a2a?request_key=9892...4aeb
    {
      "request_key": "random key",
      "status": "prepared",
      "expiration_time": 12345 //unix timestamp
    }
    {
      "bapp": {
        "name": "My BApp",
        "callback": { // all optional
          "success": "myApp://...", // Android ν”Œλž«νΌμ˜ 경우, "intent://..." 둜 μž‘μ„±
          "fail": "myApp://..." // Android ν”Œλž«νΌμ˜ 경우, "intent://..." 둜 μž‘μ„±
        },
       "kas_authorization_key": "Basic abcdefghijklmnopqrstuvwxyz0123456789="
      }
    }
    {
      "transaction": {
        "contract": "SCA",
        "from": "0x8756...4321", // optional
        "to": "0x1234...5678",
        "amount": "100",
      }
    }
    {
      "transaction": {
        "contract": "0xA987...4321",
        "from": "0x8756...4321", // optional
        "to": "0x1234...5678",
        "card_id": "100",
      }
    }
    {
      "transaction": {
        "from": "0x8756...4321", // optional
        "to": "0xA987...4321", // contract address
        "value": "1000000000000000000", // λ‹¨μœ„λŠ” μ‹€μ œ νŠΈλžœμž­μ…˜μ˜ value λ‹¨μœ„μ™€ 동일
        "abi": "...",
        "params": "...",
        "encoded_function_call": "0x123...23fe23"
      }
    }
    {
     "message": {
      "from": "0x8756...4321", // optional
      "value": "message original", // μ„œλͺ…ν•  원문
      "is_hex_encoded": true or false // optional. defaultλŠ” false.
     }
    }
    {
     "message": {
      "from": "0x8756...4321", // optional
      "value": "message original", // μ„œλͺ…ν•  원문
      "is_hex_encoded": true or false // optional. defaultλŠ” false.
     }
    }
    {
     "message": {
      "value": "message original", // μ„œλͺ…ν•  원문
     }
    }
    curl -X POST "https://a2a-api.klipwallet.com/v2/a2a/prepare" \
    -d '{"bapp": { "name" : "My BApp" }, "chain": "klaytn", "type": "execute_contract" }' \
    -H "Content-Type: application/json"
    https://klipwallet.com/?target=/a2a?request_key=9892...4aeb
    https://klipwallet.com/?target=/a2a?request_key=9892...4aeb
    {
      "request_key": "random key",
      "expiration_time": unix timestamp,
      "status": "requested" or "completed",
      "result": {
        type에 λ§žλŠ” κ²°κ³Ό object
      }
    }
    curl -X GET "https://a2a-api.klipwallet.com/v2/a2a/result?request_key=9892...4aeb" \
    -H "Content-Type: application/json"
    {
        "request_key": "random key",
        "expiration_time": unix timestamp,
        "status": "completed",
        "result": {
          "klaytn_address": string, //ν˜Έν™˜μ„±μ„ μœ„ν•΄ ν•„λ“œλͺ…에 klaytn μœ μ§€
          "evm_address": string,
          "bitcoin_address": string,
          "solana_address": string,
          "tron_address": string,
          "xrpl_address": string
        }
    }
    {
      "request_key": "random key",
      "expiration_time": unix timestamp,
      "status": "completed",
      "result": {
        "tx_hash": string,
        "status": "success"
      }
    }
    {
     "request_key": "random key",
     "expiration_time": unix timestamp,
     "status": "completed",
     "result": {
        "signature": string // 원문에 λŒ€ν•œ μ‚¬μš©μž μ„œλͺ…
        "hash": string
     } 
    }
    {
     "request_key": "random key",
     "expiration_time": unix timestamp,
     "status": "completed",
     "result": {
        "signature": string // 원문에 λŒ€ν•œ μ‚¬μš©μž μ„œλͺ…
        "hash": string
     } 
    }
    {
        "name": "Klip",
        "symbol_img": "image url",
        "cards": [
        {
          "created_at": 1580176787,
          "created_at_format": "format",
          "updated_at": 1580176787,
          "updated_at_format": "format",
          "owner": "0x2412b300750f505fb2e68ddf0cd45e9d95f5378d",
          "sender": "0x0000000000000000000000000000000000000000",
          "sender_kakao_id": "kakao_id"
          "card_id": 19,
          "card_uri": "metadata uri",
          "transaction_hash": "0x293a2e53ecf238109908e65a2b7ff4aad0919ce3ce54af08d6fc4323f28e935d"
        },
        ],
        "next_cursor": string
    }
    curl -X GET "https://a2a-api.klipwallet.com/v2/a2a/cards?chain=klaytn&sca=0x1234...&eoa=0x9876...&cursor=mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL" \
    -H "Content-Type: application/json"

    Klip Partners

    이 νŽ˜μ΄μ§€λŠ” Klip Partners에 λ‘œκ·ΈμΈν•˜κ³  μΉ΄λ“œλ₯Ό λ°œν–‰, 쑰회, 전솑, μ‚­μ œν•˜κΈ° μœ„ν•œ APIλ₯Ό μ†Œκ°œν•©λ‹ˆλ‹€.

    KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    Klip Partners API Reference

    계정 관리

    계정 관리 APIμ—λŠ” 둜그인(Sign In), λΉ„λ°€λ²ˆν˜Έ λ³€κ²½(Change Password), ν•€ 번호 λ³€κ²½(Change Pin)이 μžˆμŠ΅λ‹ˆλ‹€.

    Sign In

    Sign In

    POST https://api.klipwallet.com/v2/partner/auth

    κ°€μž…μ„ μŠΉμΈλ°›μ€ ν›„, κ°€μž… μ‹œ μž…λ ₯ν•œ 이메일 μ£Όμ†Œμ™€ λΉ„λ°€λ²ˆν˜Έλ‘œ Klip Partners에 λ‘œκ·ΈμΈν•©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    μ›Ήμ‚¬μ΄νŠΈλŠ” ν—ˆκ°€λœ μ‚¬μš©μžλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜, Klip Partners μ„œλΉ„μŠ€κ°€ 2024λ…„ 7μ›” 31일자둜 μ’…λ£Œλ˜μ–΄ ν˜„μž¬λŠ” μ‹ κ·œ κ°€μž… 신청을 λ°›μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. μ•„μšΈλŸ¬ κΈ°μ‘΄ μ‚¬μš©μž μ—­μ‹œ 2024λ…„ 8μ›” 1일뢀터 Klip Partners APIλ₯Ό ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

    Request Example

    Response Details

    이름
    νƒ€μž…
    μ„€λͺ…

    statusλŠ” κ°€μž… 승인 μ „μ—λŠ” 20, κ°€μž… 승인 ν›„μ—λŠ” 1의 값을 κ°€μ§‘λ‹ˆλ‹€. access_token은 λ°œκΈ‰λ°›μ€ μ§€ 24μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ λ§Œλ£Œλ˜λ―€λ‘œ μž¬λ°œκΈ‰λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€. mint_count와 mint_limit은 맀달 1일 μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Change Password

    Change Password

    PUT https://api.klipwallet.com/v2/partner/?opt=password

    κ°€μž… μ‹œ μž…λ ₯ν•œ λΉ„λ°€λ²ˆν˜Έλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Change PIN

    Change PIN

    PUT https://api.klipwallet.com/v2/partner/pin

    κ°€μž… μ‹œ μž…λ ₯ν•œ ν•€ 번호λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    μΉ΄λ“œ 관리

    μΉ΄λ“œ 관리 APIμ—λŠ” μΉ΄λ“œ 이미지 μ—…λ‘œλ“œ(Upload Image), λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ μΉ΄λ“œ λ°œν–‰(Mint Card To User), Klip νšŒμ›μ—κ²Œ μΉ΄λ“œ λ°œν–‰(Mint Card To Klip Member), λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ μΉ΄λ“œ 전솑(Send Card To User), Klip νšŒμ›μ—κ²Œ μΉ΄λ“œ 전솑(Send Card To Klip Member), μΉ΄λ“œ 정보 뢈러였기(Get Card Information By Bapp, Get Card Information), μΉ΄λ“œ μ‚­μ œ(Delete Card)κ°€ μžˆμŠ΅λ‹ˆλ‹€.

    Upload Image

    Upload Image

    POST https://api.klipwallet.com/v2/wallet/image

    μΉ΄λ“œμ— μ‚¬μš©ν•  이미지λ₯Ό μ—…λ‘œλ“œν•©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Upload NFT Resource

    Upload NFT resource

    POST https://api.klipwallet.com/v2/wallet/nftResource

    μΉ΄λ“œμ— μ‚¬μš©ν•  λ¦¬μ†ŒμŠ€λ₯Ό μ—…λ‘œλ“œν•©λ‹ˆλ‹€. animation_url ν•„λ“œμ— μ„€μ •ν•  λ™μ˜μƒ 파일의 경우 크기가 10MiB둜 μ œν•œλ©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Upload Secure NFT Resource

    Upload secure NFT resource

    POST https://api.klipwallet.com/v2/wallet/nftResource/secure

    μΉ΄λ“œμ— μ‚¬μš©ν•  μ†Œμœ μž μ „μš© λ¦¬μ†ŒμŠ€λ₯Ό μ—…λ‘œλ“œν•©λ‹ˆλ‹€. upload ν•„λ“œμ— μ„€μ •ν•  수 μžˆλŠ” 파일 μš©λŸ‰μ€ μ΅œλŒ€ 10MiBμž…λ‹ˆλ‹€. κ°€λ‘œxμ„Έλ‘œ 각각 23000px μ΄ν•˜ μΉ΄λ“œ 이미지λ₯Ό μ‚¬μš©ν•΄μ•Ό Klip에 μ •μƒμ μœΌλ‘œ λ…ΈμΆœλ©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    Mint Card to User

    Mint Card To User

    POST https://api.klipwallet.com/v2/wallet/mint

    Klip Partners에 μ‚¬μš©μž 정보λ₯Ό 보내고 μΉ΄λ“œλ₯Ό λ°œν–‰ν•©λ‹ˆλ‹€. μ‚¬μš©μž EOA둜 λ°œν–‰λ©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    Request Details for secure

    이름
    νƒ€μž…
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Mint Card to Klip Member

    Mint Card To Klip Member

    POST https://api.klipwallet.com/v2/wallet/mint/person

    Klip Partners에 Klip νšŒμ› 정보λ₯Ό 보내고 μΉ΄λ“œλ₯Ό λ°œν–‰ν•©λ‹ˆλ‹€. to_person에 μž…λ ₯ν•œ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ₯Ό κ°€μ§„ Klip νšŒμ› EOA둜 λ°œν–‰λ©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    Request Details for secure

    이름
    νƒ€μž…
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Get Mint Count

    Get Mint Count

    GET https://api.klipwallet.com/v2/wallet/mint/count

    이번 달에 νŒŒνŠΈλ„ˆ κ³„μ •μœΌλ‘œ λ°œν–‰ν•œ 총 μΉ΄λ“œ 개수λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 값은 λ§€μ›” 1일에 0으둜 μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Example

    Response Details

    이름
    νƒ€μž…
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Send Card to User

    Send Card To User

    POST https://api.klipwallet.com/v2/wallet/nft/:nft_id/:card_id/send

    μΉ΄λ“œλ₯Ό λ‹€λ₯Έ μ‚¬μš©μžμ—κ²Œ λ³΄λƒ…λ‹ˆλ‹€. 전솑 μ‹œ μ‚¬μš©μž EOAλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

    Path Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Klip μ‚¬μš©μžμ—κ²Œ μΉ΄λ“œλ₯Ό 전솑 μ‹œcard_name을 μž…λ ₯ν•΄μ•Ό λ°›λŠ” μ‚¬λžŒμ—κ²Œ μΉ΄λ“œ 이름이 ν‘œμ‹œλ©λ‹ˆλ‹€.

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Send Card to Klip Member

    Send Card To Klip Member

    POST https://api.klipwallet.com/v2/wallet/nft/:nft_id/:card_id/send/person

    μΉ΄λ“œλ₯Ό Klip νšŒμ›μ—κ²Œ λ³΄λƒ…λ‹ˆλ‹€. to_person에 μž…λ ₯ν•œ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ₯Ό κ°€μ§„ Klip νšŒμ› EOA둜 λ³΄λƒ…λ‹ˆλ‹€.

    Path Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Klip μ‚¬μš©μžμ—κ²Œ μΉ΄λ“œλ₯Ό 전솑 μ‹œcard_name을 μž…λ ₯ν•΄μ•Ό λ°›λŠ” μ‚¬λžŒμ—κ²Œ μΉ΄λ“œ 이름이 ν‘œμ‹œλ©λ‹ˆλ‹€.

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    (deprecated) Get Card Information by Bapp

    λ³Έ API의 경우, 클립의 μžμ‚° λ¦¬μŠ€νŒ… μ •μ±… 변경에 따라 일뢀 μƒˆλ‘œμš΄ μΉ΄λ“œλŠ” μ‘°νšŒκ°€ λΆˆκ°€λŠ₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  API μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

    Get Card Information By BApp

    GET https://api.klipwallet.com/v2/wallet/bapp?cursor=

    λ‚΄κ°€ μ†Œμœ ν•œ μΉ΄λ“œ λͺ©λ‘μ„ μ–»μŠ΅λ‹ˆλ‹€. λ³΄μœ ν•œ μΉ΄λ“œλ“€μ€ BAppλ³„λ‘œ λ¬Άμ—¬ 좜λ ₯λ©λ‹ˆλ‹€.

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Request Example

    Response Details for bapps[i]

    이름
    νƒ€μž…
    μ„€λͺ…

    Response Details for bapps[i].cards[i]

    이름
    νƒ€μž…
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ , λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Get Card Information

    Get Card Information

    GET https://api.klipwallet.com/v2/wallet/nft/:nft_id?cursor=

    μ†Œμœ ν•œ μΉ΄λ“œμ˜ 상세 정보λ₯Ό μ–»μŠ΅λ‹ˆλ‹€.

    Path Parameters

    Name
    Type
    Description

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Request Example

    Response Details

    이름
    νƒ€μž…
    μ„€λͺ…

    Response Details for cards[i]

    이름
    νƒ€μž…
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ , λ₯Ό ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Delete Card

    Delete Card

    DELETE https://api.klipwallet.com/v2/wallet/nft

    λ°œν–‰ν•œ μΉ΄λ“œλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    λ°œν–‰ν•œ μΉ΄λ“œλ§Œ μ‚­μ œν•  수 있으며, λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 보낸 μΉ΄λ“œλŠ” μ‚­μ œν•  수 μ—†μŠ΅λ‹ˆλ‹€. μΉ΄λ“œλ₯Ό μ‚­μ œν•΄λ„ μΉ΄λ“œ μ΄λ―Έμ§€λŠ” μ‚­μ œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Approve Escrow

    Approve Escrow

    POST https://api.klipwallet.com/v2/escrow/approve

    μΉ΄λ“œ 전솑 μ—μŠ€ν¬λ‘œ μ‚¬μš©μ„ ν—ˆμš©ν•©λ‹ˆλ‹€. μΉ΄λ“œ 전솑 μ—μŠ€ν¬λ‘œ κΈ°λŠ₯을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ΅œμ΄ˆμ— 1회, ν•„μˆ˜μ μœΌλ‘œ ν˜ΈμΆœν•΄μ•Όν•˜λŠ” APIμž…λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Get Escrow Approval Status

    Get Escrow Approval Status

    GET https://api.klipwallet.com/v2/escrow/approve

    μΉ΄λ“œ 전솑 μ—μŠ€ν¬λ‘œ μ‚¬μš© λ™μ˜ μ—¬λΆ€λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Create Escrow

    Create Escrow

    POST https://api.klipwallet.com/v2/escrow

    μΉ΄λ“œ 전솑 μ—μŠ€ν¬λ‘œλ₯Ό μ‹€ν–‰ν•˜κ³ , Klip μ‚¬μš©μžκ°€ μΉ΄λ“œλ₯Ό 지급받을 수 μžˆλŠ” 링크가 μƒμ„±λ©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    λ³΄μœ μ€‘μΈ μΉ΄λ“œλ§Œ μ—μŠ€ν¬λ‘œ 전솑을 μ‹€ν–‰ ν•  수 있으며, λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 보낸 μΉ΄λ“œλŠ” 전솑할 수 μ—†μŠ΅λ‹ˆλ‹€. μ—μŠ€ν¬λ‘œλ₯Ό μˆ˜ν–‰ν•œ μΉ΄λ“œλŠ” μ—μŠ€ν¬λ‘œ μΉ΄λ“œ 쑰회λ₯Ό 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Get Cards in Escrow

    Get Cards in Escrow

    GET https://api.klipwallet.com/v2/escrow

    μ—μŠ€ν¬λ‘œ μΉ΄λ“œ λͺ©λ‘ 쑰회.

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    cursor에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ ν•­λͺ©μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    Request Example

    Response Details

    이름
    νƒ€μž…
    μ„€λͺ…

    Response Details for cards[i]

    이름
    νƒ€μž…
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Cancel Escrow

    Cancel Escrow

    DELETE https://api.klipwallet.com/v2/escrow

    μΉ΄λ“œ 전솑 μ—μŠ€ν¬λ‘œλ₯Ό μ·¨μ†Œν•©λ‹ˆλ‹€.

    Headers

    Name
    Type
    Description

    Request Body

    Name
    Type
    Description

    μ—μŠ€ν¬λ‘œλœ μΉ΄λ“œλ§Œ μ·¨μ†Œν•  수 있으며, 이미 μ§€κΈ‰λœ μΉ΄λ“œλŠ” μ‚­μ œν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ·¨μ†Œλœ μΉ΄λ“œλŠ” 보유 λͺ©λ‘μœΌλ‘œ λ°˜ν™˜λ©λ‹ˆλ‹€.

    Request Example

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    Get Transaction Result

    Get Transaction Result

    GET https://api.klipwallet.com/v2/wallet/receipt

    νŠΈλžœμž­μ…˜ 처리 κ²°κ³Όκ°€ 블둝에 μ΅œμ’… μ„±κ³΅μœΌλ‘œ κΈ°λ‘λλŠ”μ§€ μ—¬λΆ€λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

    Query Parameters

    Name
    Type
    Description

    Headers

    Name
    Type
    Description

    Request Example

    Response Details

    이름
    νƒ€μž…
    μ„€λͺ…

    μžμ„Έν•œ λ‚΄μš©μ€ 을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    phone

    string

    κ°€μž…μž μ „ν™”λ²ˆν˜Έμž…λ‹ˆλ‹€.

    service_name

    string

    κ°€μž…μžκ°€ μ œκ³΅ν•˜λŠ” BApp μ„œλΉ„μŠ€ μ΄λ¦„μž…λ‹ˆλ‹€.

    access_token

    string

    JWT ν˜•μ‹μœΌλ‘œ API ν˜ΈμΆœμ„ ν—ˆμš©ν•˜κΈ° μœ„ν•΄ λ°œκΈ‰λœ 인증 ν† ν°μž…λ‹ˆλ‹€.

    status

    number

    계정 μƒνƒœμ½”λ“œμž…λ‹ˆλ‹€.

    mint_limit

    number

    계정이 이번 달에 λ°œν–‰ν•  수 μžˆλŠ” μ΅œλŒ€ μΉ΄λ“œ κ°œμˆ˜μž…λ‹ˆλ‹€.

    mint_count

    number

    계정이 이번 달에 λ°œν–‰ν•œ μΉ΄λ“œ κ°œμˆ˜μž…λ‹ˆλ‹€.

    description*

    string

    μΉ΄λ“œμ— κ΄€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

    image*

    string

    μΉ΄λ“œμ— μ‚¬μš©ν•  이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€.

    animation_url

    string

    μΉ΄λ“œμ— μ‚¬μš©ν•  λ™μ˜μƒ URL μ£Όμ†Œμž…λ‹ˆλ‹€. μ§€μ›ν•˜λŠ” 파일 ν™•μž₯μžλŠ” .mp4μž…λ‹ˆλ‹€. H.264 코덱이 μ•„λ‹ˆκ±°λ‚˜ 해상도가 3840x2160을 λ„˜λŠ” 경우 μž¬μƒλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    background_color

    string

    μΉ΄λ“œ 배경에 μ‚¬μš©ν•  RGB 색상 μ½”λ“œμž…λ‹ˆλ‹€.

    sendable

    boolean

    TRUE이면 λ°œν–‰ν•œ μΉ΄λ“œλ₯Ό Klipμ—μ„œ νƒ€μΈμ—κ²Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€.

    send_friend_only

    boolean

    TRUE이면 λ°œν–‰ν•œ μΉ΄λ“œλ₯Ό Klipμ—μ„œ μΉ΄μΉ΄μ˜€ν†‘ μΉœκ΅¬μ—κ²Œλ§Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€. ν˜„μž¬ Klip λ‚΄μ—μ„œ μΌμ‹œμ μœΌλ‘œ 친ꡬ 전솑이 μ œκ³΅λ˜μ§€ μ•Šκ³  μžˆμœΌλ―€λ‘œ FALSE둜 μ„€μ •ν•©λ‹ˆλ‹€.

    group_name

    string

    μΉ΄λ“œλ₯Ό κ·Έλ£Ήν•‘ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μΉ΄λ“œ κ·Έλ£Ή μ΄λ¦„μž…λ‹ˆλ‹€.

    group_icon

    string

    μΉ΄λ“œ κ·Έλ£Ή μ•„μ΄μ½˜μœΌλ‘œ μ‚¬μš©ν•  이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€.

    hashtags

    array

    ν•΄μ‹œνƒœκ·Έλ“€μ΄ λ‹΄κΈ΄ string λ°°μ—΄μž…λ‹ˆλ‹€. μΉ΄λ“œμ— ν•΄μ‹œνƒœκ·Έλ₯Ό 달면 νŠΉμ • 주제, λ‚΄μš©μ„ μ‰½κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

    layout

    string

    μΉ΄λ“œλ₯Ό λ³΄μ—¬μ£ΌλŠ” λ°©μ‹μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ •μ‚¬κ°ν˜• μ΄λ―Έμ§€λŠ” general, κ°€λ‘œκ°€ 더 κΈ΄ μ΄λ―Έμ§€λŠ” horizontal μ„Έλ‘œκ°€ κΈ΄ μ΄λ―Έμ§€λŠ” vertical둜 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 기본값은 generalμž…λ‹ˆλ‹€.

    external_link

    string

    Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:255)

    custom_links

    array

    Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œλ“€μ΄ λ‹΄κΈ΄ object λ°°μ—΄ μž…λ‹ˆλ‹€. display_name에 λ…ΈμΆœν•  속성λͺ…, value에 속성값을 μŒμ„ 이뀄 μ§€μ •ν•©λ‹ˆλ‹€. Klip의 NFT 상세 ν™”λ©΄μ—μ„œ μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” 링크가 μ œκ³΅λ©λ‹ˆλ‹€. (λ°°μ—΄μ˜ μ΅œλŒ€ 크기: 10개, 각 링크의 μ΅œλŒ€ 길이: 255)

    qr_code

    string

    QR Codeκ°€ κ·Έλ €μ§„ 이미지 URLμž…λ‹ˆλ‹€ (μ΅œλŒ€ 길이:255)

    bar_code

    string

    Bar Codeκ°€ κ·Έλ €μ§„ 이미지 URLμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:255)

    attributes

    array

    λ°œν–‰ν•  μΉ΄λ“œ 속성값듀이 λ‹΄κΈ΄ object λ°°μ—΄μž…λ‹ˆλ‹€.

    secure

    object

    μΉ΄λ“œ μ†Œμœ μžμ—κ²Œλ§Œ 보여쀄 정보λ₯Ό 담은 objectμž…λ‹ˆλ‹€. bar_code, qr_code, images, animations, 및 attributes ν•„λ“œλ₯Ό μ„ νƒμ μœΌλ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    status_url

    string

    μΉ΄λ“œ μƒνƒœ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” μ™ΈλΆ€ URLμž…λ‹ˆλ‹€. ν•΄λ‹Ή URLμ—μ„œλŠ” JSON 값을 λ°˜ν™˜ν•΄μ•Όν•˜κ³ , ν•„μˆ˜μ μœΌλ‘œ bool type의 valid ν•„λ“œμ™€ μ„ νƒμ μœΌλ‘œ array type의 attributes ν•„λ“œλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    animations

    array

    secure λ™μ˜μƒ κ°μ²΄λ“€μ˜ λ°°μ—΄μž…λ‹ˆλ‹€. λ™μ˜μƒ κ°μ²΄λŠ” low_resolutionκ³Ό (λ˜λŠ”) high_resolution 값을 κ°€μ§€λ©° 각각 저해상도 λ™μ˜μƒ, 고해상도 λ™μ˜μƒ 파일λͺ…을 κΈ°λ‘ν•©λ‹ˆλ‹€. secure λ™μ˜μƒ μ—…λ‘œλ“œ 방법은 Upload Secure NFT Resourceλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. optional ν•„λ“œμž…λ‹ˆλ‹€.

    description*

    string

    μΉ΄λ“œμ— κ΄€ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

    image*

    string

    μΉ΄λ“œμ— μ‚¬μš©ν•  이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€.

    animation_url

    string

    μΉ΄λ“œμ— μ‚¬μš©ν•  λ™μ˜μƒ URL μ£Όμ†Œμž…λ‹ˆλ‹€. μ§€μ›ν•˜λŠ” 파일 ν™•μž₯μžλŠ” .mp4μž…λ‹ˆλ‹€. H.264 코덱이 μ•„λ‹ˆκ±°λ‚˜ 해상도가 3840x2160을 λ„˜λŠ” 경우 μž¬μƒλ˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    background_color

    string

    μΉ΄λ“œ 배경에 μ‚¬μš©ν•  RGB 색상 μ½”λ“œμž…λ‹ˆλ‹€.

    sendable

    boolean

    TRUE이면 λ°œν–‰ν•œ μΉ΄λ“œλ₯Ό Klipμ—μ„œ νƒ€μΈμ—κ²Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€.

    send_friend_only

    boolean

    TRUE이면 λ°œν–‰ν•œ μΉ΄λ“œλ₯Ό Klipμ—μ„œ μΉ΄μΉ΄μ˜€ν†‘ μΉœκ΅¬μ—κ²Œλ§Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€. ν˜„μž¬ Klip λ‚΄μ—μ„œ μΌμ‹œμ μœΌλ‘œ 친ꡬ 전솑이 μ œκ³΅λ˜μ§€ μ•Šκ³  μžˆμœΌλ―€λ‘œ FALSE둜 μ„€μ •ν•©λ‹ˆλ‹€.

    group_name

    string

    μΉ΄λ“œλ₯Ό κ·Έλ£Ήν•‘ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μΉ΄λ“œ κ·Έλ£Ή μ΄λ¦„μž…λ‹ˆλ‹€.

    group_icon

    string

    μΉ΄λ“œ κ·Έλ£Ή μ•„μ΄μ½˜μœΌλ‘œ μ‚¬μš©ν•  이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€.

    hashtags

    array

    ν•΄μ‹œνƒœκ·Έλ“€μ΄ λ‹΄κΈ΄ string λ°°μ—΄μž…λ‹ˆλ‹€. μΉ΄λ“œμ— ν•΄μ‹œνƒœκ·Έλ₯Ό 달면 νŠΉμ • 주제, λ‚΄μš©μ„ μ‰½κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

    layout

    string

    μΉ΄λ“œλ₯Ό λ³΄μ—¬μ£ΌλŠ” λ°©μ‹μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ •μ‚¬κ°ν˜• μ΄λ―Έμ§€λŠ” general, κ°€λ‘œκ°€ 더 κΈ΄ μ΄λ―Έμ§€λŠ” horizontal μ„Έλ‘œκ°€ κΈ΄ μ΄λ―Έμ§€λŠ” vertical둜 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 기본값은 generalμž…λ‹ˆλ‹€.

    external_link

    string

    Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:255)

    custom_links

    array

    Klip μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œλ“€μ΄ λ‹΄κΈ΄ object λ°°μ—΄ μž…λ‹ˆλ‹€. display_name에 λ…ΈμΆœν•  속성λͺ…, value에 속성값을 μŒμ„ 이뀄 μ§€μ •ν•©λ‹ˆλ‹€. Klip의 NFT 상세 ν™”λ©΄μ—μ„œ μ™ΈλΆ€λ‘œ μ—°κ²°λ˜λŠ” 링크가 μ œκ³΅λ©λ‹ˆλ‹€. (λ°°μ—΄μ˜ μ΅œλŒ€ 크기: 10개, 각 링크의 μ΅œλŒ€ 길이: 255)

    qr_code

    string

    QR Codeκ°€ κ·Έλ €μ§„ 이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:255)

    bar_code

    string

    Bar Codeκ°€ κ·Έλ €μ§„ 이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:255)

    attributes

    array

    λ°œν–‰ν•  μΉ΄λ“œ 속성값듀이 λ‹΄κΈ΄ object λ°°μ—΄μž…λ‹ˆλ‹€.

    secure

    object

    μΉ΄λ“œ μ†Œμœ μžμ—κ²Œλ§Œ 보여쀄 정보λ₯Ό 담은 objectμž…λ‹ˆλ‹€. bar_code, qr_code, images, animations, 및 attributes ν•„λ“œλ₯Ό μ„ νƒμ μœΌλ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    status_url

    string

    μΉ΄λ“œ μƒνƒœ 정보λ₯Ό λ‹΄κ³  μžˆλŠ” μ™ΈλΆ€ URLμž…λ‹ˆλ‹€. ν•΄λ‹Ή URLμ—μ„œλŠ” JSON 값을 λ°˜ν™˜ν•΄μ•Όν•˜κ³ , ν•„μˆ˜μ μœΌλ‘œ bool type의 valid ν•„λ“œμ™€ μ„ νƒμ μœΌλ‘œ array type의 attributes ν•„λ“œλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    animations

    array

    secure λ™μ˜μƒ κ°μ²΄λ“€μ˜ λ°°μ—΄μž…λ‹ˆλ‹€. λ™μ˜μƒ κ°μ²΄λŠ” low_resolutionκ³Ό (λ˜λŠ”) high_resolution 값을 κ°€μ§€λ©° 각각 저해상도 λ™μ˜μƒ, 고해상도 λ™μ˜μƒ 파일λͺ…을 κΈ°λ‘ν•©λ‹ˆλ‹€. secure λ™μ˜μƒ μ—…λ‘œλ“œ 방법은 Upload Secure NFT Resourceλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. optional ν•„λ“œμž…λ‹ˆλ‹€.

    nft_order_no

    number

    Klip μΉ΄λ“œ λͺ©λ‘μ—μ„œ μΉ΄λ“œ 그룹이 λ…ΈμΆœλ˜λŠ” μˆœμ„œμž…λ‹ˆλ‹€.

    summary

    string

    이 BApp에 κ΄€ν•œ ν•œ 쀄 μ„€λͺ…μž…λ‹ˆλ‹€.

    card_count

    number

    λ³΄μœ ν•œ λͺ¨λ“  μΉ΄λ“œμ€‘ 이 BAppμ—μ„œ μ“°μ΄λŠ” μΉ΄λ“œ κ°œμˆ˜μž…λ‹ˆλ‹€.

    nft_id

    number

    NFT IDμž…λ‹ˆλ‹€. NFTλŠ” 이 μΉ΄λ“œλ₯Ό 블둝체인에 κ΅¬ν˜„ν•˜λŠ” 슀마트 μ»¨νŠΈλž™νŠΈμž…λ‹ˆλ‹€.

    cards

    array

    각 μΉ΄λ“œ 정보λ₯Ό 담은 object λ°°μ—΄μž…λ‹ˆλ‹€.

    cards_next_cursor

    string

    μΉ΄λ“œκ°€ 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό 뢈러올 μ»€μ„œκ°’μž…λ‹ˆλ‹€.

    next_cursor

    string

    BApp이 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό 뢈러올 μ»€μ„œκ°’μž…λ‹ˆλ‹€.

    card_id

    number

    μΉ΄λ“œ IDμž…λ‹ˆλ‹€.

    card_uri

    string

    μΉ΄λ“œ 메타데이터가 λ‹΄κΈ΄ JSON 파일 URLμž…λ‹ˆλ‹€.

    transaction_hash

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ νŠΈλžœμž­μ…˜ ν•΄μ‹œμž…λ‹ˆλ‹€.

    card_id

    number

    μΉ΄λ“œ IDμž…λ‹ˆλ‹€.

    card_uri

    string

    μΉ΄λ“œ 메타데이터가 λ‹΄κΈ΄ JSON 파일 URLμž…λ‹ˆλ‹€.

    transaction_hash

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ νŠΈλžœμž­μ…˜ ν•΄μ‹œμž…λ‹ˆλ‹€.

    card_id

    number

    μΉ΄λ“œ IDμž…λ‹ˆλ‹€.

    card_uri

    string

    μΉ΄λ“œ 메타데이터가 λ‹΄κΈ΄ JSON 파일 URLμž…λ‹ˆλ‹€.

    transaction_hash

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ νŠΈλžœμž­μ…˜ ν•΄μ‹œμž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    email*

    string

    κ°€μž…μž 이메일 μ£Όμ†Œμ΄λ©° 둜그인 κ³„μ •μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

    password*

    string

    κ°€μž…μž 둜그인 λΉ„λ°€λ²ˆν˜Έμž…λ‹ˆλ‹€. μ›Ήμ‚¬μ΄νŠΈμ— κ°€μž… μ‹œ μ‚¬μš©ν•œ λΉ„λ°€λ²ˆν˜Έμ— SHA256 ν•΄μ‹œλ₯Ό μ μš©ν•˜μ—¬ μ „μ†‘ν•©λ‹ˆλ‹€.

    email

    string

    κ°€μž…μž 이메일 μ£Όμ†Œμ΄λ©° 둜그인 κ³„μ •μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

    klaytn_address

    string

    κ°€μž…μž Kaia EOA μ£Όμ†Œμž…λ‹ˆλ‹€. ν˜Έν™˜μ„± μœ μ§€λ₯Ό μœ„ν•΄ klaytn λͺ…칭이 μ‚¬μš©λ©λ‹ˆλ‹€.

    contract_address

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λŠ” SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    name

    string

    κ°€μž…μž 이름이며 μ‚¬μ—…μž λ˜λŠ” 법인 이름을 μ‚¬μš©ν•©λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    old_password*

    string

    기쑴에 μ‚¬μš©ν•˜λ˜ λΉ„λ°€λ²ˆν˜Έμž…λ‹ˆλ‹€.

    new_password*

    string

    μƒˆλ‘­κ²Œ μ‚¬μš©ν•  λΉ„λ°€λ²ˆν˜Έμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    old_pin*

    string

    기쑴에 μ‚¬μš©ν•˜λ˜ ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    new_pin*

    string

    μƒˆλ‘­κ²Œ μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    multipart/form-data

    upload*

    string

    μ—…λ‘œλ“œν•  이미지 파일λͺ…μž…λ‹ˆλ‹€. 파일 경둜λ₯Ό 포함해야 ν•©λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    multipart/form-data

    upload*

    string

    μ—…λ‘œλ“œν•  파일λͺ…μž…λ‹ˆλ‹€. 파일 경둜λ₯Ό 포함해야 ν•©λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    multipart/form-data

    upload*

    string

    μ—…λ‘œλ“œν•  파일λͺ…μž…λ‹ˆλ‹€. 파일 경둜λ₯Ό 포함해야 ν•©λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    to_address*

    array

    μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ„ EOA μ£Όμ†Œλ“€μ΄ λ‹΄κΈ΄ string λ°°μ—΄μž…λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λŠ” SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    name*

    string

    μΉ΄λ“œ μ΄λ¦„μž…λ‹ˆλ‹€.

    bar_code

    string

    bar code둜 ν‘œμ‹œν•  λ¬Έμžμ—΄ κ°’μž…λ‹ˆλ‹€. 기본적으둜 CODE 128 ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. optional ν•„λ“œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:20, ' '(곡백) λ˜λŠ” '-' 문자 μ œμ™Έ)

    qr_code

    string

    qr code둜 ν‘œμ‹œν•  λ¬Έμžμ—΄ κ°’μž…λ‹ˆλ‹€. optional ν•„λ“œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:255)

    attributes

    array

    μΉ΄λ“œ 속성값듀이 λ‹΄κΈ΄ object λ°°μ—΄μž…λ‹ˆλ‹€. optional ν•„λ“œμž…λ‹ˆλ‹€.

    images

    array

    secure 이미지 κ°μ²΄λ“€μ˜ λ°°μ—΄μž…λ‹ˆλ‹€. 이미지 κ°μ²΄λŠ” low_resolutionκ³Ό (λ˜λŠ”) high_resolution 값을 κ°€μ§€λ©° 각각 저해상도 이미지, 고해상도 이미지 파일λͺ…을 κΈ°λ‘ν•©λ‹ˆλ‹€. secure 이미지 μ—…λ‘œλ“œ 방법은 Upload Secure NFT Resourceλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. optional ν•„λ“œμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    to_person*

    array

    μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ„ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έ 쌍이 λ‹΄κΈ΄ 2차원 λ°°μ—΄μž…λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λŠ” SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    name*

    string

    μΉ΄λ“œ μ΄λ¦„μž…λ‹ˆλ‹€.

    bar_code

    string

    bar code둜 ν‘œμ‹œν•  λ¬Έμžμ—΄ κ°’μž…λ‹ˆλ‹€. 기본적으둜 CODE 128 ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. optional ν•„λ“œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:20, ' '(곡백) λ˜λŠ” '-' 문자 μ œμ™Έ)

    qr_code

    string

    qr code둜 ν‘œμ‹œν•  λ¬Έμžμ—΄ κ°’μž…λ‹ˆλ‹€. optional ν•„λ“œμž…λ‹ˆλ‹€. (μ΅œλŒ€ 길이:255)

    attributes

    array

    μΉ΄λ“œ 속성값듀이 λ‹΄κΈ΄ object λ°°μ—΄μž…λ‹ˆλ‹€. optional ν•„λ“œμž…λ‹ˆλ‹€.

    images

    array

    secure 이미지 κ°μ²΄λ“€μ˜ λ°°μ—΄μž…λ‹ˆλ‹€. 이미지 κ°μ²΄λŠ” low_resolutionκ³Ό (λ˜λŠ”) high_resolution 값을 κ°€μ§€λ©° 각각 저해상도 이미지, 고해상도 이미지 파일λͺ…을 κΈ°λ‘ν•©λ‹ˆλ‹€. secure 이미지 μ—…λ‘œλ“œ 방법은 Upload Secure NFT Resourceλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. optional ν•„λ“œμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    mint_count

    number

    이번 달 ν˜„μž¬κΉŒμ§€ λ°œν–‰ν•œ μΉ΄λ“œ κ°œμˆ˜μž…λ‹ˆλ‹€.

    nft_id*

    string

    BApp에 μžˆλŠ” μΉ΄λ“œλ₯Ό μƒμ„±ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ IDμž…λ‹ˆλ‹€.

    card_id*

    string

    BApp에 μžˆλŠ” μΉ΄λ“œ IDμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    to_address*

    string

    μΉ΄λ“œλ₯Ό λ°›λŠ” μƒλŒ€λ°© EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    card_name*

    string

    보낼 μΉ΄λ“œ μ΄λ¦„μž…λ‹ˆλ‹€.

    nft_id*

    string

    BApp에 μžˆλŠ” μΉ΄λ“œλ₯Ό μƒμ„±ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ IDμž…λ‹ˆλ‹€.

    card_id*

    string

    BApp에 μžˆλŠ” μΉ΄λ“œ IDμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    to_person*

    array

    μΉ΄λ“œλ₯Ό λ°›λŠ” μƒλŒ€λ°©μ˜ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έκ°€ μžˆλŠ” string λ°°μ—΄μž…λ‹ˆλ‹€.

    card_name*

    string

    보낼 μΉ΄λ“œ μ΄λ¦„μž…λ‹ˆλ‹€.

    cursor

    string

    BApp이 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό λ°›λŠ” μ»€μ„œκ°’μž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    id

    number

    이 BApp IDμž…λ‹ˆλ‹€.

    name

    string

    이 BApp μ΄λ¦„μž…λ‹ˆλ‹€.

    bapp_img

    string

    이 BApp λŒ€ν‘œ 이미지 파일 μ£Όμ†Œμž…λ‹ˆλ‹€.

    category_id

    number

    이 BApp μΉ΄ν…Œκ³ λ¦¬ λΆ„λ₯˜ μ½”λ“œμž…λ‹ˆλ‹€.

    created_at

    number

    μΉ΄λ“œκ°€ λ°œν–‰λœ μ‹œκ°„μž…λ‹ˆλ‹€.

    updated_at

    number

    μΉ΄λ“œκ°€ μ—…λ°μ΄νŠΈλœ μ‹œκ°„μž…λ‹ˆλ‹€.

    owner

    string

    이 계정 EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    sender

    string

    이 κ³„μ •μœΌλ‘œ μΉ΄λ“œλ₯Ό 보낸 μ‚¬λžŒμ˜ EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    nft_id*

    string

    NFT IDμž…λ‹ˆλ‹€. NFTλŠ” 이 μΉ΄λ“œλ₯Ό 블둝체인에 κ΅¬ν˜„ν•˜λŠ” 슀마트 μ»¨νŠΈλž™νŠΈμž…λ‹ˆλ‹€.

    isAll

    bool

    TRUE이면 λ‚΄κ°€ μ†Œμœ ν•œ λͺ¨λ“  μΉ΄λ“œ 정보λ₯Ό ν•œ λ²ˆμ— λ°›μŠ΅λ‹ˆλ‹€. cursor νŒŒλΌλ―Έν„°μ™€λŠ” ν•¨κ»˜ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

    cursor

    string

    μΉ΄λ“œ 정보λ₯Ό 100κ°œμ”© λ‚˜λˆ„μ–΄ λ°›κΈ° μœ„ν•œ μ»€μ„œκ°’μž…λ‹ˆλ‹€. isAll νŒŒλΌλ―Έν„°μ™€λŠ” ν•¨κ»˜ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    name

    string

    μΉ΄λ“œ μ΄λ¦„μž…λ‹ˆλ‹€.

    symbol_img

    string

    μΉ΄λ“œμ— μ‚¬μš©ν•˜λŠ” 이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€.

    cards

    array

    각 μΉ΄λ“œ 정보λ₯Ό 담은 object λ°°μ—΄μž…λ‹ˆλ‹€.

    next_cursor

    string

    μΉ΄λ“œκ°€ 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό 뢈러올 μ»€μ„œκ°’μž…λ‹ˆλ‹€.

    created_at

    number

    μΉ΄λ“œκ°€ λ°œν–‰λœ μ‹œκ°„μž…λ‹ˆλ‹€.

    updated_at

    number

    μΉ΄λ“œκ°€ μ—…λ°μ΄νŠΈλœ μ‹œκ°„μž…λ‹ˆλ‹€.

    owner

    string

    이 계정 EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    sender

    string

    이 κ³„μ •μœΌλ‘œ μΉ΄λ“œλ₯Ό 보낸 μ‚¬λžŒμ˜ EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    card_id*

    number

    μΉ΄λ“œ IDμž…λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λŠ” SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    card_ids*

    array

    μΉ΄λ“œ ID듀이 λ‹΄κΈ΄ number λ°°μ—΄μž…λ‹ˆλ‹€. μ΅œλŒ€ 100개의 μ›μ†Œλ₯Ό 담을 수 μžˆμŠ΅λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λŠ” SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    cursor

    string

    μΉ΄λ“œ κ°œμˆ˜κ°€ 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό λ°›λŠ” μ»€μ„œκ°’μž…λ‹ˆλ‹€. 일반적으둜 μΉ΄λ“œ κ°œμˆ˜κ°€ 100개λ₯Ό μ΄ˆκ³Όν•œλ‹€λ©΄ 1번 호좜 μ‹œ 100개의 결과와 next_cursor 값을 λ°›μŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ μΉ΄λ“œλ₯Ό μ‘°νšŒν•˜λ €λ©΄ next_cursor 값을 query νŒŒλΌλ―Έν„° cursor에 μ „λ‹¬ν•˜μ—¬ APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ•Όν•©λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    name

    string

    μΉ΄λ“œ μ΄λ¦„μž…λ‹ˆλ‹€.

    symbol_img

    string

    μΉ΄λ“œμ— μ‚¬μš©ν•˜λŠ” 이미지 URL μ£Όμ†Œμž…λ‹ˆλ‹€.

    cards

    array

    각 μΉ΄λ“œ 정보λ₯Ό 담은 object λ°°μ—΄μž…λ‹ˆλ‹€.

    next_cursor

    string

    μΉ΄λ“œκ°€ 100개 이상이면 λ‹€μŒ 100개 정보λ₯Ό 뢈러올 μ»€μ„œκ°’μž…λ‹ˆλ‹€.

    created_at

    number

    μΉ΄λ“œκ°€ λ°œν–‰λœ μ‹œκ°„μž…λ‹ˆλ‹€.

    updated_at

    number

    μΉ΄λ“œκ°€ μ—…λ°μ΄νŠΈλœ μ‹œκ°„μž…λ‹ˆλ‹€.

    owner

    string

    이 계정 EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    sender

    string

    이 κ³„μ •μœΌλ‘œ μΉ΄λ“œλ₯Ό 보낸 μ‚¬λžŒμ˜ EOA μ£Όμ†Œμž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    pin*

    string

    μ„œλͺ…에 μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ(SHA256)ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

    card_ids*

    array

    μΉ΄λ“œ ID듀이 λ‹΄κΈ΄ number λ°°μ—΄μž…λ‹ˆλ‹€. μ΅œλŒ€ 100개의 μ›μ†Œλ₯Ό 담을 수 μžˆμŠ΅λ‹ˆλ‹€.

    contract_address*

    string

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ SCA μ£Όμ†Œμž…λ‹ˆλ‹€.

    tx_hash*

    string

    μ‘°νšŒν•  νŠΈλžœμž­μ…˜ ν•΄μ‹œ κ°’μž…λ‹ˆλ‹€.

    Authorization*

    string

    JWT ν˜•μ‹ 인증 ν† ν°μž…λ‹ˆλ‹€.

    Content-Type*

    string

    application/json

    success

    bool

    νŠΈλžœμž­μ…˜ 성곡 μ—¬λΆ€μž…λ‹ˆλ‹€.

    {
      "email": "[email protected]",
      "klaytn_address":0xdc6AE5861a73d852bd3cdD84a4BA7f598A5160F3,
      "contract_address": "0xc94770007dda54cF92009BFF0dE90c06F603a09f",
      "name": "Ray Kim",
      "phone": "01077777777",
      "service_name": "νŒνƒ€μ§€μ›”λ“œλ ˆλ³Όλ£¨μ…˜"
      "access_token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJI...",
      "status" : 1
      "mint_limit": 1000
      "mint_count": 1
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "not found user info in db": 계정 정보가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    "banned accounts cannot login": 제재 계정은 λ‘œκ·ΈμΈν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    "suspended accounts cannot login": μ •μ§€ 계정은 λ‘œκ·ΈμΈν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    "not yet approved": 아직 κ°€μž…μ΄ μŠΉμΈλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
    "invalid password": λΉ„λ°€λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    λ‘œκ·ΈμΈν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    Klip Partners
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    App2App의 Get Card Information
    νŠœν† λ¦¬μ–Ό1
    νŠœν† λ¦¬μ–Ό2
    νŠœν† λ¦¬μ–Ό1
    νŠœν† λ¦¬μ–Ό2
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    pagination
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    νŠœν† λ¦¬μ–Ό
    개발자 포럼
    curl -X POST "https://api.klipwallet.com/v2/partner/auth" \
    -d '{"email":"[email protected]", "password":"C01069C9ABB6EA7DA49AE418A24BBEF3AD67170DDCD20AC7C76084A5A85E4057"}' \
    -H "Content-Type: application/json"
    {}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "invalid password": λΉ„λ°€λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    λΉ„λ°€λ²ˆν˜Έ 변경에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X PUT "https://api.klipwallet.com/v2/partner/?opt=password" \
    -d '{"old_password":"HASHED_OLD_PASSWORD", "new_password":"HASHED_NEW_PASSWORD"}' \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "exceed pin code error count": ν•€ 번호 μž…λ ₯ 였λ₯˜ νšŸμˆ˜κ°€ μ§€μ •λœ ν•œλ„λ₯Ό μ΄ˆκ³Όν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    "invalid pin code": κΈ°μ‘΄ ν•€ λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    ν•€ 번호λ₯Ό λ³€κ²½ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X PUT "https://api.klipwallet.com/v2/partner/pin" \
    -d '{"old_pin":"HASHED_OLD_PIN_NUMBER", "new_pin":"HASHED_NEW_PIN_NUMBER"}' \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {"image": "https://url_path_to_img_file/image.png"}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    이미지λ₯Ό μ—…λ‘œλ“œν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/wallet/image" \
    -F upload=@./imagefile.png \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: multipart/form-data"
    {"url": "https://url_path_to_file/file.mp4"}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "upload animation file limit exceeded": λ™μ˜μƒ 파일의 경우 μ œν•œλœ 크기 10MiBλ₯Ό λ„˜μ—ˆμŠ΅λ‹ˆλ‹€. 파일 크기λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "upload animation file extension is not support": μ§€μ›ν•˜μ§€ μ•ŠλŠ” λ™μ˜μƒ ν¬λ§·μž…λ‹ˆλ‹€.
    νŒŒμΌμ„ μ—…λ‘œλ“œν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/wallet/nftResource" \
    -F upload=@./file.mp4 \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: multipart/form-data"
    {"filename": "{uuid}.{extension}"}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "upload animation file limit exceeded": λ™μ˜μƒ 파일의 경우 μ œν•œλœ 크기 10MiBλ₯Ό λ„˜μ—ˆμŠ΅λ‹ˆλ‹€. 파일 크기λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "upload animation file extension is not support": μ§€μ›ν•˜μ§€ μ•ŠλŠ” λ™μ˜μƒ ν¬λ§·μž…λ‹ˆλ‹€.
    νŒŒμΌμ„ μ—…λ‘œλ“œν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/wallet/nftResource/secure" \
    -F upload=@./file.mp4 \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: multipart/form-data"
    {
      "hash": "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97"
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    정상적인 μΉ΄λ“œ λ°œν–‰μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    일뢀 μΉ΄λ“œλŠ” λ°œν–‰λ˜μ—ˆμ„ 수 μžˆμœΌλ‹ˆ β€˜λ³΄μœ  μΉ΄λ“œ λͺ©λ‘β€™ μ—μ„œ 보유 λͺ©λ‘μ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    //attributes μ˜ˆμ‹œ
    "attributes":[
        {
          "trait_type": "Sword", 
          "value": "Iron Short Sword"
        }, 
        {
          "trait_type": "Magic Type", 
          "value": "Fire"
        }, 
        {
          "trait_type": "Sword Level", 
          "value": "5"
        }, 
        {
          "trait_type": "Magic Level", 
          "value": "2"
        }
    ]
    //secure μ˜ˆμ‹œ ()
    "secure": {
        // 일반적으둜 bar_code λ˜λŠ” qr_code λ‘˜ 쀑 ν•˜λ‚˜λ§Œ μ„€μ •
        "bar_code": "1234 ABCD 5678 EFGH 90IJ",
        "qr_code": "https://your-domain.com?key=1234",
    
        // 사전에 μ—…λ‘œλ“œν•œ secure μ΄λ―Έμ§€μ˜ UUIDλ₯Ό μ‚¬μš©
        // λ°°μ—΄ ν˜•μ‹μ΄μ§€λ§Œ ν˜„μž¬ ν΄λ¦½μ—μ„œ μ†Œμœ μž μ „μš© μ΄λ―Έμ§€λŠ” ν•œ 개만 μΆ”κ°€ λ…ΈμΆœλ˜λ―€λ‘œ ν•˜λ‚˜λ§Œ 인자둜 μž…λ ₯
        "images": [
          {"low_resolution" : "{uploaded-filename-1}.png"}
        ],
        
        // 사전에 μ—…λ‘œλ“œν•œ secure λ™μ˜μƒμ˜ UUIDλ₯Ό μ‚¬μš©
        // λ°°μ—΄ ν˜•μ‹μ΄μ§€λ§Œ ν˜„μž¬ ν΄λ¦½μ—μ„œ μ†Œμœ μž μ „μš© λ™μ˜μƒμ€ ν•œ 개만 μΆ”κ°€ λ…ΈμΆœλ˜λ―€λ‘œ ν•˜λ‚˜λ§Œ 인자둜 μž…λ ₯
        // animationsλ₯Ό λ“±λ‘ν•˜λŠ” 경우, λ°˜λ“œμ‹œ images도 "썸넀일" μ—­ν• λ‘œμ¨ 등둝 ν•„μš”
        "animations": [
          {"low_resolution" : "{uploaded-filename-2}.mp4"}
        ],
    
        "attributes":[
            {
                "trait_type": "Sword",
                "value": "Iron Short Sword"
            },
            {
                "trait_type": "Magic Type",
                "value": "Fire"
            },
            {
                "trait_type": "Sword Level",
                "value": "5"
            },
            {
                "trait_type": "Magic Level",
                "value": "2"
            }
        ]
    }
    //status_url μ˜ˆμ‹œ
    status_url: "https://your-domain.com?key=1234"
    
    //status_url 호좜 μ‹œ 응닡값 μ˜ˆμ‹œ
    {
        "valid": true,
        "attributes":[
            {
                "trait_type": "Sword",
                "value": "Iron Short Sword"
            },
            {
                "trait_type": "Magic Type",
                "value": "Fire"
            },
            {
                "trait_type": "Sword Level",
                "value": "5"
            },
            {
                "trait_type": "Magic Level",
                "value": "2"
            }
        ]
    }
    custom_links: [
        {
            "display_name": "고객센터",
            "value": "https://customersupport.com"
        },
        {
            "display_name": "ν™ˆνŽ˜μ΄μ§€",
            "value": "https://homepage.com"
        }
    ]
    curl -X POST "https://api.klipwallet.com/v2/wallet/mint" \
    -d @./mint_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "hash": "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97",
      "result": [["홍길동", "010-1111-2222", "success", ""], ["κΉ€μΆ˜ν–₯", "010-3333-4444", "fail", "phone number does not exist"], ...]
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    정상적인 μΉ΄λ“œ λ°œν–‰μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    일뢀 μΉ΄λ“œλŠ” λ°œν–‰λ˜μ—ˆμ„ 수 μžˆμœΌλ‹ˆ β€˜λ³΄μœ  μΉ΄λ“œ λͺ©λ‘β€™ μ—μ„œ 보유 λͺ©λ‘μ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    //attributes μ˜ˆμ‹œ
    attributes:[
        {
          "trait_type": "Sword", 
          "value": "Iron Short Sword"
        }, 
        {
          "trait_type": "Magic Type", 
          "value": "Fire"
        }, 
        {
          "trait_type": "Sword Level", 
          "value": "5"
        }, 
        {
          "trait_type": "Magic Level", 
          "value": "2"
        }
    ]
    //secure μ˜ˆμ‹œ
    "secure": {
        // 일반적으둜 bar_code λ˜λŠ” qr_code λ‘˜ 쀑 ν•˜λ‚˜λ§Œ μ„€μ •
        "bar_code": "1234 ABCD 5678 EFGH 90IJ",
        "qr_code": "https://your-domain.com?key=1234",
    
        // 사전에 μ—…λ‘œλ“œν•œ secure μ΄λ―Έμ§€μ˜ UUIDλ₯Ό μ‚¬μš©
        // λ°°μ—΄ ν˜•μ‹μ΄μ§€λ§Œ ν˜„μž¬ ν΄λ¦½μ—μ„œ μ†Œμœ μž μ „μš© μ΄λ―Έμ§€λŠ” ν•œ 개만 μΆ”κ°€ λ…ΈμΆœλ˜λ―€λ‘œ ν•˜λ‚˜λ§Œ 인자둜 μž…λ ₯
        "images": [
          {"low_resolution" : "{uploaded-filename-1}.png"}
        ],
        
        // 사전에 μ—…λ‘œλ“œν•œ secure λ™μ˜μƒμ˜ UUIDλ₯Ό μ‚¬μš©
        // λ°°μ—΄ ν˜•μ‹μ΄μ§€λ§Œ ν˜„μž¬ ν΄λ¦½μ—μ„œ μ†Œμœ μž μ „μš© λ™μ˜μƒμ€ ν•œ 개만 μΆ”κ°€ λ…ΈμΆœλ˜λ―€λ‘œ ν•˜λ‚˜λ§Œ 인자둜 μž…λ ₯
        // animationsλ₯Ό λ“±λ‘ν•˜λŠ” 경우, λ°˜λ“œμ‹œ images도 "썸넀일" μ—­ν• λ‘œμ¨ 등둝 ν•„μš”
        "animations": [
          {"low_resolution" : "{uploaded-filename-2}.mp4"}
        ],
    
        "attributes":[
            {
                "trait_type": "Sword",
                "value": "Iron Short Sword"
            },
            {
                "trait_type": "Magic Type",
                "value": "Fire"
            },
            {
                "trait_type": "Sword Level",
                "value": "5"
            },
            {
                "trait_type": "Magic Level",
                "value": "2"
            }
        ]
    }
    //status_url μ˜ˆμ‹œ
    status_url: "https://your-domain.com?key=1234"
    
    //status_url 호좜 μ‹œ 응닡값 μ˜ˆμ‹œ
    {
        "valid": true,
        "attributes":[
            {
                "trait_type": "Sword",
                "value": "Iron Short Sword"
            },
            {
                "trait_type": "Magic Type",
                "value": "Fire"
            },
            {
                "trait_type": "Sword Level",
                "value": "5"
            },
            {
                "trait_type": "Magic Level",
                "value": "2"
            }
        ]
    }
    custom_links: [
        {
            "display_name": "고객센터",
            "value": "https://customersupport.com"
        },
        {
            "display_name": "ν™ˆνŽ˜μ΄μ§€",
            "value": "https://homepage.com"
        }
    ]
    curl -X POST "https://api.klipwallet.com/v2/wallet/mint/person" \
    -d @./mint_person_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "mint_count": 10
    }
    curl -X GET "https://api.klipwallet.com/v2/wallet/mint/count" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //전솑 성곡 μ˜ˆμ‹œ
    { to_address: "0xb1764B96da889..." , fail_count: 0, tx_hash: "0x7cf09602cebb..."}
    //잘λͺ»λœ ν•€ 번호λ₯Ό 1회 μž…λ ₯ μ‹œ
    {fail_count: 1}
    //잘λͺ»λœ ν•€ 번호λ₯Ό 2회 μž…λ ₯ μ‹œ
    {fail_count: 2}
    //잘λͺ»λœ ν•€ 번호 μž…λ ₯ 횟수 ν•œλ„λŠ” 5νšŒμž…λ‹ˆλ‹€. 잘λͺ»λœ ν•€ 번호λ₯Ό 5회 μž…λ ₯ν•˜κ³ 
    //μ •ν™•ν•œ ν•€ 번호λ₯Ό 6νšŒμ§Έμ— μž…λ ₯해도 λ‹€μŒ κ²°κ³Όλ₯Ό λ°›μŒμ— μœ μ˜ν•˜μ‹­μ‹œμ˜€.
    {fail_count: 6}
    //fail_count의 max값은 ν˜„μž¬ 6μž…λ‹ˆλ‹€.
    //잘λͺ»λœ ν•€ 번호λ₯Ό 7회 μž…λ ₯ μ‹œ
    {fail_count: 6}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/wallet/nft/60/1/send" \
    -d @./send_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //전솑 성곡 μ˜ˆμ‹œ
    { fail_count: 0, tx_hash: "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97" }
    //잘λͺ»λœ ν•€ 번호λ₯Ό 1회 μž…λ ₯ μ‹œ
    {fail_count: 1, tx_hash: ""}
    //잘λͺ»λœ ν•€ 번호λ₯Ό 2회 μž…λ ₯ μ‹œ
    {fail_count: 2, tx_hash: ""}
    //잘λͺ»λœ ν•€ 번호 μž…λ ₯ 횟수 ν•œλ„λŠ” 5νšŒμž…λ‹ˆλ‹€. 잘λͺ»λœ ν•€ 번호λ₯Ό 5회 μž…λ ₯ν•˜κ³ 
    //μ •ν™•ν•œ ν•€ 번호λ₯Ό 6νšŒμ§Έμ— μž…λ ₯해도 λ‹€μŒ κ²°κ³Όλ₯Ό λ°›μŒμ— μœ μ˜ν•˜μ‹­μ‹œμ˜€.
    {fail_count: 6, tx_hash: ""}
    //fail_count의 max값은 ν˜„μž¬ 6μž…λ‹ˆλ‹€.
    //잘λͺ»λœ ν•€ 번호λ₯Ό 7회 μž…λ ₯ μ‹œ
    {fail_count: 6, tx_hash: ""}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/wallet/nft/60/1/send/person" \
    -d @./send_person_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "bapps": [
            {
                "id": 2,
                "name": "bapp2",
                "bapp_img": "/img/bapp-icon2.svg",
                "category_id": 2,
                "nft_order_no": 1,
                "summary": "summary",
                "card_count": 10,
                "nft_id": 52,
                "cards": [
                        {
                            "created_at": 1580300503,
                            "updated_at": 1580300503,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 18,
                            "card_uri": "https://.../card_meta.json",
                            "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
                        ...
                    ],
                "cards_next_cursor": ""
            },
            ...
        ],
        "next_cursor": ""
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    BAppλ³„λ‘œ λ³΄μœ ν•œ μΉ΄λ“œ λͺ©λ‘μ„ λΆˆλŸ¬μ˜€μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    curl "https://api.klipwallet.com/v2/wallet/bapp?cursor=mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "name": "conan",
        "symbol_img": "",
        "cards": [
          {
              "created_at": 1580300503,
              "updated_at": 1580300503,
              "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
              "sender": "0x0000000000000000000000000000000000000000",
              "card_id": 18,
              "card_uri": "https://.../card_meta.json",
              "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
          },
        ],
        "next_cursor": "mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL",
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 정보λ₯Ό λΆˆλŸ¬μ˜€μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    curl "https://api.klipwallet.com/v2/wallet/nft/52?cursor=mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "hash": "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97"
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ μ‚­μ œμ— μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ •ν™•ν•œ 정보λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ ν˜„μž¬ μ†Œμœ ν•œ μΉ΄λ“œ λͺ©λ‘μ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    curl -X DELETE "https://api.klipwallet.com/v2/wallet/nft" \
    -d @./delete_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "fail_count": 0,
      "tx_hash": "string"
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    {
      "code": number,
      "err": "string"
    }
    curl -X POST "https://api.klipwallet.com/v2/escrow/approve" \
    -d @./approve_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "approve": true
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    {
      "code": number,
      "err": "string"
    }
    curl -X GET "https://api.klipwallet.com/v2/escrow/approve?contract_address=0xc94770007dda54cF92009BFF0dE90c06F603a09f" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "claim_links": [
        "https://klipwallet.com/?target=/claimCard/2/123?claimKey=1234567890123456789012345678901212345678901234567890123456789012"
      ],
      "fail_count": 0,
      "tx_hash": "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97"
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    {
      "code": number,
      "err": "string"
    }
    curl -X POST "https://api.klipwallet.com/v2/escrow" \
    -d @./escrow_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "cards": [
            {
                "name": "conan",
                "symbol_img": "",
                "cards": [
                  {
                      "created_at": 1580300503,
                      "updated_at": 1580300503,
                      "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                      "sender": "0x0000000000000000000000000000000000000000",
                      "card_id": 18,
                      "card_uri": "https://.../card_meta.json",
                      "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                  },
                ],
                "next_cursor": "mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL",
            }
        ]
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    curl -X GET "https://api.klipwallet.com/v2/escrow?contract_address=0xc94770007dda54cF92009BFF0dE90c06F603a09f" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "fail_count": 0,
      "tx_hash": "string"
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ μ—μŠ€ν¬λ‘œ μ·¨μ†Œμ— μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ •ν™•ν•œ 정보λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ ν˜„μž¬ μ—μŠ€ν¬λ‘œλœ μΉ΄λ“œ λͺ©λ‘μ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    {
      "code": number,
      "err": "string"
    }
    curl -X DELETE "https://api.klipwallet.com/v2/escrow" \
    -d @./cancel_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "success": true
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "no transaction receipt": νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 아직 νŠΈλžœμž­μ…˜μ΄ μ²˜λ¦¬λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ 잘λͺ»λœ νŠΈλžœμž­μ…˜ ν•΄μ‹œ κ°’μž…λ‹ˆλ‹€.
    curl -X GET "https://api.klipwallet.com/v2/wallet/receipt?tx_hash=0x880a45d3c482c7d794c2e7b7dbdc9e933a68f4a1f3d978d582ba9f9ebd1f9e72" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"

    Klip Partners

    이 νŠœν† λ¦¬μ–Όμ€ Klip νŒŒνŠΈλ„ˆ μ—¬λŸ¬λΆ„μ΄ APIλ₯Ό μ‚¬μš©ν•΄ μΉ΄λ“œλ₯Ό μ†μ‰½κ²Œ λ°œν–‰, κ΄€λ¦¬ν•˜λ„λ‘ 돕기 μœ„ν•΄ μž‘μ„±λœ 개발자 κ°€μ΄λ“œμž…λ‹ˆλ‹€.

    KaiaλŠ” 기쑴의 Klaytnκ³Ό Finschia 블둝체인 λ„€νŠΈμ›Œν¬κ°€ ν†΅ν•©λ˜μ–΄ μš΄μ˜λ˜λŠ” λΈ”λ‘μ²΄μΈμ˜ μƒˆ μ΄λ¦„μž…λ‹ˆλ‹€. 이에 따라 λ³Έ λ¬Έμ„œλŠ” λŒ€λΆ€λΆ„ Klaytn을 Kaia둜 / KLAYλ₯Ό KAIA둜 μ§€μΉ­ν•˜μ§€λ§Œ, ν•˜μœ„ ν˜Έν™˜μ„±μ„ μœ„ν•΄ κΈ°μ‘΄ 호좜과 μ‘λ‹΅μ—μ„œ μ‚¬μš©λ˜λ˜ klaytn, KLAY λ“±μ˜ ν‚€μ›Œλ“œλŠ” λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” 점 μ°Έκ³  λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

    Klip Partners API Tutorial

    1. Klip Partners

    1-1. κ°€μž… μ‹ μ²­κ³Ό 승인

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λ €λ©΄ λ¨Όμ € Klip Partners μ‚¬μ΄νŠΈμ— κ°€μž…ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ°€μž…μ„ μ‹ μ²­ν•˜λ©΄ Klip μš΄μ˜μ§„κ³Ό λ³„λ„λ‘œ ν˜‘μ˜ν•œ ν›„ κ°€μž…μ΄ μŠΉμΈλ©λ‹ˆλ‹€. κ°€μž…μ΄ 승인되면 κ°€μž… 승인 확인 메일을 λ°›μœΌλ©° Klip Partners에 λ‘œκ·ΈμΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ„œλΉ„μŠ€ μ΄μš©μ„ ν¬λ§ν•˜λŠ” νŒŒνŠΈλ„ˆμ‚¬λŠ” μ›ν™œν•œ 사업 λ…Όμ˜λ₯Ό μœ„ν•΄μ„œ (1)νšŒμ‚¬ μ†Œκ°œ, (2)μΉ΄λ“œ ν™œμš© λͺ©μ , (3)μΉ΄λ“œ ν™œμš© λ°©μ•ˆ 등을 μ„œλ©΄μœΌλ‘œ 정리해 [email protected]둜 λ³΄λ‚΄μ£Όμ‹œκΈΈ λ°”λžλ‹ˆλ‹€.

    Klip Partners μ›Ήμ‚¬μ΄νŠΈλŠ” ν—ˆκ°€λœ μ‚¬μš©μžλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ‚˜, Klip Partners μ„œλΉ„μŠ€κ°€ 2024λ…„ 7μ›” 31일자둜 μ’…λ£Œλ˜μ–΄ ν˜„μž¬λŠ” μ‹ κ·œ κ°€μž… 신청을 λ°›μ§€ μ•Šκ³  μžˆμŠ΅λ‹ˆλ‹€. μ•„μšΈλŸ¬ κΈ°μ‘΄ μ‚¬μš©μž μ—­μ‹œ 2024λ…„ 8μ›” 1일뢀터 Klip Partners APIλ₯Ό ν˜ΈμΆœν•  수 μ—†μŠ΅λ‹ˆλ‹€.

    1-2. 둜그인

    으둜 둜그인 ID와 λΉ„λ°€λ²ˆν˜Έ( emailκ³Ό password)λ₯Ό Klip Partners에 보내고 λ‘œκ·ΈμΈμ„ μš”μ²­ν•©λ‹ˆλ‹€.

    • passwordλŠ” λΉ„λ°€λ²ˆν˜Έλ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • λΉ„λ°€λ²ˆν˜ΈλŠ” 8~16자의 영문 λŒ€μ†Œλ¬Έμž, 숫자, 특수문자λ₯Ό μ‘°ν•©ν•œ string κ°’μž…λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    Klip Partners에 κ°€μž…ν•˜λ©΄ 블둝체인상에 μ—¬λŸ¬λΆ„μ˜ μ£Όμ†Œμ™€ μΉ΄λ“œλ₯Ό λ°œν–‰ν•  슀마트 μ»¨νŠΈλž™νŠΈκ°€ μƒμ„±λ©λ‹ˆλ‹€. klaytn_addressλŠ” 블둝체인에 μƒμ„±λœ μ—¬λŸ¬λΆ„μ˜ μ£Όμ†Œμ΄λ©° contract_addressλŠ” μΉ΄λ“œλ₯Ό λ°œν–‰ν•  슀마트 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ()μž…λ‹ˆλ‹€.

    둜그인 μ‹œμ μœΌλ‘œλΆ€ν„° 24μ‹œκ°„ μœ νš¨ν•œ JWT 인증 토큰(access_token)을 λ°›μŠ΅λ‹ˆλ‹€. 이 토큰은 둜그인 ν›„ 24μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ 만료되며 이 경우 μž¬λ°œκΈ‰λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    2. μΉ΄λ“œ λ°œν–‰ν•˜κΈ°

    2-1. μΉ΄λ“œ 이미지 μ—…λ‘œλ“œν•˜κΈ°

    μΉ΄λ“œ μ΄λ―Έμ§€λŠ” μΉ΄λ“œκ°€ Klip μ‚¬μš©μžμ—κ²Œ 보일 λͺ¨μ–‘μž…λ‹ˆλ‹€. μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λ €λ©΄ 이 μΉ΄λ“œ 이미지λ₯Ό λ¨Όμ € μ—…λ‘œλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€. 둜 μΉ΄λ“œ 이미지 파일, 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 이미지 μ—…λ‘œλ“œλ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    둜 μΉ΄λ“œλ₯Ό λ°œν–‰ν•˜λ €λ©΄ Upload Image API둜 λ¨Όμ € μΉ΄λ“œ 이미지λ₯Ό μ—…λ‘œλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    이미지 파일이 μ—…λ‘œλ“œλ˜λ©΄ μ—…λ‘œλ“œλœ 이미지 파일 URL μ£Όμ†Œλ₯Ό μœ„μ™€ 같이 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    2-2. νŠΉμ • EOAμ—κ²Œ μΉ΄λ“œ λ°œν–‰ν•˜κΈ°

    둜 mint_info.json 파일, 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 μΉ΄λ“œ λ°œν–‰μ„ μš”μ²­ν•©λ‹ˆλ‹€. μ—…λ‘œλ“œν•œ μΉ΄λ“œ 이미지λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. EOAλ₯Ό κ°€μ§„ μ‚¬μš©μžλΌλ©΄ λˆ„κ΅¬λ‚˜ μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

    mint_info.json μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. 이 νŒŒμΌμ—λŠ” μΉ΄λ“œ 이미지 URL μ£Όμ†Œμ™€ μΉ΄λ“œ λ°œν–‰μ— ν•„μš”ν•œ 정보가 담겨 μžˆμŠ΅λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    • to_addressλŠ” μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ„ μ‚¬μš©μž μ£Όμ†Œλ“€μ΄ λ‹΄κΈ΄ λ°°μ—΄μž…λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œκ°€ 정상 λ°œν–‰λ˜μ—ˆλ‹€λ©΄ μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°’μ„ μœ„μ™€ 같이 λ°›μŠ΅λ‹ˆλ‹€. 전달받은 νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°’μ„ μ—μ„œ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 ν•΄μ‹œκ°’μ„ μ‘°νšŒν•˜λ©΄ μΉ΄λ“œ λ°œν–‰ νŠΈλžœμž­μ…˜μ΄ 정상 μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    2-3. νŠΉμ • Klip νšŒμ›μ—κ²Œ μΉ΄λ“œ λ°œν–‰ν•˜κΈ°

    둜 mint_info.json 파일, 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 μΉ΄λ“œ λ°œν–‰μ„ μš”μ²­ν•©λ‹ˆλ‹€. Klip νšŒμ›μ˜ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ Klip νšŒμ›μ—κ²Œλ§Œ μΉ΄λ“œλ₯Ό λ°œν–‰ν•©λ‹ˆλ‹€.

    mint_info.json μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. 이 νŒŒμΌμ—λŠ” μΉ΄λ“œ 이미지 URL μ£Όμ†Œμ™€ μΉ΄λ“œ λ°œν–‰μ— ν•„μš”ν•œ 정보가 담겨 μžˆμŠ΅λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    • to_person은 μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ„ μ‚¬μš©μž [μ‹€λͺ…, μ „ν™”λ²ˆν˜Έ] 배열듀이 λ‹΄κΈ΄ 2차원 λ°°μ—΄μž…λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œκ°€ 정상 λ°œν–‰λ˜μ—ˆλ‹€λ©΄ μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ νŠΈλžœμž­μ…˜ 전솑 κ²°κ³Ό 및 νŠΈλžœμž­μ…˜ ν•΄μ‹œλ₯Ό λ°›μŠ΅λ‹ˆλ‹€.to_person에 μž…λ ₯ν•œ νšŒμ› 쀑 1λͺ…이라도 μΉ΄λ“œλ₯Ό μ •μƒμ μœΌλ‘œ λ°œν–‰λ°›μ•˜λ‹€λ©΄ μš”μ²­μ΄ 정상 처리된 κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

    μœ„ κ²°κ³Όμ—μ„œ "홍길동" νšŒμ›μ€ ν•΄λ‹Ή μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ‘œ Klip에 κ°€μž…ν•œ 정보가 μ‘΄μž¬ν•˜λ―€λ‘œ μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μŠ΅λ‹ˆλ‹€. μœ„ κ²°κ³Όμ—μ„œ "κΉ€μΆ˜ν–₯" νšŒμ›μ€ ν•΄λ‹Ή μ „ν™”λ²ˆν˜Έλ‘œ Klip에 κ°€μž…ν•œ 정보가 μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ§€ λͺ»ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    2-4. μΉ΄λ“œ λ™μ˜μƒ 파일 μ—…λ‘œλ“œν•˜κΈ°

    μΉ΄λ“œλ₯Ό λ°œν–‰ν•  λ•Œ animation_url ν•„λ“œλ₯Ό μ„€μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” μΉ΄λ“œ λ™μ˜μƒμ„ λ¨Όμ € μ—…λ‘œλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€. 둜 μΉ΄λ“œ λ™μ˜μƒ 파일, 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 λ™μ˜μƒ μ—…λ‘œλ“œλ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    파일이 μ—…λ‘œλ“œλ˜λ©΄ μ—…λ‘œλ“œλœ 파일 URL을 μœ„μ™€ 같이 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    2-5. Secure λ¦¬μ†ŒμŠ€ 포함 이미지 λ˜λŠ” λ™μ˜μƒ μ—…λ‘œλ“œν•˜κΈ°

    Secure 정보λ₯Ό ν¬ν•¨ν•œ NFTλ₯Ό μ—…λ‘œλ“œν•©λ‹ˆλ‹€. Secure μ •λ³΄λŠ” NFT μ†Œμœ μžλ§Œ 확인할 수 μžˆλŠ” 정보λ₯Ό 였브젝트 ν˜•νƒœλ‘œ μ €μž₯ν•©λ‹ˆλ‹€. attributes, qr_code, bar_code ν•„λ“œλ₯Ό μ„ νƒμ μœΌλ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    파일이 μ—…λ‘œλ“œλ˜λ©΄ μ—…λ‘œλ“œλœ 파일 URL을 μœ„μ™€ 같이 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    3. μΉ΄λ“œ μ‘°νšŒν•˜κΈ°

    3-1. BAppκ³Ό μΉ΄λ“œ 정보 ν•¨κ»˜ μ‘°νšŒν•˜κΈ°

    μΉ΄λ“œλ₯Ό λ°œν–‰ν–ˆλ‹€λ©΄ λ°œν–‰ν•œ μΉ΄λ“œλ₯Ό 포함해 μ†Œμœ ν•œ μΉ΄λ“œ 정보λ₯Ό BApp 정보와 ν•¨κ»˜ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 으둜 둜그인 μ‹œ 받은 access_token을 보내고 BApp별 μΉ΄λ“œ 정보 쑰회λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    λ³Έ API의 경우, 클립의 μžμ‚° λ¦¬μŠ€νŒ… μ •μ±… 변경에 따라 일뢀 μƒˆλ‘œμš΄ μΉ΄λ“œλŠ” μ‘°νšŒκ°€ λΆˆκ°€λŠ₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  API μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œ 정보가 정상 μ‘°νšŒλ˜μ—ˆλ‹€λ©΄ 계정이 μ“°λŠ” λͺ¨λ“  BApp λͺ©λ‘κ³Ό BApp별 μΉ΄λ“œ 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    • bappsμ—μ„œ bapp은 Klip νŒŒνŠΈλ„ˆμ‚¬κ°€ μ„œλΉ„μŠ€ν•˜λŠ” BAppμž…λ‹ˆλ‹€.

    • cardsμ—μ„œ cardλŠ” 이 BAppμ—μ„œ μ“°μ΄λŠ” Klip μΉ΄λ“œμž…λ‹ˆλ‹€. BAppμ—λŠ” μΉ΄λ“œ 1μ’…λ₯˜κ°€ λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€.

    • nft_idλž€ 이 cardλ₯Ό 블둝체인 상에 λ§Œλ“œλŠ” 슀마트 μ»¨νŠΈλž™νŠΈμ˜ IDμž…λ‹ˆλ‹€.

    1회 μš”μ²­μ— BApp 정보λ₯Ό μ΅œλŒ€ 100κ°œκΉŒμ§€ λ°›μŠ΅λ‹ˆλ‹€. 뢈러올 BApp κ°œμˆ˜κ°€ 100개 이상이면 λ‹€μŒ BApp 정보λ₯Ό 뢈러올 수 μžˆλŠ” νŽ˜μ΄μ§€λ„€μ΄μ…˜ μ»€μ„œκ°’μΈ bapps.next_cursor둜 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ BApp 정보λ₯Ό λ°›μœΌλ €λ©΄ Query νŒŒλΌλ―Έν„° cursor에 이전 ν˜ΈμΆœμ—μ„œ 받은 bapps.next_cursorλ₯Ό λ„£κ³  APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

    또 1회 μš”μ²­μ— BAppλ³„λ‘œ BAppμ—μ„œ μ“°μ΄λŠ” μΉ΄λ“œ 정보λ₯Ό μ΅œλŒ€ 100κ°œκΉŒμ§€ λ°›μŠ΅λ‹ˆλ‹€. BAppλ³„λ‘œ μΉ΄λ“œκ°€ 100개λ₯Ό μ΄ˆκ³Όν•  경우 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό λ°›μœΌλ €λ©΄, API둜 각 μΉ΄λ“œ 정보λ₯Ό 확인해야 ν•©λ‹ˆλ‹€.

    μœ„ API 응닡값을 보면 λ°œν–‰μžλŠ” BApp 2개λ₯Ό μ‚¬μš©ν•˜λ©°, 첫 번째 BAppμ—λŠ” μΉ΄λ“œμ— 3κ°œκ°€, 두 번째 BAppμ—λŠ” μΉ΄λ“œ 1κ°œκ°€ μžˆμŠ΅λ‹ˆλ‹€. bapps[0].cards 배열을 보면 μΉ΄λ“œ 생성/μ—…λ°μ΄νŠΈ μ‹œκ°„, μΉ΄λ“œ μ†Œμœ μž μ£Όμ†Œ, μΉ΄λ“œλ₯Ό 보내쀀 μ‚¬λžŒ μ£Όμ†Œ, μΉ΄λ“œ λ°œν–‰ νŠΈλžœμž­μ…˜ ν•΄μ‹œ λ“± 각 μΉ΄λ“œμ— κ΄€ν•œ 상세 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

    ν•œ λ²ˆμ— μ‘°νšŒν•  BApp κ°œμˆ˜κ°€ 100개λ₯Ό μ΄ˆκ³Όν•œλ‹€λ©΄ 1회 호좜 μ‹œ BApp 100개 μ •λ³΄λ§Œ λ°›κ³  bapps.next_cursor값을 λ°›μŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ BApp 정보λ₯Ό μ‘°νšŒν•˜λ €λ©΄ bapps.next_cursor값을 Query νŒŒλΌλ―Έν„° cursor에 μ „λ‹¬ν•˜κ³  APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    3-2. μΉ΄λ“œ μ •λ³΄λ§Œ μ‘°νšŒν•˜κΈ°

    각 BApp은 μΉ΄λ“œλ₯Ό μƒμ„±ν•˜λŠ” 슀마트 μ»¨νŠΈλž™νŠΈ ID인 nft_idκ°€ μžˆμŠ΅λ‹ˆλ‹€. 으둜 Path νŒŒλΌλ―Έν„° nft_id, 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 BAppλ³„λ‘œ μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œ 정보가 정상 μ‘°νšŒλ˜μ—ˆλ‹€λ©΄ 계정이 이 BAppμ—μ„œ μ†Œμœ ν•œ μΉ΄λ“œ λͺ©λ‘κ³Ό 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    • cardsμ—μ„œ cardλŠ” 이 bappμ—μ„œ μ“°μ΄λŠ” Klip μΉ΄λ“œμž…λ‹ˆλ‹€. bappμ—λŠ” μΉ΄λ“œ 1μ’…λ₯˜κ°€ λ“€μ–΄μžˆμŠ΅λ‹ˆλ‹€.

    • Query νŒŒλΌλ―Έν„°λ‘œ cursor λ˜λŠ” isAll λ‘˜ 쀑 ν•˜λ‚˜λ§Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€(isAll이 false이면 cursorλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€).

    μœ„ μ˜ˆμ‹œμ—μ„œ cards.next_cursor값이 μ‘΄μž¬ν•˜λ―€λ‘œ 이 계정은 conan μΉ΄λ“œλ₯Ό 100개 이상 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. ν•œ λ²ˆμ— μ‘°νšŒν•  μΉ΄λ“œ κ°œμˆ˜κ°€ 100개λ₯Ό μ΄ˆκ³Όν•œλ‹€λ©΄ 1회 호좜 μ‹œ μΉ΄λ“œ 100개 μ •λ³΄λ§Œ λ°›κ³  cards.next_cursor값을 λ°›μŠ΅λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜λ €λ©΄ cards.next_cursor값을 Query νŒŒλΌλ―Έν„° cursor에 μ „λ‹¬ν•˜κ³  APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄, 정보λ₯Ό 뢈러올 μΉ΄λ“œ κ°œμˆ˜κ°€ 150개라면, λ¨Όμ € APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ μΉ΄λ“œ 100개의 정보와 cards.next_cursor값을 λ°›μŠ΅λ‹ˆλ‹€. 그리고 λ™μΌν•œ APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•  λ•Œ cards.next_cursor값을 Query νŒŒλΌλ―Έν„° cursor둜 μ‚¬μš©ν•˜λ©΄ λ‚˜λ¨Έμ§€ 50개의 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    으둜 cards.next_cursorκ°’κ³Ό 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보 쑰회λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    cards λ°°μ—΄μ˜ 상세 μ •λ³΄λŠ” 으둜 λ°›λŠ”bapps[i].cardsλ°°μ—΄ 정보와 λ™μΌν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    3-3. μΉ΄λ“œκ°€ 100개λ₯Ό μ΄ˆκ³Όν•  λ•Œ λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보 μ‘°νšŒν•˜κΈ°

    은 1회 μš”μ²­μ— 각 BAppλ‹Ή μΉ΄λ“œ 정보λ₯Ό μ΅œλŒ€ 100κ°œκΉŒμ§€λ§Œ λ°˜ν™˜ν•©λ‹ˆλ‹€. BApp별 μΉ΄λ“œκ°€ 100개λ₯Ό μ΄ˆκ³Όν•  λ•Œ λ‚˜λ¨Έμ§€ μΉ΄λ“œ μ •λ³΄κΉŒμ§€ λ°›μœΌλ €λ©΄, 을 λ”°λ‘œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. 101번째 μΉ΄λ“œλΆ€ν„° μ‘°νšŒν•˜λ €λ©΄ bapps[i].cards_next_cursorλ₯Ό Query νŒŒλΌλ―Έν„° cursor둜 μ‚¬μš©ν•΄ 을 ν˜ΈμΆœν•©λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄, BApp을 2개 κ°€μ§€κ³  있고 BApp1에 μΉ΄λ“œ 150개, BApp2에 μΉ΄λ“œ 200κ°œκ°€ μžˆμ„ λ•Œ 을 ν˜ΈμΆœν•˜λ©΄ BApp1 μΉ΄λ“œ 100개, BApp2 μΉ΄λ“œ 100개의 μ •λ³΄λ§Œμ„ λ°›μŠ΅λ‹ˆλ‹€. 으둜 둜그인 μ‹œ 받은 access_token을 보내고 BApp별 μΉ΄λ“œ 정보 쑰회λ₯Ό μš”μ²­ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    λ³Έ API의 경우, 클립의 μžμ‚° λ¦¬μŠ€νŒ… μ •μ±… 변경에 따라 일뢀 μƒˆλ‘œμš΄ μΉ΄λ“œλŠ” μ‘°νšŒκ°€ λΆˆκ°€λŠ₯ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  API μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    BApp1 λ‚˜λ¨Έμ§€ 50개 μΉ΄λ“œ 정보λ₯Ό λ°›μœΌλ €λ©΄ Query νŒŒλΌλ―Έν„° cursor에 bapps[0].cards_next_cursor값인 gKvkL1lPYv1P93dpE...λ₯Ό 전달해 을 ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.

    으둜 gKvkL1lPYv1P93dpE...κ³Ό 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 BApp1 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 50개 정보 μˆ˜μ‹ μ„ μš”μ²­ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    BApp2 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 100개 정보λ₯Ό λ°›μœΌλ €λ©΄ Query νŒŒλΌλ―Έν„° cursor에 bapps[1].cards_next_cursor값인 Xrzed2Ot9LeEor...을 전달해 을 ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€. 으둜 Xrzed2Ot9LeEor...κ³Ό 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 BApp2 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 100개 정보 μˆ˜μ‹ μ„ μš”μ²­ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    3-4. μΉ΄λ“œ κ°œμˆ˜μ— 관계없이 ν•œ λ²ˆμ— μ‘°νšŒν•˜κΈ°

    νŽ˜μ΄μ§€λ„€μ΄μ…˜μœΌλ‘œ μΉ΄λ“œ 정보λ₯Ό 100κ°œμ”© ν™•μΈν•˜μ§€ μ•Šκ³  ν•œ λ²ˆμ— λͺ¨λ“  μΉ΄λ“œ 정보λ₯Ό λ°›μœΌλ €λ©΄ 으둜 Query νŒŒλΌλ―Έν„° isAll, Path νŒŒλΌλ―Έν„° nft_id, 둜그인 μ‹œ 받은 access_token을 Klip Partners에 보내고 λͺ¨λ“  μΉ΄λ“œ 정보λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œ 정보가 정상 μ‘°νšŒλ˜μ—ˆλ‹€λ©΄ 계정이 이 BAppμ—μ„œ μ“°λŠ” λͺ¨λ“  μΉ΄λ“œ λͺ©λ‘κ³Ό 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    • Query νŒŒλΌλ―Έν„°λ‘œ cursor λ˜λŠ” isAll λ‘˜ 쀑 ν•˜λ‚˜λ§Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€(isAll이 false이면 cursorλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€).

    cards λ°°μ—΄μ˜ 상세 μ •λ³΄λŠ” 으둜 λ°›λŠ”bapps[i].cardsλ°°μ—΄ 정보와 λ™μΌν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    3-5. Secure λ¦¬μ†ŒμŠ€ 포함 이미지 λ˜λŠ” λ™μ˜μƒ 정보 μ‘°νšŒν•˜κΈ°

    νŒŒνŠΈλ„ˆμ‚¬μ—μ„œ μ—…λ‘œλ“œν•œ secure λ―Έλ””μ–΄ 파일 λͺ©λ‘μ„ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°˜ν™˜λ˜λŠ” 파일 λͺ©λ‘ ν˜•νƒœλŠ” <uploaded_secure_url>/<uploaded_files[0]>?<uploaded_secure_query>이며, μ‚¬μš©ν•˜λ €λ©΄ Klip νŒ€μœΌλ‘œ λ¨Όμ € λ¬Έμ˜ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    4. μΉ΄λ“œ μ „μ†‘ν•˜κΈ°

    4-1. νŠΉμ • EOAμ—κ²Œ μ „μ†‘ν•˜κΈ°

    둜 Klip Partners에 둜그인 μ‹œ 받은 access_token, send_info.json 파일, 전솑할 BApp μΉ΄λ“œμ˜ nft_id와 card_id(Path νŒŒλΌλ―Έν„°)λ₯Ό 보내고 ν˜„μž¬ 계정 μ£Όμ†Œμ— μžˆλŠ” μΉ΄λ“œλ₯Ό λ‹€λ₯Έ μ‚¬λžŒμ˜ μ£Όμ†Œλ‘œ μ „μ†‘ν•˜λ„λ‘ μš”μ²­ν•©λ‹ˆλ‹€.

    EOAλ₯Ό κ°€μ§„ μ‚¬μš©μžλΌλ©΄ λˆ„κ΅¬λ‚˜ μΉ΄λ“œλ₯Ό 전솑받을 수 μžˆμŠ΅λ‹ˆλ‹€.

    send_info.json 파일 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    이 νŒŒμΌμ—λŠ” μΉ΄λ“œ 이름, pin, μΉ΄λ“œλ₯Ό λ°›λŠ” μ‚¬λžŒμ˜ μ£Όμ†Œκ°€ 담겨 μžˆμŠ΅λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    전솑에 μ„±κ³΅ν•˜λ©΄ μΉ΄λ“œ μˆ˜μ‹ μž μ£Όμ†Œ, 전솑 μ‹€νŒ¨ 횟수, μΉ΄λ“œλ₯Ό μ „μ†‘ν•œ νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°’μ„ λ°›μŠ΅λ‹ˆλ‹€. 전솑에 μ„±κ³΅ν•˜λ©΄ fail_count 0을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œλ₯Ό 보내면 Klip νšŒμ›μΈ μΉ΄λ“œ μˆ˜μ‹ μžλŠ” μ•Œλ¦Όν†‘μ„ λ°›μŠ΅λ‹ˆλ‹€. μ „μ†‘μžλŠ” μ•Œλ¦Όν†‘μ„ λ°›μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Klip μ‚¬μš©μžμ—κ²Œ μΉ΄λ“œλ₯Ό 전솑 μ‹œ card_name을 μž…λ ₯ν•΄μ•Ό λ°›λŠ” μ‚¬λžŒμ—κ²Œ μΉ΄λ“œ 이름이 정상 ν‘œμ‹œλ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    4-2. νŠΉμ • Klip νšŒμ›μ—κ²Œ μ „μ†‘ν•˜κΈ°

    둜 Klip Partners에 둜그인 μ‹œ 받은 access_token, send_info.json 파일, 전솑할 BApp μΉ΄λ“œμ˜ nft_id와 card_id(Path νŒŒλΌλ―Έν„°)λ₯Ό 보내고 ν˜„μž¬ 계정 μ£Όμ†Œμ— μžˆλŠ” μΉ΄λ“œλ₯Ό λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ μ „μ†‘ν•˜λ„λ‘ μš”μ²­ν•©λ‹ˆλ‹€.

    Klip νšŒμ›μ˜ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ Klip νšŒμ›μ—κ²Œλ§Œ μΉ΄λ“œλ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.

    send_info.json 파일 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    이 νŒŒμΌμ—λŠ” μΉ΄λ“œ 이름, pin, μΉ΄λ“œλ₯Ό λ°›λŠ” μ‚¬λžŒμ΄ Klip νšŒμ›μ— κ°€μž… μ‹œ μ‚¬μš©ν•œ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έκ°€ 담겨 μžˆμŠ΅λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    • to_person νŒŒλΌλ―Έν„°μ— μ „λ‹¬ν•œ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ‘œ κ°€μž…ν•œ Klip νšŒμ›μ΄ μ—†λ‹€λ©΄ 전솑에 μ‹€νŒ¨ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    전솑에 μ„±κ³΅ν•˜λ©΄ fail_count 0을 λ°›μŠ΅λ‹ˆλ‹€.

    μΉ΄λ“œλ₯Ό 보내면 Klip νšŒμ›μΈ μΉ΄λ“œ μˆ˜μ‹ μžλŠ” μ•Œλ¦Όν†‘μ„ λ°›μŠ΅λ‹ˆλ‹€. μ „μ†‘μžλŠ” μ•Œλ¦Όν†‘μ„ λ°›μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. Klip μ‚¬μš©μžμ—κ²Œ μΉ΄λ“œλ₯Ό 전솑 μ‹œ card_name을 μž…λ ₯ν•΄μ•Ό λ°›λŠ” μ‚¬λžŒμ—κ²Œ μΉ΄λ“œ 이름이 정상 ν‘œμ‹œλ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    5. μ—μŠ€ν¬λ‘œ

    5-1. μ—μŠ€ν¬λ‘œ μ‚¬μš© λ™μ˜

    μ—μŠ€ν¬λ‘œ κΈ°λŠ₯을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μΉ΄λ“œ λ°œκΈ‰μ„ μœ„ν•œ μ»¨νŠΈλž™νŠΈμ—μ„œ μ—μŠ€ν¬λ‘œ μ»¨νŠΈλž™νŠΈλ₯Ό μŠΉμΈν•˜λŠ” 과정이 ν•„μš”ν•©λ‹ˆλ‹€. μ‚¬μš© λ™μ˜λŠ” ν•œ 번만 μˆ˜ν–‰ν•˜λ©΄ 되며 μ΄ν›„μ—λŠ” λ‹€μ‹œ μˆ˜ν–‰ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

    approve.json 파일 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    이 νŒŒμΌμ—λŠ” pin, contract_addressλŠ” μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ()κ°€ λ“€μ–΄κ°‘λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μ—μŠ€ν¬λ‘œ 생성에 μ„±κ³΅ν•˜λ©΄ νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°’μ„ λ°›μŠ΅λ‹ˆλ‹€. λ§Œμ•½ pin 확인에 μ‹€νŒ¨ν•œ 경우 fail_count에 0보닀 큰 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    5-2. μ—μŠ€ν¬λ‘œ μ‚¬μš© λ™μ˜ μ—¬λΆ€ 쑰회

    μ—μŠ€ν¬λ‘œ μ‚¬μš© λ™μ˜ μ—¬λΆ€λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μ—μŠ€ν¬λ‘œ 생성에 μ„±κ³΅ν•˜λ©΄ approve ν•„λ“œμ— true 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    5-3. μ—μŠ€ν¬λ‘œ 전솑 링크 생성

    μ—μŠ€ν¬λ‘œ 전솑은 Klip νšŒμ›μ—κ²Œ μΉ΄λ“œλ₯Ό λ°”λ‘œ μ „μ†‘ν•˜μ§€ μ•Šκ³  μΉ΄λ“œ μ§€κΈ‰ 링크λ₯Ό ν†΅ν•΄μ„œ μ „μ†‘ν•˜λŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. μ—μŠ€ν¬λ‘œ 전솑 κΈ°λŠ₯을 ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € μΉ΄λ“œ μ§€κΈ‰ 링크 생성 APIλ₯Ό ν˜ΈμΆœν•΄μ•Όν•©λ‹ˆλ‹€. 기본적으둜 λ³΄μœ ν•œ μΉ΄λ“œμ— ν•œν•˜μ—¬ μ—μŠ€ν¬λ‘œ 생성을 μš”μ²­ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—μŠ€ν¬λ‘œ 생성 ν›„ ν•΄λ‹Ή μΉ΄λ“œλŠ” 더 이상 μΉ΄λ“œ 보유 λͺ©λ‘μ—μ„œ μ‘°νšŒλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    escrow_info.json 파일 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    이 νŒŒμΌμ—λŠ” pin, contract_addressλŠ” μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ(), μ—μŠ€ν¬λ‘œ 전솑할 card_id의 배열인 card_idsκ°€ λ“€μ–΄κ°‘λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μ—μŠ€ν¬λ‘œ 생성에 μ„±κ³΅ν•˜λ©΄ νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°’κ³Ό μΉ΄λ“œ μ§€κΈ‰ 링크 그리고 fail_count 0을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    5-4. μ—μŠ€ν¬λ‘œ λ‚΄μ—­ 쑰회

    μ—μŠ€ν¬λ‘œ 생성에 μ„±κ³΅ν–ˆλ‹€λ©΄ ν˜„μž¬ μ—μŠ€ν¬λ‘œ 쀑인 μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    cards λ°°μ—΄μ˜ 상세 μ •λ³΄λŠ” 의 Response Detail ν•­λͺ©μ„ μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    5-5. μ—μŠ€ν¬λ‘œ μ‚­μ œ

    ν˜„μž¬ μ—μŠ€ν¬λ‘œ 쀑인 μΉ΄λ“œλ₯Ό μ·¨μ†Œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ·¨μ†Œλœ μΉ΄λ“œλŠ” μΉ΄λ“œ 보유 λͺ©λ‘μ—μ„œ λ‹€μ‹œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

    cancel_info.json 파일 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    이 νŒŒμΌμ—λŠ” pin, contract_addressλŠ” μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ 슀마트 μ»¨νŠΈλž™νŠΈ μ£Όμ†Œ(), μ·¨μ†Œν•  card_id의 배열인 card_idsκ°€ λ“€μ–΄κ°‘λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μ—μŠ€ν¬λ‘œ 생성에 μ„±κ³΅ν•˜λ©΄ νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°’κ³Ό fail_count 0을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    6. νŠΈλžœμž­μ…˜

    6-1. 처리 결과 쑰회

    νŠΈλžœμž­μ…˜ 처리 κ²°κ³Όκ°€ 블둝에 μ΅œμ’… μ„±κ³΅μœΌλ‘œ κΈ°λ‘λλŠ”μ§€ μ—¬λΆ€λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŠΈλžœμž­μ…˜ μš”μ²­ ν›„ κ³§λ°”λ‘œ κ²°κ³Όλ₯Ό μ‘°νšŒν•˜λŠ” 경우 4700: no transaction receipt μ—λŸ¬κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λŒ€λž΅ 2초 μ΄μƒμ˜ λ”œλ ˆμ΄λ₯Ό 두고 μ—λŸ¬κ°€ λœ¨μ§€ μ•Šμ„ λ•ŒκΉŒμ§€ 수회 반볡 ν˜ΈμΆœν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    7. 계정과 μΉ΄λ“œ κ΄€λ¦¬ν•˜κΈ°

    7-1. 계정 λΉ„λ°€λ²ˆν˜Έμ™€ ν•€ 번호 λ³€κ²½ν•˜κΈ°

    둜 Klip Partners에 old_password, new_password, 둜그인 μ‹œ 받은 access_token을 보내고 이전 λΉ„λ°€λ²ˆν˜Έμ—μ„œ μƒˆλ‘œμš΄ λΉ„λ°€λ²ˆν˜Έλ‘œ ꡐ체λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    • old_password, new_passwordλŠ” κΈ°μ‘΄ λΉ„λ°€λ²ˆν˜Έ/μƒˆλ‘­κ²Œ μ‚¬μš©ν•  λΉ„λ°€λ²ˆν˜Έλ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • κΈ°μ‘΄ λΉ„λ°€λ²ˆν˜Έ/μƒˆλ‘­κ²Œ μ‚¬μš©ν•  λΉ„λ°€λ²ˆν˜ΈλŠ” 8~16자의 영문 λŒ€μ†Œλ¬Έμž, 숫자, 특수문자λ₯Ό μ‘°ν•©ν•œ string κ°’μž…λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ 이전 λΉ„λ°€λ²ˆν˜Έκ°€ μƒˆ λΉ„λ°€λ²ˆν˜Έλ‘œ ꡐ체된 κ²ƒμž…λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    으둜 Klip Partners에 이전 ν•€ 번호, μƒˆλ‘œμš΄ ν•€ 번호, 둜그인 μ‹œ 받은 access_token을 보내고 μƒˆλ‘œμš΄ ν•€ 번호둜 ν•€ 번호 ꡐ체λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    • old_pinκ³Ό new_pin은 κΈ°μ‘΄ ν•€ 번호/μƒˆλ‘­κ²Œ μ‚¬μš©ν•  ν•€ 번호λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • old_pinκ³Ό new_pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

      • κΈ°μ‘΄ ν•€ 번호/μƒˆλ‘­κ²Œ μ‚¬μš©ν•  ν•€ λ²ˆν˜ΈλŠ” 6자리 μˆ«μžμž…λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ 이전 ν•€ λ²ˆν˜Έκ°€ μƒˆ ν•€ 번호둜 ꡐ체된 κ²ƒμž…λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    7-2. 이번 달 λ°œν–‰ν•œ μΉ΄λ“œ 개수

    이번 달에 νŒŒνŠΈλ„ˆ κ³„μ •μœΌλ‘œ λ°œν–‰ν•œ 총 μΉ΄λ“œ 개수λ₯Ό μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 값은 λ§€μ›” 1일에 0으둜 μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    mint_count ν•„λ“œμ— ν˜„μž¬κΉŒμ§€ λ°œν–‰ν•œ μΉ΄λ“œ 개수 값을 λ°›μŠ΅λ‹ˆλ‹€.

    7-3. μΉ΄λ“œ μ‚­μ œν•˜κΈ°

    둜 Klip Partners에 delete_info.json 파일, 둜그인 μ‹œ 받은 access_token을 보내고 λ°œν–‰ν•œ μΉ΄λ“œ μ‚­μ œλ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

    delete_info.json 파일 μ˜ˆμ‹œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

    이 νŒŒμΌμ—λŠ” μ‚­μ œν•  μΉ΄λ“œ ID, μΉ΄λ“œλ₯Ό λ°œν–‰ν•œ μ£Όμ†Œ, ν•€ λ²ˆν˜Έκ°€ 담겨 μžˆμŠ΅λ‹ˆλ‹€.

    • pin은 ν•€ 번호(Klip Partners νšŒμ› κ°€μž… μ‹œ μ„€μ •ν•œ 6자리 숫자)λ₯Ό ν•΄μ‹œ()ν•œ 64자리 Hex String κ°’μž…λ‹ˆλ‹€.

      • pin은 νŠΈλžœμž­μ…˜ μ„œλͺ…에 개인 ν‚€ λŒ€μ‹  μ‚¬μš©λ©λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 처리되면 μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ μΉ΄λ“œκ°€ 정상 μ‚­μ œλœ κ²ƒμž…λ‹ˆλ‹€. μΉ΄λ“œκ°€ 정상 μ‚­μ œλ˜μ—ˆλ‹€λ©΄ μΉ΄λ“œ μ‚­μ œ νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°’μ„ λ°›μŠ΅λ‹ˆλ‹€.

    λ°œν–‰ν•œ μΉ΄λ“œλ§Œ μ‚­μ œν•  수 있으며, λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 보낸 μΉ΄λ“œλŠ” μ‚­μ œν•  수 μ—†μŠ΅λ‹ˆλ‹€. μΉ΄λ“œλ₯Ό μ‚­μ œν•΄λ„ μΉ΄λ“œ μ΄λ―Έμ§€λŠ” μ‚­μ œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    μš”μ²­μ΄ 정상 μ²˜λ¦¬λ˜μ§€ μ•ŠμœΌλ©΄ μ•„λž˜ 값을 λ°›μŠ΅λ‹ˆλ‹€.

    이 λ¬Έμ„œ ν˜Ήμ€ Klip에 κ΄€ν•œ λ¬Έμ˜λŠ” 을 λ°©λ¬Έν•΄ 도움을 λ°›μœΌμ‹­μ‹œμ˜€.

    to_address에 μ›μ†Œ 1개짜리 배열을 μ „λ‹¬ν•˜λ©΄ 1λͺ…μ—κ²Œλ§Œ λ°œν–‰ν•©λ‹ˆλ‹€.

  • to_address에 넣을 수 μžˆλŠ” EOA μ£Όμ†Œ κ°œμˆ˜λŠ” API 호좜 1νšŒλ‹Ή μ΅œλŒ€ 200κ°œμž…λ‹ˆλ‹€.

  • sendable이 TRUE이면 μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ€ μ‚¬λžŒμ€ λ°œν–‰λ°›μ€ μΉ΄λ“œλ₯Ό Klipμ—μ„œ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • send_friend_onlyκ°€ TRUE이면 μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ€ μ‚¬λžŒμ€ λ°œν–‰λ°›μ€ μΉ΄λ“œλ₯Ό Klipμ—μ„œ μΉ΄μΉ΄μ˜€ν†‘ μΉœκ΅¬μ—κ²Œλ§Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • hashtags λ°°μ—΄μ˜ μ›μ†Œ κ°œμˆ˜λŠ” μ΅œλŒ€ 10κ°œμž…λ‹ˆλ‹€. 각 μ›μ†ŒλŠ” μ΅œλŒ€ 100κΈ€μžμž…λ‹ˆλ‹€.

  • external_linkλ₯Ό μ§€μ •ν•˜λ©΄ Klip μ™ΈλΆ€ λΈŒλΌμš°μ €λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œλ₯Ό 넣을 수 μžˆμŠ΅λ‹ˆλ‹€. μ΅œλŒ€ 255μžκΉŒμ§€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • qr_code둜 μ‚¬μš©ν•  μ΄λ―Έμ§€λŠ” κ°€λ‘œ 400px 이상이고 μƒν•˜μ’Œμš° 여백이 μ—†λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

  • bar_code둜 μ‚¬μš©ν•  μ΄λ―Έμ§€λŠ” κ°€λ‘œ 400px 이상이고 μƒν•˜μ’Œμš° 여백이 μ—†λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

  • attributesλŠ” μΉ΄λ“œμ˜ κ³ μœ ν•œ 속성을 trait_type/value ν˜•νƒœλ‘œ κ°€μ§€λŠ” objectλ“€μ˜ λ°°μ—΄μž…λ‹ˆλ‹€.

  • to_person에 μ›μ†Œ 1개짜리 배열을 μ „λ‹¬ν•˜λ©΄ 1λͺ…μ—κ²Œλ§Œ λ°œν–‰ν•©λ‹ˆλ‹€.

  • to_person에 넣을 수 μžˆλŠ” [μ‹€λͺ…, μ „ν™”λ²ˆν˜Έ] κ°œμˆ˜λŠ” API 호좜 1νšŒλ‹Ή μ΅œλŒ€ 200κ°œμž…λ‹ˆλ‹€.

  • to_person νŒŒλΌλ―Έν„°μ— μ „λ‹¬ν•œ μ‹€λͺ…κ³Ό μ „ν™”λ²ˆν˜Έλ‘œ κ°€μž…ν•œ Klip νšŒμ›μ΄ μ—†λ‹€λ©΄ λ°œν–‰μ— μ‹€νŒ¨ν•©λ‹ˆλ‹€.

  • sendable이 TRUE이면 μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ€ μ‚¬λžŒμ€ λ°œν–‰λ°›μ€ μΉ΄λ“œλ₯Ό Klipμ—μ„œ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • send_friend_onlyκ°€ TRUE이면 μΉ΄λ“œλ₯Ό λ°œν–‰λ°›μ€ μ‚¬λžŒμ€ λ°œν–‰λ°›μ€ μΉ΄λ“œλ₯Ό Klipμ—μ„œ μΉ΄μΉ΄μ˜€ν†‘ μΉœκ΅¬μ—κ²Œλ§Œ 전솑 κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • hashtags λ°°μ—΄μ˜ μ›μ†Œ κ°œμˆ˜λŠ” μ΅œλŒ€ 10κ°œμž…λ‹ˆλ‹€. 각 μ›μ†ŒλŠ” μ΅œλŒ€ 100κΈ€μžμž…λ‹ˆλ‹€.

  • external_linkλ₯Ό μ§€μ •ν•˜λ©΄ Klip μ™ΈλΆ€ λΈŒλΌμš°μ €λ‘œ μ—°κ²°λ˜λŠ” URL μ£Όμ†Œλ₯Ό 넣을 수 μžˆμŠ΅λ‹ˆλ‹€. μ΅œλŒ€ 255μžκΉŒμ§€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

  • qr_code둜 μ‚¬μš©ν•  μ΄λ―Έμ§€λŠ” κ°€λ‘œ 400px 이상이고 μƒν•˜μ’Œμš° 여백이 μ—†λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

  • bar_code둜 μ‚¬μš©ν•  μ΄λ―Έμ§€λŠ” κ°€λ‘œ 400px 이상이고 μƒν•˜μ’Œμš° 여백이 μ—†λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

  • attributesλŠ” μΉ΄λ“œμ˜ κ³ μœ ν•œ 속성을 trait_type/value ν˜•νƒœλ‘œ κ°€μ§€λŠ” objectλ“€μ˜ λ°°μ—΄μž…λ‹ˆλ‹€.

  • nft와 bapp은 항상 1:1둜 λ§΅ν•‘λ©λ‹ˆλ‹€.

  • card_uriλŠ” μΉ΄λ“œ 메타데이터가 λ‹΄κΈ΄ JSON 파일이 μžˆλŠ” URLμž…λ‹ˆλ‹€.

    • μΉ΄λ“œ λ©”νƒ€λ°μ΄ν„°λŠ” name, description, image, background_color, attributes λ“± μΉ΄λ“œλ₯Ό λ°œν–‰ν•  λ•Œ μ •μ˜ν•œ μΉ΄λ“œ κΈ°λ³Έ μ •λ³΄μž…λ‹ˆλ‹€.

  • cursorλ₯Ό μ‚¬μš©ν•˜λ©΄ Pagination을 μ‚¬μš©ν•©λ‹ˆλ‹€.

    • 1회 μš”μ²­μ— μ΅œλŒ€ μΉ΄λ“œ 100개의 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    • 정보λ₯Ό 뢈러울 μΉ΄λ“œκ°€ 100개λ₯Ό 초과 μ‹œ λ‹€μŒ μΉ΄λ“œ 정보λ₯Ό 뢈러올 수 μžˆλŠ” μ»€μ„œκ°’μΈ next_cursor둜 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    • λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보λ₯Ό λ°›μœΌλ €λ©΄ cursor에 이전 ν˜ΈμΆœμ—μ„œ 받은 next_cursorλ₯Ό λ„£κ³  APIλ₯Ό λ‹€μ‹œ ν˜ΈμΆœν•©λ‹ˆλ‹€.

  • nft_idλŠ” Get Card Information by BApp API둜 받은 BApp μ •λ³΄μ—μ„œ ν™•μΈν•©λ‹ˆλ‹€.

  • Sign In
    SHA256
    Kaia
    EOA
    Kaia
    EOA
    SCA
    Upload Image
    Mint Card To User
    Mint Card To User
    SHA256
    EOA
    Kaiascope
    Mint Card To Klip Member
    SHA256
    Upload NFT Resource
    Get Card Information by BApp
    App2App의 Get Card Information
    Get Card Information
    Get Card Information
    Get Card Information
    Get Card Information by BApp
    Get Card Information By BApp
    Get Card Information
    Get Card Information
    Get Card Information By BApp
    Get Card Information By BApp
    App2App의 Get Card Information
    Get Card Information
    Get Card Information
    Get Card Information
    Get Card Information
    Get Card Information
    Get Card Information by BApp
    Send Card To User
    EOA
    EOA
    EOA
    SHA256
    EOA
    Send Card To Klip Member
    EOA
    SHA256
    SCA
    SHA256
    SCA
    SHA256
    Escrow Information
    SCA
    SHA256
    Change Password
    SHA256
    Change PIN
    SHA256
    Delete Card
    SCA
    SHA256
    개발자 포럼
    //Klip Partners 둜그인
    curl -X POST "https://api.klipwallet.com/v2/partner/auth" \
    -d '{"email":"[email protected]", "password":"C01069C9ABB6EA7DA49AE418A24BBEF3AD67170DDCD20AC7C76084A5A85E4057"}' \
    -H "Content-Type: application/json"
    {
      "email": "[email protected]",
      "klaytn_address":0xdc6AE5861a73d852bd3cdD84a4BA7f598A5160F3,
      "contract_address": "0xc94770007dda54cF92009BFF0dE90c06F603a09f",
      "name": "Ray Kim",
      "phone": "01077777777",
      "service_name": "νŒνƒ€μ§€μ›”λ“œλ ˆλ³Όλ£¨μ…˜",
      "access_token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJI...",
      "status" : 10,
      "mint_limit": 1000,
      "mint_count": 1,
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "not found user info in db": 계정 정보가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    "not yet approved": 아직 κ°€μž…μ΄ μŠΉμΈλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
    "invalid password": λΉ„λ°€λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    λ‘œκ·ΈμΈν•  수 μ—†μŠ΅λ‹ˆλ‹€.
    //Klip Partners에 μΉ΄λ“œ 이미지 μ—…λ‘œλ“œ
    curl -X POST "https://api.klipwallet.com/v2/wallet/image" \
    -F upload=@./imagefile.png \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: multipart/form-data"
    {"image": "https://path_to_image/image.png"}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    이미지λ₯Ό μ—…λ‘œλ“œν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //μΉ΄λ“œ λ°œν–‰ν•˜κΈ°
    curl -X POST "https://api.klipwallet.com/v2/wallet/mint" \
    -d @./mint_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //mint_info.json 파일 λ‚΄μš© μ˜ˆμ‹œ
    {
      "pin": "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
      "to_address": ["0x01ea07D1258c106FFD3197721a838F02408ea809",
        "0xE2d12bE9E570AE58277d6872B001fE9dF94D1531",
        "0xb1764B96da889Cc2F043025aa368517C80e86795"],
      "contract_address": "0xbad6444e1f84af055c22281d4ac7d75bde2ddec8",
      "name": "Magic Sword",
      "description" : "κ²Œμž„ λ‚΄μ—μ„œ λ§ˆλ²• 속성을 띈 λ§ˆκ²€μ„ μ†Œν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.",
      "image": "https://path_to_image/image.png",
      "animation_url": "https://path_to_video/video.mp4",
      "background_color" : "#ae312e",
      "sendable": true,
      "send_friend_only": true,
      "group_name": "Ground X Magic Game",
      "group_icon": "https://path_to_image/image.png",
      "hashtags": ["Game","groundX","Magic"],
      "layout": "vertical",
      "external_link": "https://path_to_ext_link",
      "qr_code": "https://path_to_image/qr_image.png",
      "bar_code": "https://path_to_image/bar_image.png",
      "attributes" : [
        {
          "trait_type": "Sword", 
          "value": "Iron Short Sword"
        }, 
        {
          "trait_type": "Magic Type", 
          "value": "Fire"
        }, 
        {
          "trait_type": "Sword Level", 
          "value": "5"
        }, 
        {
          "trait_type": "Magic Level", 
          "value": "2"
        }
      ],
      "secure" : {
        "bar_code" : "1234 ABCD 5678 EFGH 90IJ",
        "qr_code" : "https://your-domain.com?key=1234",
        "attributes" : [
          {
            "trait_type": "Sword",
            "value": "Iron Short Sword"
          },
          {
            "trait_type": "Magic Type",
            "value": "Fire"
          },
          {
            "trait_type": "Sword Level",
            "value": "5"
          },
          {
            "trait_type": "Magic Level",
            "value": "2"
          }
        ]
      },
      "status_url" : "https://your-domain.com?key=1234"
    }
    {
      "hash": "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97"
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    정상적인 μΉ΄λ“œ λ°œν–‰μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    일뢀 μΉ΄λ“œλŠ” λ°œν–‰λ˜μ—ˆμ„ 수 μžˆμœΌλ‹ˆ β€˜λ³΄μœ  μΉ΄λ“œ λͺ©λ‘β€™ μ—μ„œ 보유 λͺ©λ‘μ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    //μΉ΄λ“œ λ°œν–‰ν•˜κΈ°
    curl -X POST "https://api.klipwallet.com/v2/wallet/mint/person" \
    -d @./mint_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //mint_info.json 파일 λ‚΄μš© μ˜ˆμ‹œ
    {
      "pin": "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
      "to_person": [["홍길동", "010-1111-2222"], ["κΉ€μΆ˜ν–₯", "010-3333-4444"]]
      "contract_address": "0xbad6444e1f84af055c22281d4ac7d75bde2ddec8",
      "name": "Magic Sword",
      "description" : "Summons a magic sword that has magical properties and effects in the game.",
      "image": "https://path_to_image/image.png",
      "animation_url": "https://path_to_video/video.mp4",
      "background_color" : "#ae312e",
      "sendable": true,
      "send_friend_only": true,
      "group_name": "Ground X Magic Game",
      "group_icon": "https://path_to_image/image.png",
      "hashtags": ["Game","groundX","Magic"],
      "layout": "vertical",
      "external_link": "https://path_to_ext_link",
      "qr_code": "https://path_to_image/image.png",
      "bar_code": "https://path_to_image/bar_image.png",
      "attributes" : [
        {
          "trait_type": "Sword", 
          "value": "Iron Short Sword"
        }, 
        {
          "trait_type": "Magic Type", 
          "value": "Fire"
        }, 
        {
          "trait_type": "Sword Level", 
          "value": "5"
        }, 
        {
          "trait_type": "Magic Level", 
          "value": "2"
        }
      ],
      "secure" : {
        "bar_code" : "1234 ABCD 5678 EFGH 90IJ",
        "qr_code" : "https://your-domain.com?key=1234",
        "attributes" : [
          {
            "trait_type": "Sword",
            "value": "Iron Short Sword"
          },
          {
            "trait_type": "Magic Type",
            "value": "Fire"
          },
          {
            "trait_type": "Sword Level",
            "value": "5"
          },
          {
            "trait_type": "Magic Level",
            "value": "2"
          }
        ]
      },
      "status_url" : "https://your-domain.com?key=1234"
    }
    {
      "hash": "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97",
      "result": [["홍길동", "010-1111-2222", "success", ""], ["κΉ€μΆ˜ν–₯", "010-3333-4444", "fail", "phone number does not exist"], ...]
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    정상적인 μΉ΄λ“œ λ°œν–‰μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    일뢀 μΉ΄λ“œλŠ” λ°œν–‰λ˜μ—ˆμ„ 수 μžˆμœΌλ‹ˆ β€˜λ³΄μœ  μΉ΄λ“œ λͺ©λ‘β€™ μ—μ„œ 보유 λͺ©λ‘μ„ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    //Klip Partners에 μΉ΄λ“œ λ™μ˜μƒ μ—…λ‘œλ“œ
    curl -X POST "https://api.klipwallet.com/v2/wallet/nftResource" \
    -F upload=@./video.mp4 \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: multipart/form-data"
    {"url": "https://path_to_video/video.mp4"}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    νŒŒμΌμ„ μ—…λ‘œλ“œν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //Klip Partnersμ—μ„œ secure λ―Έλ””μ–΄λ₯Ό 직접 μ—…λ‘œλ“œ
    curl -X POST "https://api.klipwallet.com/v2/wallet/nftResource/secure" \
    -F upload=@./file.mp4 \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: multipart/form-data"
    {"filename": "{uuid}.{extension}"}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "upload animation file limit exceeded": λ™μ˜μƒ 파일의 경우 μ œν•œλœ 크기 10MiBλ₯Ό λ„˜μ—ˆμŠ΅λ‹ˆλ‹€. 파일 크기λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "upload animation file extension is not support": μ§€μ›ν•˜μ§€ μ•ŠλŠ” λ™μ˜μƒ ν¬λ§·μž…λ‹ˆλ‹€.
    νŒŒμΌμ„ μ—…λ‘œλ“œν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //Get Card Information By BApp
    curl "https://api.klipwallet.com/v2/wallet/bapp" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //BApp λͺ©λ‘κ³Ό BApp별 μΉ΄λ“œ 정보 μ˜ˆμ‹œ
    {
        "bapps": [
            {
                "id": 2,
                "name": "bapp2",
                "bapp_img": "/img/bapp-icon2.svg",
                "category_id": 2,
                "nft_order_no": 1,
                "summary": "summary",
                "card_count": 10,
                "nft_id": 52,
                "cards": [
                        {
                            "created_at": 1580300503,
                            "updated_at": 1580300503,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 18,
                            "card_uri": "https://...",
                            "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
                        {
                            "created_at": 1580300504,
                            "updated_at": 1580300504,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 19,
                            "card_uri": "https://...",
                            "transaction_hash": "0x8814f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
                        {
                            "created_at": 1580300505,
                            "updated_at": 1580300505,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 20,
                            "card_uri": "https://...",
                            "transaction_hash": "0x9254f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
                    ],
                "cards_next_cursor": ""
            },
            {
                "id": 3,
                "name": "bapp3",
                "bapp_img": "/img/bapp-icon3.svg",
                "category_id": 2,
                "nft_order_no": 2,
                "summary": "summary",
                "card_count": 10,
                "nft_id": 55,
                "cards": [
                        {
                            "created_at": 1580300511,
                            "updated_at": 1580300511,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 5,
                            "card_uri": "https://...",
                            "transaction_hash": "0x1a54f10f73468ea85c84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
    
                    ],
                "cards_next_cursor": ""
            },
        ],
        "next_cursor": ""
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    BAppλ³„λ‘œ λ³΄μœ ν•œ μΉ΄λ“œ λͺ©λ‘μ„ μ‘°νšŒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //Get Card Information - '52' is the `nft_id` of our interest.
    curl "https://api.klipwallet.com/v2/wallet/nft/52" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //μΉ΄λ“œ 정보λ₯Ό 받은 μ˜ˆμ‹œ.
    {
        "name": "conan",
        "symbol_img": "",
        "cards": [
                {
                    "created_at": 1580300501,
                    "updated_at": 1580300501,
                    "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                    "sender": "0x0000000000000000000000000000000000000000",
                    "card_id": 1,
                    "card_uri": "https://...",
                    "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                },
                ...
                {
                    "created_at": 1580300502,
                    "updated_at": 1580300502,
                    "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                    "sender": "0x0000000000000000000000000000000000000000",
                    "card_id": 100,
                    "card_uri": "https://...",
                    "transaction_hash": "0x9254f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                },
    
            ],
        "next_cursor": "mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL",
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //Get Card Information, cards.next_cursor 값을 cursor둜 μ‚¬μš©
    curl "https://api.klipwallet.com/v2/wallet/nft/52?cursor=mrzedXOE9OeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //cursorλ₯Ό μ‚¬μš©ν•΄ λ‚˜λ¨Έμ§€ 50개 μΉ΄λ“œ 정보λ₯Ό 받은 μ˜ˆμ‹œ.
    {
        "name": "conan",
        "symbol_img": "",
        "cards": [
              {
                  "created_at": 1580300503,
                  "updated_at": 1580300503,
                  "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                  "sender": "0x0000000000000000000000000000000000000000",
                  "card_id": 101,
                  "card_uri": "https://...",
                  "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
              },
              ...
              {
                  "created_at": 1580300515,
                  "updated_at": 1580300515,
                  "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                  "sender": "0x0000000000000000000000000000000000000000",
                  "card_id": 150,
                  "card_uri": "https://...",
                  "transaction_hash": "0x9254f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
              },
    
          ],
        "next_cursor": "",
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //Get Card Information By BApp
    curl "https://api.klipwallet.com/v2/wallet/bapp" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //BApp1은 μΉ΄λ“œ 150개, BApp2λŠ” μΉ΄λ“œ 200개 보유 μ‹œ Get Card Information By BApp κ²°κ³Ό μ˜ˆμ‹œ
    {
        "bapps": [
            {
                "id": 1,
                "name": "bapp1",
                "bapp_img": "/img/bapp-icon1.svg",
                "category_id": 2,
                "nft_order_no": 1,
                "summary": "summary",
                "card_count": 150,
                "nft_id": 60,
                "cards": [
                        {
                            "created_at": 1580300503,
                            "updated_at": 1580300503,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 1,
                            "card_uri": "https://...",
                            "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
    
                        ...
    
                        {
                            "created_at": 1580300505,
                            "updated_at": 1580300505,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 100,
                            "card_uri": "https://...",
                            "transaction_hash": "0x9254f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
                    ],
                "cards_next_cursor": "gKvkL1lPYv1P93dpEWgaBzrq7XZ4LwjpgNe39AH9Dt3C1iWkubJtGotkrsQs4qSwdIJMHr3HKrhlCqJupwToWCd0T55IKhLzARM60N5xAGJQbKomeDkVl2O8WxMB0GQ9"
            },
            {
                "id": 2,
                "name": "bapp2",
                "bapp_img": "/img/bapp-icon2.svg",
                "category_id": 2,
                "nft_order_no": 2,
                "summary": "summary",
                "card_count": 200,
                "nft_id": 61,
                "cards": [
                        {
                            "created_at": 1580300511,
                            "updated_at": 1580300511,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 1,
                            "card_uri": "https://...",
                            "transaction_hash": "0x1a54f10f73468ea85c84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
    
                        ...
    
                        {
                            "created_at": 1580300515,
                            "updated_at": 1580300515,
                            "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                            "sender": "0x0000000000000000000000000000000000000000",
                            "card_id": 100,
                            "card_uri": "https://...",
                            "transaction_hash": "0x3t54f10f73468ea85c84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                        },
    
                    ],
                "cards_next_cursor": "Xrzed2Ot9LeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL"
            },
        ],
        "next_cursor": ""
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    BAppλ³„λ‘œ λ³΄μœ ν•œ μΉ΄λ“œ λͺ©λ‘μ„ μ‘°νšŒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //BApp 1 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보 μˆ˜μ‹  μ˜ˆμ‹œ
    //Get Card Information, bapps[0].cards_next_cursor값을 cursor둜 μ‚¬μš©
    curl "https://api.klipwallet.com/v2/wallet/nft/60?cursor=gKvkL1lPYv1P93dpEWgaBzrq7XZ4LwjpgNe39AH9Dt3C1iWkubJtGotkrsQs4qSwdIJMHr3HKrhlCqJupwToWCd0T55IKhLzARM60N5xAGJQbKomeDkVl2O8WxMB0GQ9" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //cursorλ₯Ό μ‚¬μš©ν•΄ λ‚˜λ¨Έμ§€ 50개 μΉ΄λ“œ 정보λ₯Ό 받은 μ˜ˆμ‹œ.
    {
        "name": "ray1",
        "symbol_img": "",
        "cards": [
                {
                    "created_at": 1580300503,
                    "updated_at": 1580300503,
                    "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                    "sender": "0x0000000000000000000000000000000000000000",
                    "card_id": 101,
                    "card_uri": "https://...",
                    "transaction_hash": "0x9e54f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                },
                ...
                {
                    "created_at": 1580300515,
                    "updated_at": 1580300515,
                    "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                    "sender": "0x0000000000000000000000000000000000000000",
                    "card_id": 150,
                    "card_uri": "https://...",
                    "transaction_hash": "0x92d4f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                },
    
            ],
        "next_cursor": "",
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //BApp 2 λ‚˜λ¨Έμ§€ μΉ΄λ“œ 정보 μˆ˜μ‹  μ˜ˆμ‹œ
    //Get Card Information, bapps[1].cards_next_cursor값을 cursor둜 μ‚¬μš©
    curl "https://api.klipwallet.com/v2/wallet/nft/61?cursor=Xrzed2Ot9LeEorkAvwQXB7JdVg4LP1Rzze2kLQFxLU4C8iMOhOVulzIr5iesZoie9uv9h87UNXsWCKdhqYszXFWLsYYI7h125Rx8p56qlMKaZ20YbNW3zDGmNBJKM1wL" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //cursorλ₯Ό μ‚¬μš©ν•΄ λ‚˜λ¨Έμ§€ 100개 μΉ΄λ“œ 정보λ₯Ό 받은 μ˜ˆμ‹œ.
    {
        "name": "ray2",
        "symbol_img": "",
        "cards": [
                {
                    "created_at": 1580300505,
                    "updated_at": 1580300505,
                    "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                    "sender": "0x0000000000000000000000000000000000000000",
                    "card_id": 101,
                    "card_uri": "https://...",
                    "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                },
                ...
                {
                    "created_at": 1580300520,
                    "updated_at": 1580300520,
                    "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                    "sender": "0x0000000000000000000000000000000000000000",
                    "card_id": 200,
                    "card_uri": "https://...",
                    "transaction_hash": "0x9254f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
                },
    
            ],
        "next_cursor": "",
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //Get All Card Information - '52' is the `nft_id` of our interest.
    curl "https://api.klipwallet.com/v2/wallet/nft/52?isAll=true" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //μΉ΄λ“œ 정보λ₯Ό 받은 μ˜ˆμ‹œ.
    {
        "name": "conan",
        "symbol_img": "",
        "cards": [
            {
                "created_at": 1580300501,
                "updated_at": 1580300501,
                "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                "sender": "0x0000000000000000000000000000000000000000",
                "card_id": 1,
                "card_uri": "https://...",
                "transaction_hash": "0x8754f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
            },
            ...
            {
                "created_at": 1580300502,
                "updated_at": 1580300502,
                "owner": "0xa3b7aa3a3c8a08bd22f77932368e2043e7ffe263",
                "sender": "0x0000000000000000000000000000000000000000",
                "card_id": 100,
                "card_uri": "https://...",
                "transaction_hash": "0x9254f10f73468ea85e84d9e29c2a864fc574c1e57675bfc70b5459d82477a91f"
            },
    
        ],
        "next_cursor": "",
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 정보λ₯Ό μ‘°νšŒν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    //
    curl "https://klipmedia/../uploaded/{uuid-1}.mp4?Base64PolicyQuery.." \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //μ—…λ‘œλ“œλœ 파일이 μžˆλŠ” 경우
    {
      "uploaded_files" : ["{uuid-1}.mp4", "{uuid-2}.mp4"]
      "uploaded_secure_url" : "https://klipmedia/../uploaded"
      "uploaded_secure_query" : "Base64PolicyQuery"
    }
    
    // μ—…λ‘œλ“œλœ 파일이 μ—†λŠ” 경우
    {
      "uploaded_files" : []
      "uploaded_secure_url" : ""
      "uploaded_secure_query" : ""
    }
    curl -X POST "https://api.klipwallet.com/v2/wallet/nft/50/1/send" \
    -d @./send_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //κ²Œμž„ μ•„μ΄ν…œ μΉ΄λ“œμΈ λ§ˆλ²• κ²€ μΉ΄λ“œλ₯Ό 보내기 μœ„ν•œ send_info.json 파일 λ‚΄μš© μ˜ˆμ‹œ
    {
        "pin": "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
        "to_address": "0xb1764B96da889Cc2F043025aa368517C80e86795",
        "card_name": "Magic Sword"
    }
    { to_address: "0xb1764B96da889Cc2F043025aa368517C80e86795",
      fail_count: 0,
      tx_hash: "0x7cf09602cebb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97" }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/wallet/nft/50/1/send/person" \
    -d @./send_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //κ²Œμž„ μ•„μ΄ν…œ μΉ΄λ“œμΈ λ§ˆλ²• κ²€ μΉ΄λ“œλ₯Ό 보내기 μœ„ν•œ send_info.json 파일 λ‚΄μš© μ˜ˆμ‹œ
    {
        "pin": "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
        "to_person": ["홍길동", "010-1111-2222"]
        "card_name": "Magic Sword"
    }
    {fail_count: 0, tx_hash: "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97"}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/escrow/approve" \
    -d @./approve_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "pin": "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
        "contract_address": "0x6E3571F451fc960Ea69b532006A2c8683fF8922F"
    }
    {
        "tx_hash":"0x831e207b0b951127646b8f7d7eded55903cecb29fe794e17a2d93f457b7158a4",
        "fail_count":0,
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X GET "https://api.klipwallet.com/v2/escrow/approve?contract_address=0x6E3571F451fc960Ea69b532006A2c8683fF8922F" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "approve":true
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X POST "https://api.klipwallet.com/v2/escrow" \
    -d @./escrow_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "pin": "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
        "contract_address": "0x6E3571F451fc960Ea69b532006A2c8683fF8922F"
        "card_ids": [15277, 15279],
    }
    {
        "tx_hash":"0x5082643fc9799badeea30d243e3c5aba46dfd0eedf623f6698c8f30c36618c6c",
        "fail_count":0,
        "claim_links": ["https://klipwallet.com/?target=/claimCard/64/15277?claimKey=234b78b5d03a395f440b3b9acf784959a4f5f0a7f6c558ef6a2d22f8fee25a79", "https://klipwallet.com/?target=/claimCard/64/15279?claimKey=8fdaae3e92208aeb19753edff72abddacfd4d4f36fe871c77eb79f061537e415"]
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X GET "https://api.klipwallet.com/v2/escrow?contract_address=0x6E3571F451fc960Ea69b532006A2c8683fF8922F&cursor=" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "name":"νŒŒνŠΈλ„ˆμŠ€ λ°œν–‰ μΉ΄λ“œ",
        "symbol_img":"https://...",
        "cards":[{"created_at":1605921829,"updated_at":1606057801,"owner":"0x7998d102b2938532bc068300517d4db783f326c2","sender":"0xc95e3a887cb2108d4a19e2a9bcbe0827367372fe","card_id":15279,"card_uri":"https://klip-media.klaytn.com/card_asset/20295/7de0f5cc-6624-487f-adb9-4bfa86d38992.json","transaction_hash":"0x5082643fc9799badeea30d243e3c5aba46dfd0eedf623f6698c8f30c36618c6c"},{"created_at":1605921668,"updated_at":1606057801,"owner":"0x7998d102b2938532bc068300517d4db783f326c2","sender":"0xc95e3a887cb2108d4a19e2a9bcbe0827367372fe","card_id":15277,"card_uri":"https://klip-media.klaytn.com/card_asset/20295/e18133b8-aedc-4daf-aa2a-87654beabadf.json","transaction_hash":"0x5082643fc9799badeea30d243e3c5aba46dfd0eedf623f6698c8f30c36618c6c"}],
        "next_cursor":""
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X DELETE "https://api.klipwallet.com/v2/escrow" \
    -d @./cancel_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
        "pin": "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
        "contract_address": "0x6E3571F451fc960Ea69b532006A2c8683fF8922F"
        "card_ids": [15277, 15279],
    }
    {
        "tx_hash":"0x831e207b0b951127646b8f7d7eded55903cecb29fe794e17a2d93f457b7158a4",
        "fail_count":0,
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ 전솑에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X GET "https://api.klipwallet.com/v2/wallet/receipt?tx_hash=0x880a45d3c482c7d794c2e7b7dbdc9e933a68f4a1f3d978d582ba9f9ebd1f9e72" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "success": true
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "no transaction receipt": νŠΈλžœμž­μ…˜ ν•΄μ‹œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 아직 νŠΈλžœμž­μ…˜μ΄ μ²˜λ¦¬λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ 잘λͺ»λœ νŠΈλžœμž­μ…˜ ν•΄μ‹œ κ°’μž…λ‹ˆλ‹€.
    curl -X PUT "https://api.klipwallet.com/v2/partner/?opt=password" \
    -d '{"old_password":"HASHED_OLD_PASSWORD", "new_password":"HASHED_NEW_PASSWORD"}' \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "invalid password": λΉ„λ°€λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    λΉ„λ°€λ²ˆν˜Έ 변경에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X PUT "https://api.klipwallet.com/v2/partner/pin" \
    -d '{"old_pin":"HASHED_OLD_PIN_NUMBER", "new_pin":"HASHED_NEW_PIN_NUMBER"}' \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {}
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    "exceed pin code error count": ν•€ 번호 μž…λ ₯ 였λ₯˜ νšŸμˆ˜κ°€ μ§€μ •λœ ν•œλ„λ₯Ό μ΄ˆκ³Όν•˜μ˜€μŠ΅λ‹ˆλ‹€.
    "invalid pin code": κΈ°μ‘΄ ν•€ λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    ν•€ 번호λ₯Ό λ³€κ²½ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.
    curl -X GET "https://api.klipwallet.com/v2/wallet/mint/count" \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    {
      "mint_count": 10
    }
    curl -X DELETE "https://api.klipwallet.com/v2/wallet/nft" \
    -d @./delete_info.json \
    -H "Authorization: ACCESS_TOKEN" -H "Content-Type: application/json"
    //delete_info.json 파일 λ‚΄μš© μ˜ˆμ‹œ
    {
        pin: "91B4D142823F7D20C5F08DF69122DE43F35F057A988D9619F6D3138485C9A203",
        card_id: 12,
        contract_address: "0xbad6444e1f84af055c22281d4ac7d75bde2ddec8"
    }
    {
        "hash": "0x2d26f602cfbb4c662931592bf2c4ee18d29f09683be5b9e8d589ff935fca0b97"
    }
    "bad request": 잘λͺ»λœ μš”μ²­μž…λ‹ˆλ‹€. Request νŒŒλΌλ―Έν„°λ₯Ό λ‹€μ‹œ ν™•μΈν•˜μ‹­μ‹œμ˜€.
    μΉ΄λ“œ μ‚­μ œμ— μ‹€νŒ¨ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ‚­μ œμ™€ κ΄€λ ¨ν•΄ μ •ν™•ν•œ 정보λ₯Ό ν™•μΈν•˜λ €λ©΄ 보유 μΉ΄λ“œλ₯Ό μ‘°νšŒν•˜μ‹­μ‹œμ˜€.