> For the complete documentation index, see [llms.txt](https://api-portal.novapost.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api-portal.novapost.com/metodi-1/metodi/readme/sdk-dlya-php.md).

# SDK для PHP

## NovaPost API SDK

> \<p>NovaPost API SDK — це офіційний PHP SDK (Software Development Kit)\
> для інтеграції з API Nova Post. За допомогою цього пакета можна швидко\
> та зручно підключити до PHP-застосунку такі можливості Nova Post, як\
> створення відправлень, відстеження посилок та інші сервіси.\</p>\
> \
> \<strong>Можливості / переваги:\</strong>\<ul>\
> &#x20; \<li>\<strong>Офіційна підтримка Nova Post\</strong> — гарантована актуальність, стабільність і допомога розробникам.\</li>\
> &#x20; \<li>\<strong>Відповідність сучасним стандартам PHP\</strong> — сумісність із сучасними фреймворками та бібліотеками.\</li>\
> &#x20; \<li>\<strong>Гнучкість і розширюваність\</strong> — можливість замінити logger, HTTP client, token storage.\</li>\
> &#x20; \<li>\<strong>Проста інтеграція\</strong> — встановлення через Composer, наявні приклади використання.\</li>\
> \</ul>\
> \
> \<strong>Корисні посилання:\</strong>\</br> \<ul>\
> &#x20; \<li>\<a href="<https://packagist.org/packages/novadigital/novapost-api-sdk>" target="\_new">Packagist — офіційний пакет\</a>\</li>\
> &#x20; \<li>\<a href="<https://github.com/NovaDigitalHub/novapost-api-sdk>" target="\_new">GitHub-репозиторій\</a>\</li>\
> &#x20; \<li>\<a href="<https://github.com/NovaDigitalHub/novapost-api-sdk/issues>" target="\_new">Issue Tracker (підтримка та зворотний зв’язок)\</a>\</li>\
> \</ul>\
> \
> \<h2>Вимоги\</h2>\
> \
> \<ul>\
> &#x20; \<li>\
> &#x20;   \<strong>Основні залежності\</strong> — runtime-залежності (потрібні для використання в production):\
> &#x20;   \<ul>\
> &#x20;     \<li>\<code>php \&gt;= 8.0\</code> — пакет потребує PHP 8.0+.\</li>\
> &#x20;     \<li>\<code>guzzlehttp/guzzle ^7.0\</code> — HTTP-клієнт для виконання запитів.\</li>\
> &#x20;     \<li>\<code>psr/container ^2.0\</code> — сумісність із PSR dependency containers.\</li>\
> &#x20;     \<li>\<code>psr/log ^3.0\</code> — інтерфейси логування, сумісні з PSR.\</li>\
> &#x20;   \</ul>\
> &#x20; \</li>\
> \
> &#x20; \<li>\
> &#x20;   \<strong>Залежності для розробки\</strong> — dev-залежності (потрібні лише для development/CI):\
> &#x20;   \<ul>\
> &#x20;     \<li>\<code>phpstan/phpstan ^2.1\</code> — статичний аналіз.\</li>\
> &#x20;     \<li>\<code>phpunit/phpunit ^9.6\</code> — unit-тести.\</li>\
> &#x20;     \<li>\<code>squizlabs/php\_codesniffer ^3.13\</code> — стиль коду / linting.\</li>\
> &#x20;     \<li>\<code>vlucas/phpdotenv ^5.6\</code> — завантаження змінних середовища з \<code>.env\</code>.\</li>\
> &#x20;   \</ul>\
> &#x20; \</li>\
> \
> &#x20; \<li>\<strong>Suggests:\</strong> None\</li>\
> &#x20; \<li>\<strong>Provides:\</strong> None\</li>\
> &#x20; \<li>\<strong>Conflicts:\</strong> None\</li>\
> &#x20; \<li>\<strong>Replaces:\</strong> None\</li>\
> \</ul>\
> \
> \<h2>Встановлення\</h2>\
> \
> Щоб розпочати роботу, встановіть SDK через \<a\
> href="<https://getcomposer.org/>" target="\_new">Composer\</a>, виконавши\
> команду:\
> \
> \<pre>\<code>composer require novadigital/novapost-api-sdk\</code>\</pre>\
> \
> \<h2>Робота з SDK\</h2>\
> \
> \<h3>Ініціалізація клієнта\</h3>\
> \
> Після встановлення SDK ініціалізуйте клієнт за допомогою\
> \<code>NovaPostApiFactory\</code>.\</br> Це дозволяє швидко створити клієнт\
> для взаємодії з API Nova Post.\</br> Додайте до свого коду такий приклад:\
> \
> \<pre>\<code> use NovaDigital\NovaPost\NovaPostApiFactory; use\
> NovaDigital\NovaPost\Exception\ApiException; use\
> NovaDigital\NovaPost\Resources\Division;\
> \
> $apiKey = 'YOUR\_API\_KEY';\
> \
> try {\
> &#x20; $novaPostApi = (new NovaPostApiFactory())($apiKey);\
> &#x20; $searchParams = \[\
> &#x20;   'textSearch' => 'berlin',\
> &#x20;   'divisionCategories' => \[Division::DIVISION\_CATEGORY\_POSTOMAT]\
> &#x20; ];\
> &#x20; $divisions = $novaPostApi->divisions()->get($searchParams);\
> } catch (ApiException $e) {\
> &#x20;   echo "API Error: " . $e->getMessage();\
> } \</code>\</pre>\
> \
> \<h3>Приклад методу SDK\</h3>\
> \
> Методи SDK мають ті самі назви та параметри, що й відповідні методи\
> client API.\</br> Для розрахунку вартості доставки використайте такий\
> приклад:\
> \
> \<pre>\<code> try {\
> &#x20; $shipmentData = \[\
> &#x20;   // shipment calculation data\
> &#x20; ];\
> &#x20; $calculationResult = $novaPostApi->shipments()->calculate($shipmentData);\
> } catch (ApiException $e) {\
> &#x20; echo "API Error: " . $e->getMessage();\
> } \</code>\</pre>\
> \
> \<h2>Розширені можливості\</h2>\
> \
> \<p>\
> &#x20; SDK дозволяє замінювати стандартні сервіси (logger, HTTP client,\
> &#x20; token storage тощо) власними реалізаціями, використовуючи\
> &#x20; dependency container \<code>ContainerBuilder\</code>.\
> \</p>\
> \
> \<p>Це корисно, якщо вам потрібно:\</p>\
> \
> \<ul>\
> &#x20; \<li>Інтегрувати SDK із системою логування вашого фреймворку.\</li>\
> &#x20; \<li>Налаштувати HTTP-клієнт із кастомними параметрами або middleware.\</li>\
> &#x20; \<li>Використовувати власний механізм зберігання JWT-токенів.\</li>\
> \</ul>\
> \
> \<p>\
> &#x20; Для цього передайте власні сервіси у фабрику клієнта через\
> &#x20; \<strong>ContainerBuilder\</strong>.\
> \</p>\
> \
> \<h3>Використання ContainerBuilder\</h3>\
> \
> \<p>Для більш гнучкого налаштування можна використати\
> \<code>NovaDigital\NovaPost\DI\ContainerBuilder\</code> для кастомізації\
> різних аспектів клієнта.\</p>\
> \
> \<pre>\<code> use NovaDigital\NovaPost\DI\ContainerBuilder; use\
> NovaDigital\NovaPost\Exception\ApiException; use\
> NovaDigital\NovaPost\NovaPostApiFactory; use\
> NovaDigital\NovaPost\Storage\JwtTokenStorageInterface; use\
> Psr\Log\LoggerInterface; use My\Awesome\MyLogger; use\
> My\Awesome\DbJwtTokenStorageProvider;\
> \
> $apiKey = 'YOUR\_API\_KEY';\
> \
> try {\
> &#x20; $containerBuilder = (new ContainerBuilder())\
> &#x20;   ->bind(LoggerInterface::class, MyLogger::class)\
> &#x20;   ->bind(JwtTokenStorageInterface::class, DbJwtTokenStorageProvider::class);\
> \
> &#x20; $novaPostApi = (new NovaPostApiFactory())(\
> &#x20;   apiKey: $apiKey,\
> &#x20;   containerBuilder: $containerBuilder\
> &#x20; );\
> \
> &#x20; $payload = \[\
> &#x20;   // calculation parameters\
> &#x20; ];\
> \
> &#x20; $response = $novaPostApi->shipments()->calculate($payload);\
> \
> } catch (ApiException $e) {\
> &#x20;   echo 'API Error => ' . $e->getMessage() . ' (Code => ' . $e->getCode() . ')';\
> } \</code>\</pre>\
> \
> \<h3>Доступні перевизначення сервісів\</h3>\
> \
> \<table>\
> &#x20; \<thead>\
> &#x20;   \<tr>\<th>Сервіс\</th>\<th>Призначення\</th>\</tr>\
> &#x20; \</thead>\
> &#x20; \<tbody>\
> &#x20;   \<tr>\<td>Psr\Log\LoggerInterface\</td>\<td>Кастомне логування\</td>\</tr>\
> &#x20;   \<tr>\<td>Psr\Http\Client\ClientInterface\</td>\<td>Кастомна конфігурація HTTP-клієнта\</td>\</tr>\
> &#x20;   \<tr>\<td>NovaDigital\NovaPost\Storage\JwtTokenStorageInterface\</td>\<td>Кастомне сховище JWT-токенів\</td>\</tr>\
> &#x20;   \<tr>\<td>NovaDigital\NovaPost\Http\ResponseHandlerInterface\</td>\<td>Кастомна обробка відповідей\</td>\</tr>\
> &#x20;   \<tr>\<td>NovaDigital\NovaPost\Http\RetryHandlerInterface\</td>\<td>Кастомна логіка retry\</td>\</tr>\
> &#x20; \</tbody>\
> \</table>\
> \
> \<h3>Відповідність PSR\</h3>\
> \
> \<strong>NovaPost API SDK\</strong> відповідає таким стандартам PSR, що забезпечує\
> сумісність, сучасний дизайн і високу якість коду:\
> \
> \<table>\
> &#x20; \<thead>\
> &#x20;   \<tr>\
> &#x20;     \<th>Стандарт\</th>\
> &#x20;     \<th>Призначення\</th>\
> &#x20;   \</tr>\
> &#x20; \</thead>\
> &#x20; \<tbody>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-4: Autoloader\</strong>\</td>\
> &#x20;     \<td>Для автозавантаження класів\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-11: Container Interface\</strong>\</td>\
> &#x20;     \<td>Для гнучкого контейнера залежностей\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-3: Logger Interface\</strong>\</td>\
> &#x20;     \<td>Дозволяє використовувати будь-який сумісний logger\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-7: HTTP Message Interface\</strong>\</td>\
> &#x20;     \<td>Використовується для всіх API-запитів і відповідей\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-18: HTTP Client\</strong>\</td>\
> &#x20;     \<td>Для надсилання HTTP-запитів\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-17: HTTP Factories\</strong>\</td>\
> &#x20;     \<td>Для створення PSR-7 повідомлень\</td>\
> &#x20;   \</tr>\
> &#x20;   \<tr>\
> &#x20;     \<td>\<strong>PSR-12: Extended Coding Standard\</strong>\</td>\
> &#x20;     \<td>Для стилю коду\</td>\
> &#x20;   \</tr>\
> &#x20; \</tbody>\
> \</table>\
> \
> Дотримання цих стандартів робить SDK надійним, передбачуваним і зручним\
> для інтеграції в будь-який сучасний PHP-застосунок.<br>

```json
{"openapi":"3.0.0","info":{"title":"API Nova Post","version":"1.0.0"},"tags":[{"name":"SDK"}],"servers":[{"description":"sandbox","url":"https://api-stage.novapost.com/v.1.0/"},{"description":"production","url":"https://api.novapost.com/v.1.0/"}],"paths":{"/sdk/php":{"patch":{"tags":["SDK"],"summary":"NovaPost API SDK","description":"<p>NovaPost API SDK — це офіційний PHP SDK (Software Development Kit)\nдля інтеграції з API Nova Post. За допомогою цього пакета можна швидко\nта зручно підключити до PHP-застосунку такі можливості Nova Post, як\nстворення відправлень, відстеження посилок та інші сервіси.</p>\n\n<strong>Можливості / переваги:</strong><ul>\n  <li><strong>Офіційна підтримка Nova Post</strong> — гарантована актуальність, стабільність і допомога розробникам.</li>\n  <li><strong>Відповідність сучасним стандартам PHP</strong> — сумісність із сучасними фреймворками та бібліотеками.</li>\n  <li><strong>Гнучкість і розширюваність</strong> — можливість замінити logger, HTTP client, token storage.</li>\n  <li><strong>Проста інтеграція</strong> — встановлення через Composer, наявні приклади використання.</li>\n</ul>\n\n<strong>Корисні посилання:</strong></br> <ul>\n  <li><a href=\"https://packagist.org/packages/novadigital/novapost-api-sdk\" target=\"_new\">Packagist — офіційний пакет</a></li>\n  <li><a href=\"https://github.com/NovaDigitalHub/novapost-api-sdk\" target=\"_new\">GitHub-репозиторій</a></li>\n  <li><a href=\"https://github.com/NovaDigitalHub/novapost-api-sdk/issues\" target=\"_new\">Issue Tracker (підтримка та зворотний зв’язок)</a></li>\n</ul>\n\n<h2>Вимоги</h2>\n\n<ul>\n  <li>\n    <strong>Основні залежності</strong> — runtime-залежності (потрібні для використання в production):\n    <ul>\n      <li><code>php &gt;= 8.0</code> — пакет потребує PHP 8.0+.</li>\n      <li><code>guzzlehttp/guzzle ^7.0</code> — HTTP-клієнт для виконання запитів.</li>\n      <li><code>psr/container ^2.0</code> — сумісність із PSR dependency containers.</li>\n      <li><code>psr/log ^3.0</code> — інтерфейси логування, сумісні з PSR.</li>\n    </ul>\n  </li>\n\n  <li>\n    <strong>Залежності для розробки</strong> — dev-залежності (потрібні лише для development/CI):\n    <ul>\n      <li><code>phpstan/phpstan ^2.1</code> — статичний аналіз.</li>\n      <li><code>phpunit/phpunit ^9.6</code> — unit-тести.</li>\n      <li><code>squizlabs/php_codesniffer ^3.13</code> — стиль коду / linting.</li>\n      <li><code>vlucas/phpdotenv ^5.6</code> — завантаження змінних середовища з <code>.env</code>.</li>\n    </ul>\n  </li>\n\n  <li><strong>Suggests:</strong> None</li>\n  <li><strong>Provides:</strong> None</li>\n  <li><strong>Conflicts:</strong> None</li>\n  <li><strong>Replaces:</strong> None</li>\n</ul>\n\n<h2>Встановлення</h2>\n\nЩоб розпочати роботу, встановіть SDK через <a\nhref=\"https://getcomposer.org/\" target=\"_new\">Composer</a>, виконавши\nкоманду:\n\n<pre><code>composer require novadigital/novapost-api-sdk</code></pre>\n\n<h2>Робота з SDK</h2>\n\n<h3>Ініціалізація клієнта</h3>\n\nПісля встановлення SDK ініціалізуйте клієнт за допомогою\n<code>NovaPostApiFactory</code>.</br> Це дозволяє швидко створити клієнт\nдля взаємодії з API Nova Post.</br> Додайте до свого коду такий приклад:\n\n<pre><code> use NovaDigital\\NovaPost\\NovaPostApiFactory; use\nNovaDigital\\NovaPost\\Exception\\ApiException; use\nNovaDigital\\NovaPost\\Resources\\Division;\n\n$apiKey = 'YOUR_API_KEY';\n\ntry {\n  $novaPostApi = (new NovaPostApiFactory())($apiKey);\n  $searchParams = [\n    'textSearch' => 'berlin',\n    'divisionCategories' => [Division::DIVISION_CATEGORY_POSTOMAT]\n  ];\n  $divisions = $novaPostApi->divisions()->get($searchParams);\n} catch (ApiException $e) {\n    echo \"API Error: \" . $e->getMessage();\n} </code></pre>\n\n<h3>Приклад методу SDK</h3>\n\nМетоди SDK мають ті самі назви та параметри, що й відповідні методи\nclient API.</br> Для розрахунку вартості доставки використайте такий\nприклад:\n\n<pre><code> try {\n  $shipmentData = [\n    // shipment calculation data\n  ];\n  $calculationResult = $novaPostApi->shipments()->calculate($shipmentData);\n} catch (ApiException $e) {\n  echo \"API Error: \" . $e->getMessage();\n} </code></pre>\n\n<h2>Розширені можливості</h2>\n\n<p>\n  SDK дозволяє замінювати стандартні сервіси (logger, HTTP client,\n  token storage тощо) власними реалізаціями, використовуючи\n  dependency container <code>ContainerBuilder</code>.\n</p>\n\n<p>Це корисно, якщо вам потрібно:</p>\n\n<ul>\n  <li>Інтегрувати SDK із системою логування вашого фреймворку.</li>\n  <li>Налаштувати HTTP-клієнт із кастомними параметрами або middleware.</li>\n  <li>Використовувати власний механізм зберігання JWT-токенів.</li>\n</ul>\n\n<p>\n  Для цього передайте власні сервіси у фабрику клієнта через\n  <strong>ContainerBuilder</strong>.\n</p>\n\n<h3>Використання ContainerBuilder</h3>\n\n<p>Для більш гнучкого налаштування можна використати\n<code>NovaDigital\\NovaPost\\DI\\ContainerBuilder</code> для кастомізації\nрізних аспектів клієнта.</p>\n\n<pre><code> use NovaDigital\\NovaPost\\DI\\ContainerBuilder; use\nNovaDigital\\NovaPost\\Exception\\ApiException; use\nNovaDigital\\NovaPost\\NovaPostApiFactory; use\nNovaDigital\\NovaPost\\Storage\\JwtTokenStorageInterface; use\nPsr\\Log\\LoggerInterface; use My\\Awesome\\MyLogger; use\nMy\\Awesome\\DbJwtTokenStorageProvider;\n\n$apiKey = 'YOUR_API_KEY';\n\ntry {\n  $containerBuilder = (new ContainerBuilder())\n    ->bind(LoggerInterface::class, MyLogger::class)\n    ->bind(JwtTokenStorageInterface::class, DbJwtTokenStorageProvider::class);\n\n  $novaPostApi = (new NovaPostApiFactory())(\n    apiKey: $apiKey,\n    containerBuilder: $containerBuilder\n  );\n\n  $payload = [\n    // calculation parameters\n  ];\n\n  $response = $novaPostApi->shipments()->calculate($payload);\n\n} catch (ApiException $e) {\n    echo 'API Error => ' . $e->getMessage() . ' (Code => ' . $e->getCode() . ')';\n} </code></pre>\n\n<h3>Доступні перевизначення сервісів</h3>\n\n<table>\n  <thead>\n    <tr><th>Сервіс</th><th>Призначення</th></tr>\n  </thead>\n  <tbody>\n    <tr><td>Psr\\Log\\LoggerInterface</td><td>Кастомне логування</td></tr>\n    <tr><td>Psr\\Http\\Client\\ClientInterface</td><td>Кастомна конфігурація HTTP-клієнта</td></tr>\n    <tr><td>NovaDigital\\NovaPost\\Storage\\JwtTokenStorageInterface</td><td>Кастомне сховище JWT-токенів</td></tr>\n    <tr><td>NovaDigital\\NovaPost\\Http\\ResponseHandlerInterface</td><td>Кастомна обробка відповідей</td></tr>\n    <tr><td>NovaDigital\\NovaPost\\Http\\RetryHandlerInterface</td><td>Кастомна логіка retry</td></tr>\n  </tbody>\n</table>\n\n<h3>Відповідність PSR</h3>\n\n<strong>NovaPost API SDK</strong> відповідає таким стандартам PSR, що забезпечує\nсумісність, сучасний дизайн і високу якість коду:\n\n<table>\n  <thead>\n    <tr>\n      <th>Стандарт</th>\n      <th>Призначення</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td><strong>PSR-4: Autoloader</strong></td>\n      <td>Для автозавантаження класів</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-11: Container Interface</strong></td>\n      <td>Для гнучкого контейнера залежностей</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-3: Logger Interface</strong></td>\n      <td>Дозволяє використовувати будь-який сумісний logger</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-7: HTTP Message Interface</strong></td>\n      <td>Використовується для всіх API-запитів і відповідей</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-18: HTTP Client</strong></td>\n      <td>Для надсилання HTTP-запитів</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-17: HTTP Factories</strong></td>\n      <td>Для створення PSR-7 повідомлень</td>\n    </tr>\n    <tr>\n      <td><strong>PSR-12: Extended Coding Standard</strong></td>\n      <td>Для стилю коду</td>\n    </tr>\n  </tbody>\n</table>\n\nДотримання цих стандартів робить SDK надійним, передбачуваним і зручним\nдля інтеграції в будь-який сучасний PHP-застосунок.\n","responses":{"200":{"description":"OK"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://api-portal.novapost.com/metodi-1/metodi/readme/sdk-dlya-php.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
