Fio bank REST API implementation in PHP. It allows you to download and iterate through account balance changes.
There is a Symfony Bundle for using this library in a Symfony app.
- Install the latest version with
composer require mhujer/fio-api-php - Create a token in the ebanking (Nastavení / API)
- Use it according to the example bellow and check the docblocks
<?php
require_once 'vendor/autoload.php';
$downloader = new FioApi\Downloader('TOKEN@todo');
$transactionList = $downloader->downloadSince(new \DateTimeImmutable('-1 week'));
foreach ($transactionList->getTransactions() as $transaction) {
var_dump($transaction); //object with getters
}downloadFromTo(DateTimeInterface $from, DateTimeInterface $to): TransactionListdownloadSince(DateTimeInterface $since): TransactionListdownloadLast(): TransactionListsetLastId(string $id)- sets the last downloaded ID through the API
Fio API enforces a 30-second cooldown between requests using the same token. If you make a request sooner, the API returns HTTP 409.
This library includes a built-in rate limiter that coordinates requests across multiple processes using a shared JSON file with file locking.
<?php
require_once 'vendor/autoload.php';
$store = new FioApi\RateLimit\JsonRateLimitStore('/tmp/fio-rate-limit.json');
$limiter = new FioApi\RateLimit\RateLimiter($store, true);
$downloader = new FioApi\Downloader('TOKEN@todo', null, $limiter);
$transactionList = $downloader->downloadSince(new \DateTimeImmutable('-1 week'));In wait mode, if less than 30 seconds have passed since the last request for the same token, the limiter will sleep() for the remaining time before proceeding.
<?php
require_once 'vendor/autoload.php';
$store = new FioApi\RateLimit\JsonRateLimitStore('/tmp/fio-rate-limit.json');
$limiter = new FioApi\RateLimit\RateLimiter($store, false);
$downloader = new FioApi\Downloader('TOKEN@todo', null, $limiter);
try {
$transactionList = $downloader->downloadSince(new \DateTimeImmutable('-1 week'));
} catch (FioApi\Exceptions\TooGreedyException $e) {
// Handle: request came too soon, try again later
}The JsonRateLimitStore uses flock() for file-level locking, so multiple cron jobs or workers sharing the same store file will safely stagger their API calls without colliding.
You can implement FioApi\RateLimit\RateLimitStoreInterface to use a database or other shared storage (e.g. Redis, SQLite) instead of a JSON file.
Fio API PHP works with PHP 7.4 or higher.
Bugs and feature request are tracked on GitHub
Martin Hujer - https://www.martinhujer.cz
- #31 add
composer/ca-bundleas a required dependency instead of bundled root cert (thx @�feldsam!)
- #28 use new Fio API URL (thx @�feldsam!)
- #19 gracefully handle response with empty column8 (thx @fmasa!)
- #17 added senderName (nazev protiuctu) (thx @jan-stanek!)
- #13 Support /last and /set-last-id endpoints (thx @jiripudil!)
- #12 handle empty transaction list (thx @soukicz!)
- #9 minimal supported version is PHP 7.1
- #9
DateTimereplaced withDateTimeImmutable(orDateTimeInterface) - #9 strict types and primitive typehints are used everywhere
- dropped support for PHP <7
- #7: added official composer CA bundle support (@soukicz)
- #2: added Kdyby/CurlCaBundle as an optional dependency (@mhujer)
- #1: updated default GeoTrust certificate (@soukiii)
- #1: added
specificationfield in transaction (@soukiii)
- upgraded to Guzzle 6
- support for PHP 5.4 dropped (as Guzzle 6 requires PHP 5.5+)
- updated root certificate (Root 3) as the Fio changed it on 2014-05-26
- initial release

