# Получение курса

Метод возвращает **курс конвертации** между двумя валютами для указанного проекта. Используйте запрос перед расчётом суммы платежа или выплаты в другой валюте.

Формат HTTP-запросов — в разделе [Формат запроса к API](/pages/init-request).

## Принцип работы

1. **Запрос** — ваш сервер вызывает `get_rate` с `partner_id`, `project_id`, `currency_from`, `currency_to` и подписью `sign`.
2. **Проверка** — API проверяет подпись и права партнёра на проект.
3. **Ответ** — JSON с полем `rate`: сколько единиц `currency_to` соответствует одной единице `currency_from`.


## Техническая информация

|  |  |
|  --- | --- |
| **Эндпоинт** | `https://api.1payment.com/get_rate` |
| **Метод** | `GET` |
| **Формат ответа** | JSON |
| **Авторизация** | API Key — участвует в генерации подписи `sign` |


## Параметры запроса

### Обязательные

| Параметр | Тип | Описание |
|  --- | --- | --- |
| `partner_id` | Integer | Ваш уникальный ID в системе 1Payment. |
| `project_id` | Integer | Идентификатор проекта. |
| `currency_from` | String | Валюта отправки (ISO code, например `usdt`). |
| `currency_to` | String | Валюта получения (ISO code, например `rub`). |
| `sign` | String | Контрольная подпись запроса (см. раздел «Подпись»). |


## Формирование подписи (`sign`)

Подпись: MD5, lowercase (hex). Общие правила — [Формат запроса к API](/pages/init-request#%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D1%8C-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-sign).

**Формула:**


```text
MD5(get_rate + <параметры_без_sign_в_алфавитном_порядке_через_&> + <API_KEY>)
```

**Пример строки до хеширования:**


```text
get_ratecurrency_from=usdt&currency_to=rub&partner_id=1234&project_id=5678secret_key
```

### Проверка подписи в документации

## Примеры запроса

Node.js

```javascript
const crypto = require('crypto');
const axios = require('axios');

async function getRate(apiKey, partnerId, projectId, currencyFrom, currencyTo) {
  const params = {
    partner_id: partnerId,
    project_id: projectId,
    currency_from: currencyFrom,
    currency_to: currencyTo,
  };

  // 1. Сортировка параметров по алфавиту
  const sortedKeys = Object.keys(params).sort();
  const queryString = sortedKeys.map((key) => `${key}=${params[key]}`).join('&');

  // 2. Подпись с префиксом get_rate
  const baseString = `get_rate${queryString}${apiKey}`;
  params.sign = crypto.createHash('md5').update(baseString).digest('hex');

  // 3. GET-запрос
  const response = await axios.get('https://api.1payment.com/get_rate', { params });
  return response.data;
}

const apiKey = process.env.ONEPAYMENT_API_KEY;
getRate(apiKey, 1234, 5678, 'usdt', 'rub').then(console.log);
```

Python

```python
import hashlib
import os
import requests

def get_rate(
    api_key: str,
    partner_id: int,
    project_id: int,
    currency_from: str,
    currency_to: str,
) -> dict:
    params = {
        "partner_id": partner_id,
        "project_id": project_id,
        "currency_from": currency_from,
        "currency_to": currency_to,
    }

    # 1. Сортировка параметров
    sorted_keys = sorted(params.keys())
    query_string = "&".join(f"{k}={params[k]}" for k in sorted_keys)

    # 2. Подпись get_rate
    base_string = f"get_rate{query_string}{api_key}"
    params["sign"] = hashlib.md5(base_string.encode("utf-8")).hexdigest()

    # 3. GET-запрос
    response = requests.get("https://api.1payment.com/get_rate", params=params)
    response.raise_for_status()
    return response.json()

api_key = os.environ["ONEPAYMENT_API_KEY"]
print(get_rate(api_key, 1234, 5678, "usdt", "rub"))
```

PHP

```php
<?php

function getRate(
    string $apiKey,
    int $partnerId,
    int $projectId,
    string $currencyFrom,
    string $currencyTo
): string {
    $params = [
        'partner_id' => $partnerId,
        'project_id' => $projectId,
        'currency_from' => $currencyFrom,
        'currency_to' => $currencyTo,
    ];

    // 1. Сортировка параметров по алфавиту
    ksort($params, SORT_LOCALE_STRING);
    $tail = '';
    foreach ($params as $k => $v) {
        if ($k === 'sign') {
            continue;
        }
        $tail .= "{$k}={$v}&";
    }
    $tail = substr($tail, 0, -1);

    // 2. Формирование подписи (префикс get_rate)
    $params['sign'] = md5('get_rate' . $tail . $apiKey);

    // 3. Запрос к API
    $url = 'https://api.1payment.com/get_rate?' . http_build_query($params);
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

$apiKey = getenv('ONEPAYMENT_API_KEY');
echo getRate($apiKey, 1234, 5678, 'usdt', 'rub');
```

cURL

```bash
# Подпись: md5("get_rate" + currency_from=usdt&currency_to=rub&partner_id=1234&project_id=5678 + API_KEY)

curl -sS "https://api.1payment.com/get_rate?partner_id=1234&project_id=5678&currency_from=usdt&currency_to=rub&sign=PASTE_MD5_HEX"
```

## Ответ API

Успешный ответ (`200`):


```json
{
  "rate": 72.44
}
```

| Поле | Тип | Описание |
|  --- | --- | --- |
| `rate` | Number | Курс конвертации `currency_from` → `currency_to`. |


Ошибка запроса (`400`):


```json
{
  "error_code": 2
}
```

Расшифровка `error_code` — в [Коды ошибок (API)](/pages/error-codes-api).

## Связанные разделы

- [Формат запроса к API](/pages/init-request)
- [Запрос баланса](/pages/balance)
- [Типы выплат](/pages/payout-types)