---
title: "No Official SDKs on Open Exchange Rates: AllRatesToday's JavaScript, Python, and PHP Libraries"
description: "Open Exchange Rates ships no first-party SDKs. You choose from community libraries with varying maintenance status. AllRatesToday ships official, supported SDKs for JS, Python, and PHP."
canonical: https://allratestoday.com/blog/openexchangerates-no-official-sdks/
source: AllRatesToday (https://allratestoday.com/) — Markdown mirror of the page above; index of all pages at https://allratestoday.com/llms.txt
generated: 2026-10-19T10:00:37.727Z
---

![Developer SDK tools](https://images.pexels.com/photos/2764993/pexels-photo-2764993.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940)

Open Exchange Rates' own docs spell it out: **"We don't actively support or maintain any of these community libraries (except where stated)."** The recommended integration path is direct HTTP — "access latest.json via AJAX, CURL, Scrapy, node-httpagent, or your method of choice."

For a simple read-only endpoint, that's workable. But when you hit production concerns — retries, typed responses, caching, error normalization, rate-limit handling — you're reimplementing the same client wrapper every team has already written ten times over.

**AllRatesToday** ships first-party SDKs for JavaScript/TypeScript, Python, and PHP, plus MCP server and DeepSeek integration for AI coding tools. This article walks through why that matters and what the DX difference looks like in practice.

## What "no official SDK" means

Open Exchange Rates' [API Libraries & Extensions](https://docs.openexchangerates.org/reference/api-libraries-extensions) page lists community libraries for Ruby, Python, PHP, Node.js, .NET, Java, and others. Some are well-maintained; others were last updated in 2017. All are third-party.

What you give up without an official SDK:

- **Type definitions.** Auto-complete for endpoint names, parameters, and response shapes.
- **Version-stable contract.** Community libs sometimes drift from the official API spec.
- **Consistent error handling.** Each lib defines its own error classes and conventions.
- **Unified retry/backoff.** Each lib (re)implements retries from scratch, often badly.
- **Support.** Open Exchange Rates can't help if the bug is in a third-party library.

## AllRatesToday's official SDKs

### JavaScript / TypeScript

```
npm install @allratestoday/sdk
```

```
import AllRatesToday from '@allratestoday/sdk';

const client = new AllRatesToday(process.env.ALLRATES_API_KEY!);

// Single rate (typed response)
const { rate } = await client.getRate('USD', 'EUR');

// Convert with typed result
const { result } = await client.convert('USD', 'EUR', 1000);

// Historical — returns a typed time series
const history = await client.getHistoricalRates('USD', 'EUR', '30d');
history.rates.forEach(p => console.log(p.time, p.rate));
```

Full TypeScript types. Throws a typed `AllRatesTodayError` on 4xx/5xx. Handles retry/backoff by default.

### Python

```
pip install allratestoday
```

```
from allratestoday import AllRatesToday

client = AllRatesToday(api_key="YOUR_KEY")

rate = client.get_rate("USD", "EUR")
result = client.convert("USD", "EUR", 1000)
history = client.get_historical_rates("USD", "EUR", "30d")
```

Ships with type hints, async variant (`AsyncAllRatesToday`), and context-manager support.

### PHP

```
composer require allratestoday/sdk
```

```
use AllRatesToday\AllRatesToday;

$client = new AllRatesToday('YOUR_KEY');
$rate = $client->getRate('USD', 'EUR');
$result = $client->convert('USD', 'EUR', 1000);
```

PSR-18 compatible HTTP client, PSR-3 logger support.

## The same task in raw HTTP (what you'd write against Open Exchange Rates)

Here's a realistic production client you'd need to write against Open Exchange Rates to get the same features the AllRatesToday SDK gives you for free:

```
async function getRate(from, to, attempt = 0) {
  const url = `https://openexchangerates.org/api/latest.json?app_id=${APP_ID}&base=${from}&symbols=${to}`;

  try {
    const res = await fetch(url);
    if (res.status === 429) {
      // rate limited — backoff
      if (attempt < 3) {
        await new Promise(r => setTimeout(r, 2 ** attempt * 1000));
        return getRate(from, to, attempt + 1);
      }
      throw new Error('Rate limited after retries');
    }
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    const data = await res.json();
    if (data.error) throw new Error(data.description);
    return data.rates[to];
  } catch (err) {
    // re-throw normalized
    throw err;
  }
}
```

About 20 lines of hand-rolled glue per team. The AllRatesToday SDK gives you all of this behind a three-word method call.

*Note: the `base={from}` parameter in the URL above won't work on the Open Exchange Rates free plan — base is USD-only. You'd need either the Developer tier or to switch to cross-rate math. [We cover that pain point separately](https://allratestoday.com/blog/openexchangerates-usd-base-currency-problem/).*

## MCP and DeepSeek: AI-coding-tool integrations

AllRatesToday also ships integrations Open Exchange Rates doesn't offer at all:

- **MCP server** (`@allratestoday/mcp-server`) — plugs into Claude Code, Cursor, Claude Desktop, ChatGPT Desktop. Your AI assistant can call `get_exchange_rate`, `get_historical_rates`, `list_currencies`, and `get_rates_authenticated` directly.
- **DeepSeek package** (`allratestoday-deepseek`) — Python function-calling library for DeepSeek's Chat Completions API.

Neither of these makes sense without a well-defined SDK layer, and that's the practical payoff of shipping an official client: you can build higher-level integrations on top of it without every downstream user rebuilding the wrapper.

## When community libraries are fine

If you're on a language AllRatesToday doesn't yet officially support (Ruby, Go, Rust, .NET, Java), the community libraries for Open Exchange Rates and AllRatesToday are both usable — just audit the maintenance status before shipping.

## When you want an official SDK

- Production apps where error handling and retry policy need to be consistent and tested.
- TypeScript or typed Python codebases where response types avoid class of bugs.
- Teams that want vendor support when something breaks.
- Anyone building on top of the SDK (wrappers, higher-level libraries, custom agents).

## Skip the hand-rolled HTTP client

Install the SDK, start calling client.getRate(), done. No credit card required.

 [Get your free API key](https://allratestoday.com/register/)

## Related Articles

- [OXR USD Base Currency Problem](https://allratestoday.com/blog/openexchangerates-usd-base-currency-problem/)
- [Best Currency API for Python](https://allratestoday.com/blog/best-currency-api-for-python-2026/)
- [Best Exchange Rate API for Node.js](https://allratestoday.com/blog/best-exchange-rate-api-for-nodejs-2026/)
- [Open Exchange Rates Alternative](https://allratestoday.com/compare/openexchangerates-alternative/)
