API 문서

개요

Prediqt API는 예측 마켓에 대한 프로그래밍 방식의 접근을 제공합니다 — 주문 제출, 가격 조회, 포지션 관리, 실시간 데이터 스트리밍이 가능합니다. 모든 마켓 정산은 Polygon 온체인에서 이루어지며, API는 오프체인 주문 매칭과 데이터 조회를 처리합니다.

기본 URL: https://api.prediqt.com

대화형 Swagger UI는 https://api.prediqt.com/api-docs에서 이용할 수 있습니다. 모든 엔드포인트, 요청 본문, 응답 스키마가 문서화되어 있습니다.

인증

API는 세 가지 인증 방법을 지원합니다:

API 키

앱의 설정 페이지에서 API 키를 생성하세요. x-api-key 헤더로 전달합니다:

curl -H "x-api-key: pm_live_your_key_here" \
  https://api.prediqt.com/markets

Bearer 토큰 (Privy JWT)

웹 앱을 통해 인증하면 Privy JWT를 받게 됩니다. Authorization 헤더로 전달합니다:

curl -H "Authorization: Bearer <token>" \
  https://api.prediqt.com/orders

EIP-191 서명

Privy 없이 지갑 기반 인증을 하려면, 타임스탬프가 포함된 메시지를 지갑으로 서명(EIP-191 개인 서명)하고 세 개의 헤더를 전송합니다:

  • x-address지갑 주소
  • x-signature타임스탬프가 포함된 메시지의 EIP-191 개인 서명
  • x-timestampUnix 타임스탬프 (리플레이 공격 방지를 위해 5분 이내여야 합니다)
curl -H "x-address: 0xYourWalletAddress" \
  -H "x-signature: 0xSignatureHex" \
  -H "x-timestamp: 1700000000" \
  https://api.prediqt.com/orders

공개 엔드포인트(마켓 목록, 가격, 거래)는 인증이 필요하지 않습니다. 인증이 필요한 엔드포인트(주문 조회, API 키 관리)는 위의 인증 방법 중 하나가 필요합니다.

REST 엔드포인트

마켓

  • GET /markets필터링 및 페이지네이션을 포함한 전체 마켓 목록 조회
  • GET /markets/:id마켓 상세 정보 조회
  • GET /markets/:id/candles가격 차트용 OHLCV 캔들 데이터
  • GET /markets/:id/orderbook마켓의 호가창 깊이
  • GET /markets/:id/trades마켓의 최근 거래
  • GET /markets/:id/activity마켓의 활동 피드
  • GET /markets/:id/holders마켓의 상위 보유자

주문

  • POST /orders서명된 새 주문 제출
  • GET /orders인증된 사용자의 활성 주문 목록 조회
  • GET /orders/:hash해시로 주문 상세 정보 조회
  • DELETE /orders/:hash해시로 주문 취소
  • POST /orders/batch단일 요청으로 여러 주문 제출
  • DELETE /orders/batch해시로 여러 주문 취소
  • DELETE /orders/cancel-all인증된 사용자의 모든 미체결 주문 취소
  • DELETE /orders/market/:marketId특정 마켓의 모든 미체결 주문 취소
  • GET /orders/nonce/:address주소의 현재 서명 논스 조회
  • POST /orders/nonce논스를 증가시켜 이전 주문 일괄 취소

POST /orders는 주문 본문에 포함된 EIP-712 서명으로 자체 인증됩니다 — 이 엔드포인트에는 API 키나 Bearer 토큰이 필요하지 않습니다. 다른 인증 엔드포인트(주문 조회, 취소, API 키 관리)는 위의 인증 방법 중 하나가 필요합니다.

가격

  • GET /price단일 토큰 가격 조회
  • GET /prices토큰 가격 일괄 조회
  • GET /books호가창 데이터 일괄 조회
  • GET /spread토큰의 매수-매도 스프레드 조회
  • GET /midpoint토큰의 중간 가격 조회
  • GET /tick-size틱 사이즈(최소 가격 단위) 조회

거래

  • GET /trades필터 및 페이지네이션을 포함한 전체 거래 목록 조회

인증

  • POST /auth/api-key새 API 키 생성
  • GET /auth/api-key인증된 사용자의 API 키 목록 조회
  • DELETE /auth/api-key/:idAPI 키 폐기

이것은 핵심 거래 엔드포인트를 다룹니다. 사용자 프로필, 잔액, 이벤트, 리더보드, 댓글, 알림을 포함한 전체 API 레퍼런스는 대화형 Swagger 문서를 참조하세요.

WebSocket

실시간 데이터는 Socket.IO(원시 WebSocket이 아님)를 통해 전달됩니다. REST API와 동일한 기본 URL로 연결하세요:

import { io } from "socket.io-client";

const socket = io("https://api.prediqt.com");

// Subscribe to channels
socket.emit("subscribe", ["orderbook:market-id", "trades:market-id"]);

// Listen for updates
socket.on("orderbook", (data) => console.log(data));
socket.on("trade", (data) => console.log(data));

채널

  • orderbook:{marketId} 호가창 업데이트 (구독 시 스냅샷, 이후 델타)
  • trades:{marketId} 마켓의 거래 체결
  • market:{marketId} 마켓 가격 및 상태 업데이트
  • price:{tokenId}개별 토큰 가격 업데이트
  • user:{address}사용자 전용 업데이트를 위한 비공개 채널 (인증 필요)

인증 (WebSocket)

비공개 user: 채널을 구독하려면, 연결 후 인증하세요:

// EIP-191 signature auth
socket.emit("authenticate", {
  address: "0x...",
  signature: "0x...",
  timestamp: Date.now(),
});

// Or Privy token auth
socket.emit("authenticate", { token: "privy-jwt-token" });

socket.on("authenticated", (data) => {
  // Now you can subscribe to user channels
  socket.emit("subscribe", ["user:0x..."]);
});

요청 제한

주문 제출 엔드포인트(POST /orders 및 POST /orders/batch)는 남용 방지를 위해 엄격한 요청 제한이 있습니다. 요청 제한에 도달하면 429 Too Many Requests 응답을 받게 됩니다.

고빈도 작업의 경우, 배치 엔드포인트(POST /orders/batch, DELETE /orders/batch)를 사용하여 단일 요청으로 여러 주문을 제출하거나 취소하세요.

시작하기

  1. 계정 생성 — Prediqt 앱에 가입하고 로그인하세요.
  2. API 키 생성 — 설정에서 API 키를 생성하세요. 즉시 복사하세요; 다시 표시되지 않습니다.
  3. 마켓 조회 — 이용 가능한 마켓 목록을 조회합니다:
curl -H "x-api-key: pm_live_your_key_here" \
  https://api.prediqt.com/markets
  1. 가격 확인 — 토큰의 현재 가격을 조회합니다:
curl "https://api.prediqt.com/price?tokenId=TOKEN_ID"
  1. 주문 제출 — 서명된 주문을 제출합니다 (주문은 EIP-712를 사용하여 지갑으로 서명해야 합니다):
curl -X POST https://api.prediqt.com/orders \
  -H "Content-Type: application/json" \
  -d '{
    "order": { ... },
    "signature": "0x..."
  }'

참고: POST /orders는 API 키나 Bearer 토큰이 필요하지 않습니다 — 요청 본문의 EIP-712 서명이 주문을 인증합니다.

전체 요청 및 응답 스키마는 대화형 Swagger 문서를 참조하세요.