PHPackages                             masyasmv/finam-sdk-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. masyasmv/finam-sdk-laravel

ActiveLibrary[HTTP &amp; Networking](/categories/http)

masyasmv/finam-sdk-laravel
==========================

PHP SDK for Finam Trade API with Laravel integration (REST).

v1.1.1(1mo ago)00MITPHPPHP ^8.0CI passing

Since Dec 15Pushed 1mo agoCompare

[ Source](https://github.com/MasyaSmv/finam-sdk-laravel)[ Packagist](https://packagist.org/packages/masyasmv/finam-sdk-laravel)[ Docs](https://tradeapi.finam.ru/)[ RSS](/packages/masyasmv-finam-sdk-laravel/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (6)Dependencies (19)Versions (11)Used By (0)

Finam SDK for Laravel and PHP
=============================

[](#finam-sdk-for-laravel-and-php)

[![CI](https://github.com/MasyaSmv/finam-sdk-laravel/actions/workflows/ci.yml/badge.svg)](https://github.com/MasyaSmv/finam-sdk-laravel/actions/workflows/ci.yml)[![Latest Version on Packagist](https://camo.githubusercontent.com/fbd0ef1986e7a7f58d8366886fa69a6ccb75d54fe1e3e1a3a813e60e70ef3edf/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6d61737961736d762f66696e616d2d73646b2d6c61726176656c)](https://packagist.org/packages/masyasmv/finam-sdk-laravel)[![Total Downloads](https://camo.githubusercontent.com/413a0f286f8cf1360f5bf6a65e590445fd36e896373b6a82356dc5b250edf90f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6d61737961736d762f66696e616d2d73646b2d6c61726176656c)](https://packagist.org/packages/masyasmv/finam-sdk-laravel)[![License](https://camo.githubusercontent.com/cca0f8cffe4483d825e8643225a4f5e7426d9a9509c5073e9bc863549b9cf022/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f4d61737961536d762f66696e616d2d73646b2d6c61726176656c)](LICENSE)

PHP SDK для Finam Trade API с удобной работой через Laravel facade и без Laravel.

Пакет решает две задачи:

- даёт простой high-level API для типовых сценариев;
- оставляет низкоуровневый клиент, если нужен прямой доступ к REST-методам.

Документация Finam:

Для кого пакет
--------------

[](#для-кого-пакет)

Пакет подойдёт, если ты хочешь:

- быстро получить котировки, инструменты, операции и заявки;
- работать не с сырыми массивами, а с DTO и коллекциями;
- использовать Laravel facade `Finam::...`;
- подключить тот же SDK в обычном PHP-проекте без Laravel.

Что уже умеет пакет
-------------------

[](#что-уже-умеет-пакет)

- выпуск session token через `Finam::issueToken($secret)`
- подключение через secret одной командой: `Finam::connectSecret($secret)`
- подключение сессии через `Finam::connect($token)`
- низкоуровневый клиент через `Finam::client($token)`
- операции по счёту
- список заявок и получение одной заявки
- размещение market/limit orders
- размещение SL/TP orders
- инструменты, биржи, расписание, часы рынка
- котировки, свечи, стакан, последние сделки
- usage metrics
- создание отчёта и получение информации по отчёту
- typed DTO и typed collections
- Laravel service provider и facade

Требования
----------

[](#требования)

- PHP `^8.0`
- Laravel `^8.0` для Laravel-режима
- `ext-json`

Установка
---------

[](#установка)

```
composer require masyasmv/finam-sdk-laravel
```

Если ты используешь Laravel, service provider и facade подключатся автоматически.

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

[](#быстрый-старт)

### Самый короткий путь

[](#самый-короткий-путь)

```
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connectSecret($secret);

$details = $session->sessionDetails();
$accountIds = $details->accountIds();
```

### Если нужен явный двухшаговый flow

[](#если-нужен-явный-двухшаговый-flow)

```
use MasyaSmv\FinamSdk\Facades\Finam;

$issued = Finam::issueToken($secret);
$sessionToken = $issued->token();
$session = Finam::connect($sessionToken);

$details = $session->sessionDetails();
$accountIds = $details->accountIds();

$quotes = $session->getLatestQuotes(['SBER@MISX', 'GAZP@MISX']);
$orders = $session->getOrders();
```

### 3. Получить счёт и использовать его дальше

[](#3-получить-счёт-и-использовать-его-дальше)

Если в сессии только один счёт, `accountId` можно не передавать в часть методов.
Если счетов несколько, передавай `accountId` явно.

```
/** @var string $accountId */
$accountId = $details->accountIds()->first();

$operations = $session->getOperationsByDate(
    new DateTimeImmutable('2026-04-01'),
    new DateTimeImmutable('2026-04-03'),
    $accountId,
);

$order = $session->getOrder('123456789', $accountId);
```

Примеры
-------

[](#примеры)

### Laravel: котировки и стакан

[](#laravel-котировки-и-стакан)

```
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connect($token);

$quotes = $session->getLatestQuotes(['SBER@MISX', 'GAZP@MISX']);
$sber = $quotes->first();

$orderBook = $session->getOrderBook('SBER@MISX');
$bestRow = $orderBook->rows()->first();
```

### Laravel: свечи

[](#laravel-свечи)

```
use DateTimeImmutable;
use MasyaSmv\FinamSdk\Dto\Market\CandlesQueryDto;
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connect($token);

$candles = $session->getCandles(new CandlesQueryDto(
    symbol: 'SBER@MISX',
    timeframe: 'M1',
    startDate: new DateTimeImmutable('-1 hour'),
    endDate: new DateTimeImmutable('now'),
));
```

### Laravel: размещение заявки

[](#laravel-размещение-заявки)

```
use MasyaSmv\FinamSdk\Dto\Order\PlaceOrderInputDto;
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connect($token);

$order = $session->placeOrder(
    new PlaceOrderInputDto(
        symbol: 'SBER@MISX',
        quantity: '1',
        side: 'BUY',
        type: 'LIMIT',
        timeInForce: 'TIME_IN_FORCE_DAY',
        limitPrice: '250.00',
    ),
    '1930918',
);
```

### Laravel: SL/TP заявка

[](#laravel-sltp-заявка)

```
use MasyaSmv\FinamSdk\Dto\Order\PlaceSlTpOrderInputDto;
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connect($token);

$order = $session->placeSlTpOrder(
    new PlaceSlTpOrderInputDto(
        symbol: 'SBER@MISX',
        side: 'SELL',
        quantitySl: '1',
        slPrice: '240.00',
        quantityTp: '1',
        tpPrice: '270.00',
    ),
    '1930918',
);
```

### Laravel: инструменты

[](#laravel-инструменты)

```
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connect($token);

$instrument = $session->getInstrument('SBER@MISX', '1930918');
$allInstruments = $session->getInstruments();
$exchanges = $session->getExchanges();
$schedule = $session->getSchedule('SBER@MISX');
```

### Laravel: usage metrics

[](#laravel-usage-metrics)

```
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connect($token);
$usage = $session->getUsageMetrics();

foreach ($usage->quotas() as $quota) {
    echo $quota->name() . ': ' . $quota->remaining() . PHP_EOL;
}
```

### Laravel: отчёты

[](#laravel-отчёты)

```
use DateTimeImmutable;
use MasyaSmv\FinamSdk\Dto\Report\CreateAccountReportInputDto;
use MasyaSmv\FinamSdk\Dto\Report\ReportDateRangeDto;
use MasyaSmv\FinamSdk\Facades\Finam;

$session = Finam::connect($token);

$created = $session->createAccountReport(new CreateAccountReportInputDto(
    accountId: '1930918',
    reportForm: 'REPORT_FORM_PDF',
    dateRange: new ReportDateRangeDto(
        from: new DateTimeImmutable('2026-04-01'),
        to: new DateTimeImmutable('2026-04-03'),
    ),
));

$info = $session->getAccountReportInfo($created->reportId());
```

Обычный PHP без Laravel
-----------------------

[](#обычный-php-без-laravel)

Самый простой способ в обычном PHP-проекте: использовать низкоуровневый клиент.

### Низкоуровневый клиент

[](#низкоуровневый-клиент)

```
use MasyaSmv\FinamSdk\Client\FinamClient;

$client = FinamClient::make($token);

$response = $client->get('/sessions/details');

if ($response->ok()) {
    $data = $response->data();
}
```

Если тебе нужен именно high-level session API вне Laravel, это тоже можно собрать вручную, но это уже более продвинутый сценарий. Для большинства plain PHP-проектов проще и понятнее начать с low-level клиента. Подробности есть в [docs/low-level-client.md](docs/low-level-client.md).

Конфигурация
------------

[](#конфигурация)

Пакет не хранит токен в конфиге.
Токен всегда передаётся явно в runtime:

- `Finam::issueToken($secret)`
- `Finam::connectSecret($secret)`
- `Finam::connect($token)`
- `Finam::client($token)`

`config/finam.php` хранит только настройки транспорта:

```
return [
    'base_url' => 'https://tradeapi.finam.ru/v1',
    'http' => [
        'timeout' => 10.0,
        'connect_timeout' => 5.0,
        'retries' => 0,
        'retry_delay_ms' => 200,
        'user_agent' => 'finam-sdk-laravel',
    ],
];
```

Опубликовать конфиг в Laravel можно так:

```
php artisan vendor:publish --tag=finam-config
```

High-level API
--------------

[](#high-level-api)

Основной интерфейс сессии:

- `sessionDetails()`
- `getOperationsByDate($startDate, $endDate, ?$accountId = null, ?$limit = null)`
- `getOrders(?$accountId = null)`
- `getOrder($orderId, ?$accountId = null)`
- `placeOrder(PlaceOrderInputDto $order, ?$accountId = null)`
- `placeSlTpOrder(PlaceSlTpOrderInputDto $order, ?$accountId = null)`
- `getAllInstruments(?$cursor = null, bool $onlyActive = false, bool $onlyDisabled = false)`
- `getInstruments()`
- `getInstrument($symbol, ?$accountId = null)`
- `getExchanges()`
- `getClock()`
- `getSchedule($symbol)`
- `getLatestQuotes(array $symbols)`
- `getCandles(CandlesQueryDto $query)`
- `getOrderBook($symbol)`
- `getLatestTrades($symbol)`
- `getUsageMetrics()`
- `createAccountReport(CreateAccountReportInputDto $report)`
- `getAccountReportInfo($reportId)`

Все эти методы возвращают DTO или typed collections.

Для входа в high-level API есть два варианта:

- короткий shortcut: `Finam::connectSecret($secret)`
- явный вариант: `Finam::issueToken($secret)` и потом `Finam::connect($token)`

Typed collections
-----------------

[](#typed-collections)

Коллекции наследуются от `Illuminate\Support\Collection`, поэтому доступны привычные методы:

- `first()`
- `count()`
- `map()`
- `filter()`
- `pluck()`
- `all()`

Плюс у части коллекций есть удобные методы:

- `OrderCollection::findById($orderId)`
- `InstrumentCollection::findBySymbol($symbol)`

Низкоуровневый клиент
---------------------

[](#низкоуровневый-клиент-1)

Если high-level API тебе не подходит, можно работать напрямую через REST-клиент:

```
use MasyaSmv\FinamSdk\Facades\Finam;

$client = Finam::client($token);

$response = $client->get('/accounts/1930918/orders');
```

Доступные resource wrappers:

- `$client->auth()`
- `$client->connect()`
- `$client->account()`
- `$client->order()`
- `$client->instrument()`
- `$client->market()`
- `$client->usageMetrics()`
- `$client->reports()`

Ошибки
------

[](#ошибки)

Основные типы исключений:

- `InvalidRequestException`
    Когда входные данные некорректны ещё до отправки запроса.
- `ApiHttpException`
    Когда Finam вернул HTTP-ошибку и её нужно обработать как ответ API.
- `ApiRequestFailedException`
    Когда сломался transport-уровень: сеть, таймаут, невозможность выполнить запрос.
- `InvalidResponseException`
    Когда сервер вернул битый или неожиданный ответ.
- `ResponseMappingException`
    Когда ответ пришёл, но не соответствует ожидаемому shape.
- `AccountResolutionException`
    Когда пакет не может сам выбрать счёт.

Пример:

```
use MasyaSmv\FinamSdk\Exceptions\ApiHttpException;
use MasyaSmv\FinamSdk\Exceptions\InvalidRequestException;

try {
    $quotes = Finam::connect($token)->getLatestQuotes(['SBER@MISX']);
} catch (InvalidRequestException $e) {
    report($e);
} catch (ApiHttpException $e) {
    report($e);
}
```

Где смотреть полную документацию
--------------------------------

[](#где-смотреть-полную-документацию)

- [Полная карта документации](docs/README.md)
- [Установка и настройка](docs/installation.md)
- [Быстрый старт](docs/quick-start.md)
- [High-level session API](docs/session-api.md)
- [Низкоуровневый клиент](docs/low-level-client.md)
- [Ошибки и диагностика](docs/errors.md)
- [FAQ](docs/faq.md)

Тесты и качество
----------------

[](#тесты-и-качество)

```
composer test
composer analyse
composer psalm
```

CI проверяет:

- `composer validate --strict`
- `phpunit`
- `phpstan`
- `psalm`
- матрицу `prefer-stable` и `prefer-lowest`

Ограничения и честные ожидания
------------------------------

[](#ограничения-и-честные-ожидания)

- пакет не делает бизнес-логику стратегии за тебя
- пакет не хранит токены
- пакет не открывает browser login flow сам
- для некоторых broker-side сценариев Finam может возвращать ограничения по правам, даже если SDK работает корректно
- отчёты уже поддерживаются, но конкретные значения `reportForm` стоит сверять с актуальной документацией и правами твоего аккаунта

Лицензия
--------

[](#лицензия)

MIT. См. [LICENSE](LICENSE).

###  Health Score

38

—

LowBetter than 85% of packages

Maintenance92

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~27 days

Total

5

Last Release

39d ago

Major Versions

v0.1.1 → v1.0.02026-04-03

### Community

Maintainers

![](https://www.gravatar.com/avatar/f29a405df86487468d199f9525b44185d3bd3a81ccca962f75e0517a9ea44682?d=identicon)[MasyaSmv](/maintainers/MasyaSmv)

---

Top Contributors

[![MasyaSmv](https://avatars.githubusercontent.com/u/61746307?v=4)](https://github.com/MasyaSmv "MasyaSmv (56 commits)")

---

Tags

brokerfinamfinam-apilaravelphprest-apisdktradingphpapilaravelsdkresttradingtradebrokerfinam

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Psalm

Type Coverage Yes

### Embed Badge

![Health badge](/badges/masyasmv-finam-sdk-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/masyasmv-finam-sdk-laravel/health.svg)](https://phpackages.com/packages/masyasmv-finam-sdk-laravel)
```

###  Alternatives

[xeroapi/xero-php-oauth2

Xero official PHP SDK for oAuth2 generated with OpenAPI spec 3

1054.3M14](/packages/xeroapi-xero-php-oauth2)[api-platform/laravel

API Platform support for Laravel

59126.4k6](/packages/api-platform-laravel)[zenditplatform/zendit-php-sdk

PHP client for Zendit API

1204.3k](/packages/zenditplatform-zendit-php-sdk)[huaweicloud/huaweicloud-sdk-php

Huawei Cloud SDK for PHP

1829.2k2](/packages/huaweicloud-huaweicloud-sdk-php)[ory/hydra-client-php

Documentation for all of Ory Hydra's APIs.

1710.8k](/packages/ory-hydra-client-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
