Разработчикам
Всё для интеграции цен в реальном времени и исторических данных: интерактивный справочник, SDK для Python и JavaScript, спецификация OpenAPI и коллекция Postman.
Быстрый старт
Python
# one file, standard library only (Python 3.9+)
curl -O https://app.marketapi.app/sdk/marketapi.py
pip install websockets # only if you use the live stream
from marketapi import MarketAPI
api = MarketAPI("YOUR_API_KEY")
print(api.latest(["EURUSD", "XAUUSD"]))JavaScript
// one ES module, no dependencies (Node 18+ and browsers)
curl -O https://app.marketapi.app/sdk/marketapi.mjs
npm install ws # only for the live stream in Node.js
import { MarketAPI } from "./marketapi.mjs";
const api = new MarketAPI({ apiKey: process.env.API_KEY });
console.log(await api.latest(["EURUSD"]));Клиенты — это одиночные файлы, которые вы храните в своём проекте, поэтому ничего не нужно устанавливать из реестра пакетов и не нужно доверять стороннему коду. Положите файл рядом со скриптом или в любую папку из пути импорта.
marketapi.py marketapi.mjs Спецификация OpenAPI 3.1 · Коллекция Postman · Руководства · Журнал изменений · Оракул (смарт-контракты)
Создаёте смарт-контракт?
On-chain оракул цен передаёт вашему контракту те же цены в виде подписанных отчётов, которые он может проверить on-chain: GET https://api.marketapi.app/v1/oracle/report?symbols=XAUUSD&chain_id=10, затем submit(report, signature) и getPriceNoOlderThan(feedId, maxAge). Примеры на Solidity и ethers v6, адреса контрактов и ID фидов — в документации оракула.
Интерактивный справочник
General
GET /v1/status Service status
Ключ API не нужен · Тарификация: free
GET /v1/openapi.json This API description (OpenAPI 3.1)
Ключ API не нужен · Тарификация: free
GET /v1/postman.json Postman collection
Ключ API не нужен · Тарификация: free
GET /v1/account Your balance, plan and limits
Любой действующий ключ API · Тарификация: free
GET /v1/cost-preview Credits a request would cost
Любой действующий ключ API · Тарификация: free
Symbols
GET /v1/symbols Search the symbol list
Область read:symbols · Тарификация: free
GET /v1/symbols/{canonical} One symbol's specification
Область read:metadata · Тарификация: free
GET /v1/symbols/{canonical}/properties/history Specification change history
Область read:metadata · Тарификация: free
Prices
GET /v1/market-status Market status per symbol
Область read:latest · Тарификация: free
GET /v1/prices/latest Latest bid/ask
Область read:latest · Тарификация: 1 credit per symbol returned
History
GET /v1/bars Historical OHLC candles
Область read:ohlcv · Тарификация: credits per block of rows
GET /v1/ticks Historical ticks
Область read:history · Тарификация: credits per block of rows
Analytics
GET /v1/patterns/stats Pattern strategy statistics
Область read:metadata · Тарификация: 25 credits per call
Free tier
GET /v1/free/prices/latest Delayed prices, no key
Ключ API не нужен · Тарификация: free (fair-use limits)
GET /v1/free/symbols Free-tier symbol list, no key
Ключ API не нужен · Тарификация: free (fair-use limits)
GET /v1/free/market-status Market status, no key
Ключ API не нужен · Тарификация: free (fair-use limits)
Oracle
GET /v1/oracle/feeds Oracle feeds, networks and signer (when the oracle is enabled)
Ключ API не нужен · Тарификация: free
GET /v1/oracle/catalog Oracle feeds by network: asset name, category, contract, decimals (when enabled)
Ключ API не нужен · Тарификация: free
GET /v1/oracle/report Signed EIP-712 price reports (when the oracle is enabled)
Область read:oracle · Тарификация: credits per signed report
Ошибки
Ошибки используют формат RFC 9457 problem details: {"type", "title", "status", "code", "detail", "request_id"}. Указывайте request_id при обращении в поддержку.
| HTTP | код | Значение | Что делать |
|---|---|---|---|
| 400 | invalid_parameter | A parameter is missing or malformed. | Check the parameter named in detail. |
| 400 | too_many_symbols | Too many symbols in one request. | Split the request (up to 100 symbols). |
| 400 | range_too_large | The time range is too long for this endpoint. | Request shorter ranges and page. |
| 400 | credentials_in_query | The API key was sent in the URL. | Send it in the Authorization header. |
| 401 | unauthenticated | No or an invalid API key. | Send Authorization: Bearer <key>. |
| 401 | key_revoked | The API key was revoked. | Create a new key in the dashboard. |
| 401 | key_expired | The API key has expired. | Create a new key or extend it. |
| 402 | insufficient_balance | No credits left. | Top up or choose a plan. |
| 402 | plan_credits_used_up | The plan's credits for this month are used up (your balance is never used while a plan runs). | Add credits to the month or upgrade on the billing page. |
| 402 | plan_ended | The API plan has ended; the balance is not used until you choose. | Renew, pick a plan, or choose pay as you go on the billing page. |
| 403 | insufficient_scope | The key lacks the scope this endpoint needs. | Create a key with that scope. |
| 403 | ip_not_allowed | The request came from an IP the key does not allow. | Update the key's IP list. |
| 403 | account_inactive | The account is suspended or not verified. | Verify your email or contact support. |
| 403 | sandbox_not_billable | Test keys cannot call billable endpoints. | Use a live key. |
| 404 | not_found | Resource not available. | Check the URL; some features may be switched off. |
| 404 | unknown_symbol | The symbol does not exist. | Search /symbols or the ticker list. |
| 404 | free_tier_disabled | The free tier is switched off. | Use an API key. |
| 405 | method_not_allowed | Wrong HTTP method. | Use GET. |
| 409 | idempotency_mismatch | Same Idempotency-Key reused with different parameters. | Use a new key. |
| 409 | idempotency_key_used | The Idempotency-Key was used and its answer is no longer kept (24 h, 2 MB). | Send a new key for current data. |
| 429 | rate_limited | Too many requests per minute or hour. | Wait for Retry-After; batch symbols. |
| 429 | too_many_concurrent_requests | Too many requests in parallel. | Limit concurrency. |
| 429 | daily_limit | Free-tier daily limit reached. | Retry tomorrow or use an API key. |
| 503 | oracle_unavailable | The oracle signing service is temporarily unavailable. | Retry with back-off. |
| 503 | free_tier_unavailable | The free tier is temporarily unavailable. | Retry later. |
| 503 | free_tier_busy | The free tier is busy. | Retry later or use an API key. |