> ## Documentation Index
> Fetch the complete documentation index at: https://api.csboard.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 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.

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 `Authorization: Bearer csb_pub_...`.

## Parameters

This endpoint takes no query parameters.

## Response fields

<ResponseField name="base" type="string" required>
  Always `"USD"`. All rates are expressed relative to one US dollar.
</ResponseField>

<ResponseField name="rates" type="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 }`.
</ResponseField>

<ResponseField name="updated_at" type="datetime" required>
  ISO 8601 timestamp of when the rate table was last refreshed.
</ResponseField>

<ResponseField name="rub_source" type="string">
  Source identifier for the RUB rate, e.g. `"cbr"` (Central Bank of Russia).
</ResponseField>

<ResponseField name="base_source" type="string">
  Source identifier for non-RUB rates, e.g. `"openexchangerates"`.
</ResponseField>

## Converting prices

To display a `price_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
```

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.

## Example request

```bash theme={null}
curl https://csboard.com/v1/currency \
  -H "Authorization: Bearer csb_pub_..."
```

## Example response

```json theme={null}
{
  "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         | `unauthorized`        | Missing or invalid API key.                                           |
| 429         | `rate_limit_exceeded` | Over 30 requests/min. Check the `Retry-After` header before retrying. |

<Tip>
  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.
</Tip>


## OpenAPI

````yaml GET /currency
openapi: 3.1.0
info:
  title: CSBoard API
  version: 1.0.0
  description: >-
    Market data over the CSBoard marketplace — live listings, floats, stickers,
    minAsk prices, FX rates — plus opt-in buying straight from your balance.
    Free to read, key-gated, built for automation.
  contact:
    name: CSBoard
    url: https://csboard.com/docs
servers:
  - url: https://csboard.com/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Status
    description: Liveness and freshness probes.
  - name: Market data
    description: Read the live catalog, prices, and FX rates.
  - name: Trading
    description: Buy listings from your CSBoard balance. Opt-in, key-gated.
  - name: Account
    description: Your balance, settled funds, and trading status.
paths:
  /currency:
    get:
      tags:
        - Market data
      summary: FX rates (USD base)
      description: >-
        FX rates with USD as the base. Every price in this API is USD — use this
        to convert to a local currency. Same rate table the site and payment
        flows use (cached ~1h).
      operationId: getCurrency
      responses:
        '200':
          description: Current FX rates.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Currency'
              example:
                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
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
components:
  schemas:
    Currency:
      type: object
      properties:
        base:
          type: string
          example: USD
        rates:
          type: object
          additionalProperties:
            type: number
          description: Currency code → units per 1 USD.
        updated_at:
          type: string
          format: date-time
        rub_source:
          type: string
        base_source:
          type: string
      required:
        - base
        - rates
        - updated_at
    Error:
      type: object
      description: >-
        All errors return { code, detail }. Some carry extra fields (e.g.
        price_moved adds current_total_usd, insufficient_balance adds
        required_usd/current_usd).
      properties:
        code:
          type: string
          description: >-
            Machine-readable error code, e.g. rate_limit_exceeded,
            trading_not_enabled, price_moved.
        detail:
          type: string
          description: Human-readable explanation.
      required:
        - code
  responses:
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: unauthorized
            message: Missing or invalid API key.
    RateLimited:
      description: Rate limit exceeded. Includes a Retry-After header.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: rate_limit_exceeded
            message: Too many requests.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Send your key as a Bearer token on every request: `Authorization: Bearer
        csb_pub_...`. Generate keys in your CSBoard profile.

````