변경 이력
Data API와 그 계약의 모든 변경 사항을 최신순으로 정리했습니다. 버전 번호는 버전 관리 및 지원 종료 정책을 따릅니다.
이제 POST /webhooks와 POST /webhooks/{id}/test는 요금제의 버스트 한도에 더해 계정당 분당 5회의 요청 한도를 함께 사용합니다. 이를 넘는 요청은 Retry-After와 함께 429 rate_limited를 받습니다. 테스트 이벤트는 이제 재시도 없이 한 번만 전송되며, 그 밖의 전송은 계속 백오프를 두고 최대 3회 시도합니다. 이는 남용 방지 한도로, 모든 요금제의 월간 쿼터와 버스트 한도는 그대로입니다. 이러한 한도를 즉시 적용할 수 있도록 같은 날 버전 관리 및 지원 종료 정책이 변경되었으며, 그전까지는 요금제가 제공하던 요청 제한을 낮추는 일은 모두 6개월의 지원 종료 일정을 따랐습니다. 이 두 엔드포인트에서 X-RateLimit-* 헤더는 두 한도 중 남은 요청이 더 적은 쪽을 보여줍니다.
이제 POST /webhooks는 URL의 호스트 이름을 DNS에서 조회하지 않습니다. URL이 https가 아니거나, 자격 증명을 포함하거나, 호스트가 비공개 IP 주소이면 계속 422를 반환합니다. 조회되지 않는 호스트 이름이나 비공개 주소를 가리키는 호스트 이름은 지금까지 422를 받았지만, 이제는 201로 수락되며 계정당 5개 엔드포인트 한도에 포함됩니다. 이 경우 해당 엔드포인트로의 모든 전송은 재시도 없이 실패하고, 그 이유는 GET /webhooks/{id}/deliveries의 error에 표시되며, 10회 연속으로 전송에 실패하면 엔드포인트가 비활성화됩니다. 엔드포인트를 만든 뒤에는 POST /webhooks/{id}/test로 테스트 이벤트를 보내고 전송 로그에서 연결 가능한지 확인하세요.
GET /usage의 endpoints[].endpoint는 이제 요청된 경로 대신 라우트 템플릿을 나타냅니다(api/v1/coins/bitcoin 대신 api/v1/coins/{slug}). 따라서 slug나 id마다 행이 생기지 않고 엔드포인트마다 한 행이 됩니다. 현재 결제 기간 중 그 이전에 기록된 요청은 원래 경로를 유지하므로, 기간이 끝날 때까지 두 형식이 함께 나타날 수 있습니다.
GET /exchanges/{slug}와 GET /exchanges/{slug}/trust-score는 Data API 출시 이후 모든 거래소에서 500으로 실패해 왔습니다. 이제 둘 다 응답하며, 파라미터와 응답 필드는 바뀌지 않았고, 순위가 없는 거래소는 score와 breakdown을 null로 반환합니다.
공개된 OpenAPI 계약은 이제 null이 될 수 있는 모든 필드를 nullable로 표시하고 소수 값(예: GET /calculators/dca의 invested와 지표 값)을 숫자 타입으로 지정합니다. 공통 필드인 logo, last_updated와 페이징 필드 from/to는 모든 엔드포인트에서, 코인의 name과 price는 모든 코인 목록 엔드포인트와 가격 엔드포인트에서 nullable입니다. 또한 DCA series를 배열로 지정하고, GET /coins/{slug}/markets, GET /coins/losers, GET /global/history/{metric}, GET /sentiment/altseason의 응답을 문서화하며, GET /sentiment/altseason의 days를 1–365로 문서화하고(0은 항상 거부되어 왔습니다. 현재 값을 조회하려면 생략하세요), 오류 스키마에 endpoint_unavailable(503) 및 http_error 코드를 나열합니다. 요청이나 응답은 바뀌지 않았고 - 기술 방식만 달라졌습니다.
인증 실패는 이전에 IP당 분당 30회로 제한되었고, 이를 넘으면 해당 IP 뒤에 있는 모든 키가 429를 받았습니다. 이제 키 하나는 IP 하나에서 분당 30회까지, IP 하나는 300회까지 실패할 수 있으며, 대략 최근 15분 안에 인증에 성공한 키는 IP 한도로 차단되지 않고, 키 없는 요청은 횟수에 포함되지 않은 채 401을 반환합니다. 차단된 요청은 Retry-After와 함께 429 rate_limited를 받습니다.
경로에 끝 슬래시, 이중 슬래시 또는 맨 앞의 /index.php가 있는 GET 및 HEAD 요청은 이제 그대로 처리되지 않고 정리된 URL로 향하는 301을 받습니다. 예를 들어 /api/v1/coins/는 /api/v1/coins로 이동합니다. 다른 메서드는 영향을 받지 않습니다.
GET /calculators/compound-interest는 기간을 복리 기간의 정수배로 반올림했기 때문에, 복리 기간 중간에 끝나는 기간이 너무 길거나 짧게 시뮬레이션되었습니다. annually 복리로 6개월을 계산하면 꼬박 1년(입금 12회와 1년 치 이자)이 계산되었고, 5개월이면 복리 기간이 하나도 계산되지 않았습니다(입금도 이자도 없음). 이제 온전한 기간은 이전과 같이 계산하고, 마지막으로 일부만 지난 기간에는 비례해서 이자를 붙이며(해당 부분은 단리), 기간 안의 모든 입금을 반영합니다. 기간이 복리 기간의 정수배이면 결과는 그대로이며, 파라미터와 응답 필드도 바뀌지 않았습니다.
API와 문서는 rate 값을 복리 주기당 이율로 취급했지만, 웹사이트 계산기와 사용 가이드는 연 이율을 사용했습니다. GET /calculators/compound-interest는 각 복리 주기에 rate 값을 그대로 적용했기 때문에 월 복리 5%가 매월 5%씩 불어났습니다. 이제 rate 값은 연 명목 이율이며, 각 주기에는 rate 값을 연간 주기 수로 나눈 이율이 적용됩니다(연 5%를 월 복리로 계산하면 월 5/12%). 이 내용은 이제 meta.note에도 표시됩니다. 매개변수와 응답 필드는 바뀌지 않으며, annually를 제외한 모든 복리 주기에서 결과가 달라집니다. 또한 contribution_frequency 값과 compound_frequency 값이 모두 daily이거나 모두 weekly인 경우, 부동소수점 반올림 오차로 납입이 늦어지거나 누락되는 일이 더 이상 없으므로 duration_unit=months에서는 total_contributions 값이 납입 1회분만큼 커질 수 있습니다. 기존 파라미터의 의미가 바뀝니다. 이전 결과를 재현하려면 rate에 연간 복리 기간 수를 곱하세요.
모든 Fear & Greed 값에 이제 score 옆에 index가 포함됩니다. Bitculator에 표시되는 것과 똑같은 0–100 Fear & Greed 지수입니다(0–19 극단적 공포, 20–39 공포, 40–59 중립, 60–79 탐욕, 80–100 극단적 탐욕). 표시할 때는 이 값을 사용하세요. score는 변경되지 않았으며, index의 기반이 되는 −100…+100 원시 종합값입니다. 적용 대상: GET /sentiment/fear-greed(대표 값과 intervals의 모든 항목), GET /global의 fear_greed, GET /global/heatmap의 meta.fear_greed. 추가만 이루어졌으며 기존 필드는 변경되지 않았습니다.
GET /coins/{slug}는 최대 공급량이 없는 코인(예: 공급량 상한이 없는 Solana, Ethereum)에 대해 fully_diluted_valuation를 0으로 반환했습니다. 이제 총 공급량으로 대체하며, 둘 다 알 수 없으면 null을 반환합니다. OpenAPI 계약에 이미 문서화된 동작입니다.
아직 점수가 없는 Fear & Greed 값은 score: 0으로 보고되었습니다. 이제 GET /sentiment/fear-greed에서 null이며, GET /global의 fear_greed와 GET /global/heatmap의 meta.fear_greed도 마찬가지입니다.
유통 공급량이 없는 코인은 marketcap과 dominance가 null일 수 있고, 순위가 매겨지지 않은 거래소는 신뢰도 점수의 score와 breakdown이 null입니다. 선택한 지표에 대한 현재 값이 코인에 없으면 POST /alarms는 422를 반환합니다. 이제 /coins/recently-added와 /wallets/timeline이 sort를 적용합니다. /coins/gainers와 /coins/losers는 변동률 자체를 기준으로 정렬되며(이전에는 사실상 시가총액 기준이었습니다), 하락 목록에서는 0.00인 코인을 제외합니다. 오름차순 정렬에서는 null 값이 마지막에 놓입니다. /prices는 모호한 심볼을 순위가 가장 높은 활성 코인으로 해석합니다. OpenAPI 계약에는 null이 될 수 있는 마켓 필드가 표시되고 24시간 거래량이 숫자 타입으로 지정됩니다.
GET /insights, GET /insights/{id}, GET /coins/{slug}/insights의 모든 인사이트에 이제 generated_by: "ai"와 이를 작성한 model이 포함됩니다. 추가만 이루어졌으며 기존 필드는 변경되지 않았습니다.
Huobi 거래소의 이름이 HTX로 바뀌었고 슬러그도 huobi에서 htx로 변경되었습니다. API는 슬러그 리디렉션을 따르지 않으므로 이제 /exchanges/huobi는 404를 반환합니다. CoinEx는 비활성으로 설정되어 더 이상 반환되지 않습니다.
코인의 변동률이 15분 동안 다시 계산되지 않으면 change_24h와 change_7d는 이제 오래된 변동을 보여 주는 대신 null이 됩니다. 9월 18일부터는 change_rank_24h와 change_rank_7d에도 같은 규칙이 적용됩니다.
공개된 계약에는 이제 미디어 타입 수준의 예시, 모든 4xx/5xx 응답에서 참조하는 공통 오류 스키마 하나, 키를 사용하는 모든 호출이 반환할 수 있는 401·429·500 응답, 모든 성공 응답에 포함되는 X-RateLimit-* 및 X-Quota-* 헤더, alarm.triggered 전송을 POST /webhooks의 콜백으로 기술한 정의, 그리고 연락처·라이선스·약관 메타데이터가 담깁니다. 요청이나 응답은 바뀌지 않았고 - 기술 방식만 달라졌습니다.
신규: /apis.json, /.well-known/api-catalog(RFC 9727), /.well-known/security.txt(RFC 9116), 공통 응답 형태를 담은 JSON Schema 번들, JSON 버전을 함께 제공하는 공개 상태 페이지, 이 변경 이력, 그리고 버전 관리 및 지원 종료 정책.
MCP 도구 호출은 더 이상 Data API 요금제의 월간 쿼터와 버스트 한도에서 차감되지 않습니다. 이날부터 MCP 서버는 자체 키와 요금제를 갖습니다. 이제 GET /usage의 tokens[].kind는 mcp일 수 있으며, 쿼터 초과 시 429 메시지는 "Your Data API plan has reached its monthly request limit."입니다(이전에는 임베드 요금제라고 표시했습니다).
이제 개발자 콘솔에서 Data API 키를 만들거나 교체하려면 인증된 이메일 주소가 필요합니다. 지갑으로 로그인한 계정처럼 이메일이 없는 계정은 예외입니다. 키 생성은 분당 10회로 제한됩니다. 기존 키는 계속 작동합니다.
GET /tickers, GET /pairs, GET /pairs/{id}, GET /coins/{slug}/markets, GET /exchanges/{slug}/tickers의 volume_usd는 정수로 저장되어 센트 단위가 사라졌고, $0.50 미만의 마켓은 0으로 표시되었습니다. 이제 거래량은 소수점 둘째 자리까지 유지되며, 이를 바탕으로 계산한 합계도 더 이상 반올림 오차를 물려받지 않습니다.
GET /coins/{slug}/sparkline과 GET /exchanges/{slug}/sparkline의 change는 30d부터 365d까지는 비율(0.05는 +5%를 의미)이었지만 24h와 7d에서는 퍼센트였습니다. 이제 모든 기간에서 퍼센트이므로(1.25는 +1.25%를 의미), 긴 기간의 값은 이전보다 100배 커지고, 0.5% 미만의 변동도 더 이상 0으로 반올림되지 않습니다.
두 스파크라인 엔드포인트 모두에서 low와 high는 다른 구간으로 만든 요약에서 가져왔기 때문에 points와 모순될 수 있었습니다. 예를 들어 low가 시계열 안의 가격보다 높은 경우입니다. 이제 이 값들은 points를 샘플링하는 기간의 실제 최저·최고값입니다.
GET /wallets, /wallets/timeline, /wallets/compare, /wallets/{slug}, /wallets/{slug}/assets는 이제 베이퍼웨어(vaporware) 상태의 지갑도 반환하므로, status가 그 값을 가질 수 있습니다.
인사이트 안의 출처 title과 excerpt에 더 이상 í 같은 원시 HTML 엔티티가 포함되지 않습니다.
한 번도 편집되지 않은 기사의 경우, GET /articles와 GET /articles/{slug}의 updated_at은 조회수나 투표 등 어떤 이유로든 레코드가 마지막으로 변경된 시각을 보여 주었습니다. 이제는 마지막 편집 시각을 보여 주며, 편집이 없으면 게시일로 대체되고, POST /articles/{slug}/feedback으로는 더 이상 바뀌지 않습니다.
인사이트에 이제 sentiment가 포함됩니다: bullish, bearish, sheepish, 또는 분류되지 않은 경우 null.
TypeScript, Python, PHP, Go, Rust, Java, C#, C++ 클라이언트로, 모두 동일한 전송 코어 위에서 전체 엔드포인트를 지원합니다. Bearer 인증, 응답 형식 해제, X-Quota-* 수집, 429 및 5xx 재시도, 타입이 지정된 오류와 페이징을 제공합니다.
이제 엔드포인트에 요금제 조건을 둘 수 있습니다. 도입 당시 GET /sentiment/indicators에는 Pro가, GET /sentiment/bull-bear, GET /sentiment/altseason, GET /global, GET /global/heatmap, GET /global/history/{metric}에는 Starter가 필요했습니다. 요금제 범위를 벗어난 호출은 403 plan_required를 반환하고, details.required_plan에 잠금을 해제하는 요금제가 명시되며, 쿼터는 소모되지 않습니다.
/liquidations 엔드포인트 6개가 모든 요금제에서 비활성화되었습니다. 이 엔드포인트들은 503 endpoint_unavailable("This endpoint is temporarily unavailable.")을 반환하며 쿼터를 소모하지 않습니다.
Pro 요금제의 월간 쿼터가 500,000건에서 250,000건으로 줄었습니다.
범용 GET /coins/{slug}/indicators/{family}는 같은 경로에서 각각 따로 문서화된 13개 엔드포인트로 나뉘었습니다: rsi, stoch-rsi, sma, cci, mfi, williams-r, price-volatility, volume-volatility, macd, obv, adx, vwap, cmf. 기존 호출은 바뀌지 않으며, 알 수 없는 지표 이름에는 이제 유효한 이름 목록 없이 단순한 404가 반환됩니다.
출시 당시 Data API 호출과 임베드 위젯 요청은 임베드 요금제에 묶인 하나의 월간 풀에서 차감되었습니다. 이제 Data API는 자체 Free, Starter, Pro 요금제와 구독, 월간 쿼터를 가지며, 결제 기간도 별도입니다. Free에서는 UTC 기준 달력 월이고, 유료 요금제에서는 갱신일을 기준으로 합니다. GET /ping과 GET /usage는 Data API 요금제를 보고하며, /usage는 Data API 호출만 집계합니다. 분리 시점에 한도는 바뀌지 않았습니다.
레퍼런스는 /{locale}/documentation에서 /{locale}/documentation/api/v1으로, Postman 컬렉션과 OpenAPI YAML은 /documentation.postman과 /documentation.openapi에서 /documentation/api/v1.postman과 /documentation/api/v1.openapi로 이동했습니다. 이전 경로는 리디렉션 없이 제거되었으며, /api/v1/openapi.json은 그대로입니다.
출시: 15개 그룹에 걸친 73개 오퍼레이션 - 코인, 가격, 마켓, 거래소, 지갑, 글로벌, 센티먼트, 지표, 청산, 환산, 계산기, 편집 콘텐츠, 알림, 웹훅, 메타. data-api 권한을 가진 Bearer 키, { data, meta } 응답 형식, 소수 문자열 정밀도, X-Quota-* 헤더, 서명된 웹훅. Data API 호출과 임베드 위젯 요청은 임베드 요금제 아래에서 하나의 월간 쿼터를 공유했으며, 더 긴 지표 기간에는 Starter가 필요했습니다.
지원 중단은 제거 최소 6개월 전에 이곳과 모든 키 소유자에게 보내는 이메일로 공지됩니다 - 다음 지원 종료 정책을 참고하세요. /apis.json의 기계 판독용 인덱스는 가장 최신 항목의 날짜를 modified 표기로 제공합니다.