개요
- 기본 경로:
/api/v1 - 인증:
x-api-key헤더의 API 키 - 멱등성: 쓰기 작업은
Idempotency-Key헤더(UUID) 필요 - 응답 형식: 모든 응답에는 추적을 위한
x-request-id헤더 포함
엔드포인트
GET /api/v1/wallets– 사용자 지갑 목록GET /api/v1/wallets/balances– 호출자 지갑 잔액(체인별; 기본 지갑 사용)GET /api/v1/wallets/:address/balances– 소유 지갑 주소 잔액GET /api/v1/tx/:id– 트랜잭션 상세 조회POST /api/v1/send– 네이티브/토큰 전송 (EVM + Solana)POST /api/v1/token/approve– ERC20 토큰 승인 (EVM 전용)POST /api/v1/contracts/send– 일반 컨트랙트 호출 (EVM 전용)POST /api/v1/trade/quote– 스왑 견적 (EVM + Solana)POST /api/v1/trade/swap– 스왑 실행 (EVM + Solana)
체인
지원 체인 전체 목록은 지원 체인에서 확인하세요. 요청의chain 필드에는 슬러그(예: base, solana-devnet)를 사용합니다.
요청 제한
- 쓰기(
POST /api/v1/trade/quote포함): 사용자당 분당 15 요청 - 읽기: 사용자당 분당 60 요청
- 응답: 초과 시 HTTP 429 반환
- 헤더:
Retry-After(다음 윈도우까지의 초)
멱등성(쓰기)
- 모든 변경 엔드포인트는
Idempotency-Key가 필요합니다. - 동일한 본문으로 키를 재사용하면 원래 200 응답을 반환합니다.
- 다른 본문으로 재사용하면 HTTP 409와
code: IDEMPOTENT_BODY_MISMATCH를 반환합니다. - 저장된 성공 응답 없이 재사용하면 HTTP 409와
code: IDEMPOTENT_REPLAY를 반환합니다. - 키는 인증된 사용자 범위이며, 엔드포인트 경로가 추적으로 기록됩니다.
- 적용 대상:
POST /api/v1/send,POST /api/v1/token/approve,POST /api/v1/contracts/send,POST /api/v1/trade/swap.
오류 처리
오류 응답 형식
오류 코드
UNAUTHORIZED– 인증 누락/무효 또는 API 키 오류 (HTTP 401)FORBIDDEN– 인증되었으나 작업 권한 없음 (HTTP 403)NOT_FOUND– 리소스를 찾을 수 없음 (HTTP 404)RATE_LIMITED– 요청 제한 초과 (HTTP 429)INVALID_INPUT– 잘못된 요청 파라미터 (HTTP 400)WALLET_NOT_FOUND– 지정된 지갑을 찾을 수 없음USER_NOT_LINKED– 사용자가 Privy에 연결되지 않음WALLET_NOT_DELEGATED– 지갑이 서버 서명자에게 위임되지 않음WALLET_ID_REQUIRED– Privy 지갑 ID 누락CHAIN_UNKNOWN– 알 수 없거나 지원되지 않는 체인INSUFFICIENT_FUNDS– 송신자의 자금 부족(가치/수수료)IDEMPOTENT_BODY_MISMATCH– 동일한 멱등 키로 다른 요청 본문 (HTTP 409)IDEMPOTENT_REPLAY– 멱등 키가 이미 사용됨 (HTTP 409)PRIVY_RPC_ERROR– Privy RPC 서비스 오류SEND_FAILED– 트랜잭션 제출 실패SERVICE_UNAVAILABLE– 필요한 서비스가 구성되지 않음QUOTE_FAILED– 견적 서비스 오류 (HTTP 400)INTERNAL_ERROR– 서버 오류
QUOTE_FAILED 세부사항:
- Solana/Jupiter: 일부 Solana mint는 Jupiter에서 거래할 수 없습니다(선별된 허용 목록). 이 경우 API는 HTTP 400과
code: QUOTE_FAILED, “Token not tradable on Jupiter”와 같은 오류 메시지를 반환합니다. - EVM/1inch: 토큰이 1inch에서 지원되지 않는 경우 API는 HTTP 400과
code: QUOTE_FAILED, “Token not tradable on 1inch”와 같은 메시지를 반환합니다. - 요청된 출력 토큰/mint가 업스트림 제공자에 의해 거래 불가로 표시된 경우 이는 예상된 동작이며, 다른 곳에 풀이 존재하더라도 발생합니다.
검증
주소 형식
- EVM:
/^0x[a-fA-F0-9]{40}$/정규식과 일치해야 합니다 - Solana: 유효한 base58 공개키여야 합니다
공통 매개변수
- 금액(EVM): 정수 문자열만 허용(10진수 또는 0x-hex). 음수가 될 수 없습니다. ERC20 및
value의 경우 uint256에 맞아야 합니다. - 금액(Solana): 기본 단위의 정수 문자열. SPL 금액은 부호 없는 64비트 범위 이내여야 합니다.
- 송신자(
from): 선택 사항. 생략 시 지정한 체인에 대해 사용자의 기본 지갑이 사용됩니다. - 멱등성: 모든 쓰기 엔드포인트는
Idempotency-Key헤더가 필요합니다. 동일한 본문으로 반복하면 원래 응답을 반환합니다.
네이티브 토큰 키워드
거래 엔드포인트(/api/v1/trade/quote, /api/v1/trade/swap)는 fromToken/toToken에 대소문자를 구분하지 않는 NATIVE 키워드를 허용합니다:
- EVM:
NATIVE는0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE로 해석됩니다 - Solana:
NATIVE는 래핑된 SOL mintSo11111111111111111111111111111111111111112로 해석됩니다 - 응답은 해석된 주소를 반환합니다(
NATIVE아님) - 전송 엔드포인트는 네이티브 전송에 토큰 주소 대신
asset: "native"를 사용합니다
규약
- 체인 선택:
chain슬러그를 사용합니다(예:base,base-sepolia,solana-devnet). - Solana
Transaction.chainId센티널 매핑:0= mainnet,-2= testnet,-3= devnet. - 멱등성: 사용자/키별로 고유합니다. 재전송은 원래 응답을 반환하며, 본문이 다르면 409를 반환합니다.