Market Data
GET /v1/currency — FX Rates for USD Price Conversion
Retrieve the USD-base FX rate table used by CSBoard payment flows. Multiply any price_usd by the target currency rate for a local-currency price.
GET
/
currency
FX rates (USD base)
curl --request GET \
--url https://csboard.com/v1/currency \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/currency"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://csboard.com/v1/currency', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://csboard.com/v1/currency",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://csboard.com/v1/currency"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://csboard.com/v1/currency")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/currency")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.92,
"RUB": 78.4,
"GBP": 0.79
},
"updated_at": "2026-06-29T17:00:00Z",
"rub_source": "cbr",
"base_source": "openexchangerates"
}{
"code": "missing_api_key",
"detail": "Provide your API key via `Authorization: Bearer csb_pub_…`. Generate one at https://csboard.com/profile?tab=api"
}{
"code": "rate_limit_exceeded",
"detail": "Rate limit of 100 requests/min exceeded."
}Every price in the CSBoard API is denominated in USD. The currency endpoint returns the same FX rate table that powers the site’s own payment and display flows, giving you a consistent conversion layer for presenting local-currency prices to your users. Rates are sourced from OpenExchangeRates for major currencies and from the Central Bank of Russia for RUB, and are cached for approximately one hour.
Authentication required. Send your key as
Because the rates table is cached for ~1 hour, fetch it once at application start and refresh it periodically rather than calling this endpoint per-item.
Authorization: Bearer csb_pub_....
Parameters
This endpoint takes no query parameters.Response fields
string
required
Always
"USD". All rates are expressed relative to one US dollar.object
required
A map of ISO 4217 currency codes to their exchange rate against USD (units of that currency per 1 USD). Example:
{ "USD": 1, "EUR": 0.92, "RUB": 78.4, "GBP": 0.79 }.datetime
required
ISO 8601 timestamp of when the rate table was last refreshed.
string
Source identifier for the RUB rate, e.g.
"cbr" (Central Bank of Russia).string
Source identifier for non-RUB rates, e.g.
"openexchangerates".Converting prices
To display aprice_usd value in a local currency, multiply it by the corresponding rate:
local_price = price_usd × rates["EUR"]
# e.g. 14.37 USD × 0.92 = 13.22 EUR
Example request
curl https://csboard.com/v1/currency \
-H "Authorization: Bearer csb_pub_..."
Example response
{
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.92,
"RUB": 78.4,
"GBP": 0.79
},
"updated_at": "2026-06-29T17:00:00Z",
"rub_source": "cbr",
"base_source": "openexchangerates"
}
Error codes
| HTTP status | Code | Meaning |
|---|---|---|
| 401 | missing_api_key, invalid_api_key | Missing or invalid API key. |
| 429 | rate_limit_exceeded | Over 30 requests/min. Check the Retry-After header before retrying. |
Cache the rates response client-side and refresh it no more than once per hour. Rates are updated on the same ~1 hour cycle, so polling more frequently won’t give you fresher data and consumes your rate limit budget.
Authorizations
Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.
⌘I
FX rates (USD base)
curl --request GET \
--url https://csboard.com/v1/currency \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/currency"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://csboard.com/v1/currency', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://csboard.com/v1/currency",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://csboard.com/v1/currency"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://csboard.com/v1/currency")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/currency")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.92,
"RUB": 78.4,
"GBP": 0.79
},
"updated_at": "2026-06-29T17:00:00Z",
"rub_source": "cbr",
"base_source": "openexchangerates"
}{
"code": "missing_api_key",
"detail": "Provide your API key via `Authorization: Bearer csb_pub_…`. Generate one at https://csboard.com/profile?tab=api"
}{
"code": "rate_limit_exceeded",
"detail": "Rate limit of 100 requests/min exceeded."
}