CC API

Рыночные курсы 340+ фиатных валют, криптовалют, стейблкоинов и металлов, история курса и сколько на самом деле получит адресат через каждый сервис перевода после всех комиссий. JSON по HTTPS, бесплатно, без ключа.

Без ключаJSONCORS открытБесплатно
Базовый адресhttps://currency-backend.currency-backend.workers.dev/v1

Быстрый старт

Каждый метод — обычный GET-запрос. Попробуйте в терминале:

Ни регистрации, ни ключа. Ответы — JSON, ошибки везде в одном формате (см. «Ошибки»). Запросы из браузера тоже работают: CORS открыт.

/convert
curl "https://currency-backend.currency-backend.workers.dev/v1/convert?from=USD&to=EUR&amount=100"
Пример ответа
{
  "from": "USD",
  "to": "EUR",
  "amount": 100,
  "rate": 0.89046402,
  "result": 89.05,
  "updated_at": "2026-10-17T22:17:28.819Z"
}

Лимиты

API бесплатный, поэтому у него жёсткие лимиты. Они держат сервис быстрым и доступным для всех:

ЛимитЗначение
Запросов в минуту с одного IP30
Запросов в сутки с одного IP1,000
Запросов в сутки от всех пользователей вместе20,000

Сутки считаются по UTC: все счётчики обнуляются в 00:00 UTC. В каждом ответе — заголовки X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset (время сброса, Unix).

Сверх лимита приходит HTTP 429 с заголовком Retry-After. Подождите, а не повторяйте запрос в цикле: отказы тоже считаются.

Как пользоваться бережно

  • Курсы обновляются раз в 15 минут — кешируйте ответы хотя бы на 5 минут.
  • Один вызов /v1/rates отдаёт все валюты: используйте его вместо запроса на каждую пару.
  • Вызывайте API со своего сервера и кешируйте там, а не из браузера каждого посетителя.

Ошибки

Ошибка приходит с HTTP-статусом и JSON с объектом error:

СтатусtypecodeКогда
400invalid_request_errormissing_parameterНет обязательного параметра.
400invalid_request_errorunknown_currencyКода валюты нет в /v1/currencies.
400invalid_request_errorinvalid_amount, invalid_parameterЧисло вне допустимого диапазона.
404not_found_errornot_found, history_unavailableНет такого метода или нет истории у пары.
429rate_limit_errorrate_limitedБольше 30 запросов в минуту.
429rate_limit_errordaily_limit_exceeded1,000 запросов с вашего IP за сутки.
429rate_limit_errordaily_budget_exhaustedОбщий суточный лимит исчерпан.
503api_errorrates_unavailableСвежего курса сейчас нет; повторите через минуту.
400
{
  "error": {
    "type": "invalid_request_error",
    "code": "unknown_currency",
    "message": "Unknown currency 'XYZ'. See /v1/currencies.",
    "param": "to",
    "docs": "https://ccvia.app/developers"
  }
}
GET/v1/rates

Курсы

Рыночные курсы всех валют к одной базовой. Каждый курс — медиана нескольких открытых источников (центробанки, биржи), обновляется раз в 15 минут.

Параметры

baseнеобязательный

Валюта, к которой считаются курсы. По умолчанию USD.

symbolsнеобязательный

Коды через запятую. По умолчанию — все валюты.

Ответ

base

Базовая валюта.

updated_at

Когда обновлены курсы (ISO 8601, UTC).

rates

Сколько единиц каждой валюты за 1 базовую, 8 значащих цифр.

/rates
curl "https://currency-backend.currency-backend.workers.dev/v1/rates?base=USD&symbols=EUR,GBP,JPY"
Пример ответа
{
  "base": "USD",
  "updated_at": "2026-10-17T22:17:28.819Z",
  "rates": {
    "EUR": 0.89046402,
    "GBP": 0.75063241,
    "JPY": 159.29975
  }
}
GET/v1/convert

Конвертация

Пересчитывает сумму по рыночному курсу — тому, по которому банки торгуют между собой, без комиссий и наценки.

Параметры

fromобязательный

Валюта, которая есть.

toобязательный

Валюта, которая нужна.

amountнеобязательный

Сумма в from. По умолчанию 1.

Ответ

rate

Сколько to за 1 from.

result

amount × rate, округлено до обычной точности валюты.

updated_at

Когда обновлён курс.

/convert
curl "https://currency-backend.currency-backend.workers.dev/v1/convert?from=USD&to=EUR&amount=100"
Пример ответа
{
  "from": "USD",
  "to": "EUR",
  "amount": 100,
  "rate": 0.89046402,
  "result": 89.05,
  "updated_at": "2026-10-17T22:17:28.819Z"
}
GET/v1/quote

Сравнение сервисов перевода

Сколько получит адресат через каждый сервис перевода, биржу и кошелёк, которые мы отслеживаем, — после их комиссий и наценок на курс. От лучшего к худшему. Если пару напрямую не меняет ни один сервис, придут цепочки из 2–3 сервисов (RUB → USDT → USDS), самая выгодная первой.

Параметры

fromобязательный

Валюта отправителя.

toобязательный

Валюта получателя.

amountнеобязательный

Сумма отправки в from. По умолчанию — около 100 USD.

chainsнеобязательный

1 — вернуть цепочки и при наличии прямых сервисов. Без прямых цепочки приходят всегда.

langнеобязательный

Язык: en, es, pt, fr, de, it, ru, tr, ar, hi, id, zh, ja, ko. По умолчанию en.

Ответ

mid_rate

Рыночный курс для сравнения.

providers[].received

Сколько получит адресат, в to.

providers[].fee_pct

Вся стоимость перевода к рыночному курсу, в % от суммы отправки.

providers[].estimate

true, если часть стоимости — наша оценка, а не опубликованный тариф.

providers[].url

Ссылка на сервис.

chains[]

Если пару напрямую не меняет ни один сервис (или с chains=1): до 3 путей через 2–3 сервиса — через USDT, USDC, USD, EUR, BTC или ETH, самый выгодный первым. Три шага — только если двух не хватает.

chains[].path

Валюты по пути, например RUB, USDT, USDS.

chains[].received, fee_pct

Сколько получит адресат в конце и вся стоимость к рыночному курсу пары.

chains[].legs[]

Каждый шаг: from, to, amount, received, fee_pct и провайдер (id, name, url). Каждый шаг — обмен внутри сервиса; следующий начинается ровно с того, что выплатил предыдущий.

converter_url

То же сравнение в приложении CC.

/quote
curl "https://currency-backend.currency-backend.workers.dev/v1/quote?from=USDT&to=EUR&amount=500"
Пример ответа
{
  "from": "USDT",
  "to": "EUR",
  "amount": 500,
  "mid_rate": 0.89046402,
  "mid_result": 445.23,
  "updated_at": "2026-10-17T22:17:28.819Z",
  "providers": [
    {
      "id": "etherfi",
      "name": "Ether.fi",
      "website": "ether.fi",
      "received": 444.56,
      "fee_pct": 0.15,
      "estimate": false,
      "best": true,
      "url": "https://ccvia.app/go/etherfi?from=USDT&to=EUR&src=api"
    },
    {
      "id": "kucoin",
      "name": "KuCoin",
      "website": "kucoin.com",
      "received": 443.65,
      "fee_pct": 0.35,
      "estimate": false,
      "best": false,
      "url": "https://ccvia.app/go/kucoin?from=USDT&to=EUR&src=api"
    }
  ],
  "converter_url": "https://ccvia.app/?from=USDT&to=EUR&amount=500"
}
Пример: прямого сервиса нет (RUB → USDS)
{
  "from": "RUB",
  "to": "USDS",
  "amount": 10000,
  "mid_rate": 0.01196115,
  "mid_result": 119.61,
  "updated_at": "2026-10-18T12:17:28.819Z",
  "providers": [],
  "chains": [
    {
      "received": 113.62,
      "fee_pct": 5.01,
      "estimate": false,
      "best": true,
      "path": [
        "RUB",
        "USDT",
        "USDS"
      ],
      "legs": [
        {
          "from": "RUB",
          "to": "USDT",
          "amount": 10000,
          "received": 115.02,
          "fee_pct": 3.84,
          "estimate": false,
          "provider": {
            "id": "altyn",
            "name": "Altyn Wallet",
            "website": "altyn.one",
            "url": "https://ccvia.app/go/altyn?from=RUB&to=USDT&src=api"
          }
        },
        {
          "from": "USDT",
          "to": "USDS",
          "amount": 115.02,
          "received": 113.62,
          "fee_pct": 1.22,
          "estimate": false,
          "provider": {
            "id": "kucoin",
            "name": "KuCoin",
            "website": "kucoin.com",
            "url": "https://ccvia.app/go/kucoin?from=USDT&to=USDS&src=api"
          }
        }
      ]
    }
  ],
  "converter_url": "https://ccvia.app/?from=RUB&to=USDS&amount=10000"
}
GET/v1/history

История курса

Рыночный курс по дням за год или по неделям (по четвергам) за пять лет.

Параметры

fromобязательный

Базовая валюта.

toобязательный

Валюта котировки.

daysнеобязательный

Глубина, от 1 до 1825 дней. До 365 — по дням, больше — по неделям. По умолчанию 30.

Ответ

interval

day или week. Недельная история есть не у всех пар — тогда придут дневные точки за последний год.

points

date (ГГГГ-ММ-ДД, UTC) и rate (сколько to за 1 from), от старых к новым.

/history
curl "https://currency-backend.currency-backend.workers.dev/v1/history?from=USD&to=EUR&days=7"
Пример ответа
{
  "from": "USD",
  "to": "EUR",
  "interval": "day",
  "points": [
    {
      "date": "2026-10-14",
      "rate": 0.891987
    },
    {
      "date": "2026-10-15",
      "rate": 0.890861
    },
    {
      "date": "2026-10-16",
      "rate": 0.88987
    }
  ]
}
GET/v1/currencies

Валюты

Все поддерживаемые валюты с названием и типом.

Параметры

langнеобязательный

Язык названий: en, es, pt, fr, de, it, ru, tr, ar, hi, id, zh, ja, ko. По умолчанию en.

Ответ

code

Код для остальных методов (регистр не важен).

type

fiat, crypto, stablecoin или metal.

decimals

Сколько знаков обычно показывают у суммы.

/currencies
curl "https://currency-backend.currency-backend.workers.dev/v1/currencies"
Пример ответа
{
  "currencies": [
    {
      "code": "USD",
      "name": "Dollar",
      "type": "fiat",
      "decimals": 2
    },
    {
      "code": "BTC",
      "name": "Bitcoin",
      "type": "crypto",
      "decimals": 8
    },
    {
      "code": "USDT",
      "name": "Tether",
      "type": "stablecoin",
      "decimals": 2
    },
    {
      "code": "XAU",
      "name": "Gold",
      "type": "metal",
      "decimals": 4
    }
  ]
}
GET/v1/providers

Провайдеры

Сервисы перевода, биржи и кошельки, которые сравнивает /v1/quote, и валюты, которые каждый принимает и выплачивает.

Ответ

send

Из каких валют можно отправить.

receive

В каких валютах выплачивают.

url

Ссылка на сервис.

/providers
curl "https://currency-backend.currency-backend.workers.dev/v1/providers"
Пример ответа
{
  "providers": [
    {
      "id": "kucoin",
      "name": "KuCoin",
      "website": "kucoin.com",
      "url": "https://ccvia.app/go/kucoin?src=api",
      "send": [
        "EUR",
        "USDT",
        "BTC"
      ],
      "receive": [
        "EUR",
        "USDT",
        "BTC"
      ]
    }
  ]
}
GET/v1/usage

Расход

Сколько из сегодняшних лимитов израсходовал ваш IP. Сам вызов тоже считается запросом.

Ответ

per_ip

Ваши запросы за сегодня и ваш суточный лимит.

shared

Запросы всех пользователей за сегодня и общий лимит.

reset_at

Когда обнулятся счётчики.

/usage
curl "https://currency-backend.currency-backend.workers.dev/v1/usage"
Пример ответа
{
  "date": "2026-10-17",
  "reset_at": "2026-10-18T00:00:00.000Z",
  "per_ip": {
    "used": 12,
    "limit": 1000
  },
  "shared": {
    "used": 4810,
    "limit": 20000
  },
  "per_minute": 30
}

Условия

  • Бесплатно для личных и коммерческих проектов. Пожалуйста, укажите CC со ссылкой на ccvia.app рядом с данными.
  • Курсы — ориентировочные рыночные, не оферта. Комиссии провайдеров оценены по их опубликованным тарифам и нашим замерам; итоговую сумму показывает приложение провайдера.
  • Лимиты могут меняться. Несовместимые изменения выйдут новой версией (/v2), v1 продолжит работать.
  • Без гарантий: стройте продукт так, чтобы он пережил несколько минут без курсов.

OpenAPI

Машиночитаемое описание API (OpenAPI 3.1): импортируйте в Postman, Insomnia или генератор клиентов.

Изменения

2026-10-18
quote: цепочки из 2–3 сервисов, если пару напрямую не меняет ни один; chains=1 — получить их всегда.
2026-10-18
API v1: rates, convert, quote, history, currencies, providers, usage. Суточные лимиты на IP.